是否有解决方法
'ORA-01795: maximum number of expressions in a list is 1000 error'
我有一个查询,它是根据一个字段的值选择字段.我使用的是in子句,有10000多个值
例:
select field1, field2, field3
from table1
where name in
(
'value1',
'value2',
...
'value10000+'
);
Run Code Online (Sandbox Code Playgroud)
每次我执行查询时,我都会得到ORA-01795: maximum number of expressions in a list is 1000 error.我试图在TOAD中执行查询,没有区别,同样的错误.如何修改查询以使其工作?
提前致谢
可以在SQL IN子句中放置1000多个项目吗?我们的Oracle数据库无法解决问题.
如果是,我们如何在SQL IN子句中放置超过1000个项目?
如果没有,我还能做什么?
我希望能够将值的"数组"传递给我的存储过程,而不是串行调用"添加值"过程.
任何人都可以建议一种方法吗?我在这里错过了什么吗?
编辑:我将使用PostgreSQL/MySQL,我还没有决定.
使用JDBC(Oracle)我需要在两个表中的每一个中插入大约一千行.像这样的东西:
"INSERT INTO TABLE_A (A_ID, A_NAME, A_LAST_NAME) VALUES (MY_SEQUENCE.NEXTVAL, ?, ?)";
"INSERT INTO TABLE_B (B_ID, B_DESCRIPTION) VALUES (MY_SEQUENCE.CURRVAL, ?)";
Run Code Online (Sandbox Code Playgroud)
问题是两个表都是通过共同的顺序连接的,因此语句的顺序很重要.
如果我只有一张桌子就很容易了.在那种情况下,我使用了代码:
String insert = "Insert into TABLE_A(A_ID, A_NAME, A_LAST_NAME) values(MY_SEQUENCE.NEXTVAL, ?, ?)";
conn.setAutoCommit(false);
PreparedStatement ps = conn.prepareStatement(insert);
for(MyObject obj : myCollection) {
ps.setString(1, obj.getName());
ps.setString(2, obj.getLastName());
ps.addBatch();
}
ps.executeBatch();
conn.commit();
ps.close();
Run Code Online (Sandbox Code Playgroud)
但是这种方法只能使用一个准备好的语句,因此只能使用一个插入.我该如何为这个问题提供解决方案?
我想知道使用 IN 子句时集合的大小是否有限制。
select a from A where ab IN (:c)
c 是一个列表(例如)。
在Oracle中,我们可以放入"in"表达式中的元素数量限制为1000.我们的代码中有一个查询:
<cfquery>
SELECT * from table1 where ID IN (#somelist#)
</cfquery>
Run Code Online (Sandbox Code Playgroud)
#somelist#是CF列表变量.
什么是解决这个问题的CF最合适的解决方案?
在我的程序中,有很多情况需要获取有关知道ID的其他信息.所以我有id列表,其长度可能很长(例如100000个元素).
如何在不使用临时表的情况下使用此列表并在oracle中传输以获取sql?
不,我尝试使用集合:
CREATE TYPE TEST_VARRAY IS VARRAY(5000) OF NUMBER(18);
SELECT G.ID, G.NAME FROM ANY_TABLE G
WHERE G.ID IN
(
SELECT COLUMN_VALUE FROM TABLE(
NEW TEST_VARRAY
(0,1,2,3... and so on ...,995,996,997,998,999)
)
);
Run Code Online (Sandbox Code Playgroud)
有1000个号码.当我尝试执行此查询时,ORA-00907: missing right parenthesis会出现错误提示!但如果我先删除0(所以我们有999个数字)sql执行正常.
这有什么问题?
我们都知道,当尝试使用超过1000个值的bomabard查询时,我们会看到此异常.列限制的最大值是1000 ..最好的解决方案是将查询拆分为两个.你可以建议一些可能的代码重构方法,以使我的问题消失.任何帮助将不胜感激.
当audTypeFieldIdList大于1000个值时,我们会看到异常.
try {
String query = "select AUDIT_TYPE_FIELD_ID, FIELD_NAME from AUDIT_TYPE_FIELD where AUDIT_TYPE_FIELD_ID in (";
int x = 0;
for (int y = 1; y <= audTypeFieldIdList.size(); y++) {
query += audTypeFieldIdList.get(x);
if (y != audTypeFieldIdList.size()) {
query += ", ";
}
x++;
}
query += ")";
List<Long> audTypeFieldIdList, Connection connection) {
ResultSet rs = null;
Statement stmt = null;
List<AuditTypeField> audTypeFieldList = new ArrayList<AuditTypeField>();
try {
String query = "select AUDIT_TYPE_FIELD_ID, FIELD_NAME from AUDIT_TYPE_FIELD where …Run Code Online (Sandbox Code Playgroud) 我正在使用java.我在对象级别有2000个键值,并且必须从DB中获取该值的相应记录.我在这里找到了临时表建议 ,但是它不会影响性能吗?如何在单个镜头中插入这些值,以便减少数据库调用次数?