use*_*572 3 sql oracle coldfusion
在Oracle中,我们可以放入"in"表达式中的元素数量限制为1000.我们的代码中有一个查询:
<cfquery>
SELECT * from table1 where ID IN (#somelist#)
</cfquery>
Run Code Online (Sandbox Code Playgroud)
#somelist#是CF列表变量.
什么是解决这个问题的CF最合适的解决方案?
这可能是一个驱动程序限制,但当然如果你需要将列表中的1000个项目传递给内联查询,我会说你的架构在某个地方存在缺陷.
如果你能告诉我们为什么你需要做这样的事情,以及你想要完成的事情,那将是很好的,因为我可能能够进一步帮助你.
原则上(如果该查询是不可避免的),我会说你可以简单地做一些事情:
SELECT * from table1 where ID IN (<cfqueryPARAM value = "#somelist#" CFSQLType = "CF_SQL_VARCHAR">) OR ID IN (<cfqueryPARAM value = "#somelist2#" CFSQLType = "CF_SQL_VARCHAR">) ...
Run Code Online (Sandbox Code Playgroud)
例如,您可以将其分解为500个块.
更新: 添加了cfqueryparam以避免SQL注入
使用临时表.将Ids插入temp,并查询:
SELECT * from table1 where ID IN (SELECT id FROM temp_table)
Run Code Online (Sandbox Code Playgroud)
请参阅SO上的这个问题:如何将超过1000个值放入Oracle IN子句中.
看起来你正在做一个简单的替换.从性能的角度来看,这是一个糟糕的主意,从安全的角度来看,这是一个非常糟糕的主意(SQL注入).我不知道CF,但我很确定你可以使用绑定变量.