Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sqlite 将集合绑定为“a”的右侧;“col在哪里?”;条款_Sqlite - Fatal编程技术网

Sqlite 将集合绑定为“a”的右侧;“col在哪里?”;条款

Sqlite 将集合绑定为“a”的右侧;“col在哪里?”;条款,sqlite,Sqlite,在Oracle OCI中,我可以编写如下语句: select * from t where pk in :1 并为:1占位符绑定VArray集合 我看不到任何方法可以在SQLite中实现等效功能,除非我使用以下工作之一: 预备 从t中选择*其中pk=:1 取而代之的是,使用集合中的所有PK执行N次,并手动对N个查询中的行进行“并集” 将我的pk集合放在一个临时表中,并使用t进行连接 以文本形式将:1替换为集合值,否定已准备语句的好处 我错过什么了吗?建议采用什么方法来模拟OCI的集合绑定?

在Oracle OCI中,我可以编写如下语句:

select * from t where pk in :1
并为:1占位符绑定VArray集合

我看不到任何方法可以在SQLite中实现等效功能,除非我使用以下工作之一:

  • 预备

    从t中选择*其中pk=:1

    取而代之的是,使用集合中的所有PK执行N次,并手动对N个查询中的行进行“并集”

  • 将我的pk集合放在一个临时表中,并使用t进行连接

  • 以文本形式将:1替换为集合值,否定已准备语句的好处

我错过什么了吗?建议采用什么方法来模拟OCI的集合绑定?谢谢,--DD

唉,
sqlite
只支持绑定到标量,所以您不能将参数绑定到集合是对的。如果收集器中的项数是有界的,则可以准备一个语句,其中“
in(?,,?,?)”
[[假设最多四项]],然后绑定数组中的实际标量(如果少于4,则重复绑定最后一个,或者绑定一个您知道“不可能”的值作为占位符);否则,你所描绘的方法或多或少都是我想到的。

谢谢,我没想到这一个。对于基数较低的集合,它可能是最简单、最快的。我可以有一个准备好的语句,其中最多有N个占位符,另一个语句执行连接,例如,当有更多元素时。干杯,——嗯,事实证明在甲骨文中这并不像我想象的那么容易,但仍然是可能的。有关要使用的正确Oracle语法,请参阅。