可以在SQL IN子句中放置1000多个项目吗?我们的Oracle数据库无法解决问题.
如果是,我们如何在SQL IN子句中放置超过1000个项目?
如果没有,我还能做什么?
我使用下面的JDBC代码来调用一个带有Array输入的Oracle存储过程.
但是以下三个类已被弃用.如何更换?
import oracle.sql.ArrayDescriptor;
import oracle.sql.STRUCT;
import oracle.sql.StructDescriptor;
Run Code Online (Sandbox Code Playgroud)
Java代码
Object[] reportArray = new Object[3];
STRUCT[] struct = new STRUCT[reports.size()];
ArrayDescriptor arrayDescriptor = new ArrayDescriptor(new SQLName("T_REPORT_TABLE", (OracleConnection) connection), connection);
StructDescriptor structDescriptor = StructDescriptor.createDescriptor("R_REPORT_OBJECT", connection);
int arrayIndex = 0;
for (Report data : reports) {
reportArray[0] = data.getXXX();
reportArray[1] = data.getYYY();
reportArray[2] = data.getZZZ();
struct[arrayIndex++] = new STRUCT(structDescriptor, connection, reportArray);
}
oracle.sql.ARRAY reportsArray = new oracle.sql.ARRAY(arrayDescriptor, connection, struct);
callableStatement.setArray("T_REPORT_IN", reportsArray);
callableStatement.executeUpdate();
Run Code Online (Sandbox Code Playgroud) 我试图通过createArrayOf将数组传递给我准备好的语句
val prep: PreparedStatement = con.prepareStatement("select * from SOA_WEB_USER.VOPEX where CMF_PPK_NBR in (?)")
val array :Array[Object]=Array("1165006001","1165006002")
val sqlArray = con.createArrayOf("VARCHAR",array) //getting the exception here
prep.setArray(1,sqlArray)
val rs = prep.executeQuery()
while (rs.next()) {
println(rs.getObject(1))
}
Run Code Online (Sandbox Code Playgroud)
但createArrayOf方法抛出一个错误说
Exception thread "main" java.sql.SQLFeatureNotSupportedException:Unsupported feature
at Oracle.jdbc.driver.PhysicalConnection.createArrayOf(PhysicalConnection.java:8707)
at com.testpackage.Main$.main(Main.scala:109)
at com.testpackage.Main.main(Main.scala)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
Run Code Online (Sandbox Code Playgroud)
我正在使用ojdbc7.jar进行jdbc连接.有什么我可以采取不同的方式将数组传递给准备好的语句吗?
在PL/SQL中,如何声明包含多个值的变量MyListOfValues(MyValue1,MyValue2等)
SELECT *
FROM DatabaseTable
WHERE DatabaseTable.Field in MyListOfValues
Run Code Online (Sandbox Code Playgroud)
我正在使用Oracle SQL Developer
所以我无法创建或编辑表(我是具有只读权限的用户)并且我想查找 10,000 个唯一 ID。我无法将它们放在 IN() 语句中,因为 oracle 限制超过 1000 个项目。
是否可以从 oracle 中的 DUAL 表中选择整个列表?就像是:
select
'id123,id8923,id32983,id032098,id308230,id32983289'
from DUAL
Run Code Online (Sandbox Code Playgroud) 有没有.字符串.
让我们说吧'foo', 'bar', 'chi', 'xyz', 'moo'.
我想形成一个虚拟表,比如说X用于与另一个表连接,比如Y,其中一个列中包含那些字符串,即名称.尝试通过运行以下查询来提取数据.
select Y.name, Y.age
from(**select ('foo', 'bar', 'chi', 'xyz', 'moo') as name**) X
left join Y on X.name = Y.name;
我知道**中的文本不是正确的SQL语法,但寻找类似于必须在Oracle SQL中运行查询的东西.
任何建议或想法最受欢迎.
我使用NamedNativeQuery删除行,它是这样的:
DELETE from FAKTOR
where ID IN (
select fa.ID
from FAKTOR fa
left join FAKTOR_REASON fars
on fa.FARS_ID = fars.ID
where fars.ID = 63
and fa.USER_ID in (:userIds))
Run Code Online (Sandbox Code Playgroud)
但是我如何在Oracle的IN运算符中使用1000多个userIds呢?
PS:我正在寻找一个解决方案,在一次提交中处理它;
我有一个类似的查询:
SELECT fname, lname
FROM names
WHERE gcode LIKE %5536% OR fname LIKE %3663%
Run Code Online (Sandbox Code Playgroud)
有50个这样的条件,条款有点长,但这是一般的想法.我们不能制作临时表,所以这就是我们要走的路.
我试图返回输出在其自己的列中匹配的类似条件(即,已%5536%在其自己的列中返回)
我可以通过编程方式突出显示它,但有没有办法在SQL中执行此操作?