C++ Pro*C传递参数数组

C++ Pro*C传递参数数组,c++,c,oracle,oracle-pro-c,C++,C,Oracle,Oracle Pro C,我正在尝试编写Pro*C/C/C++代码来处理如下查询: SELECT col1, col2, col3, col4 FROM table WHERE param IN(<set of values>); 从param IN()所在的表中选择col1、col2、col3、col4; 我可以用一个C结构来检索结果并传递各个参数,但如果不显式地指定列表中的每个值,我似乎找不到一种方法来实现这一点 有没有办法将集合作为数组/向量/列表传递?我在 我自己想出了一个相当笨拙的解决方案,适

我正在尝试编写Pro*C/C/C++代码来处理如下查询:

SELECT col1, col2, col3, col4 FROM table WHERE param IN(<set of values>);
从param IN()所在的表中选择col1、col2、col3、col4;
我可以用一个C结构来检索结果并传递各个参数,但如果不显式地指定列表中的每个值,我似乎找不到一种方法来实现这一点


有没有办法将集合作为数组/向量/列表传递?

我在


我自己想出了一个相当笨拙的解决方案,适用于我的具体情况。它可能不适用于您的操作。

检查输入列表和输入列表运算符。

表是一个大表吗?你有创建和删除权限吗?如果是这样,请尝试使用临时表。@DanielNWerner它与问题有什么关系?创建一个临时表进行查询并在其中插入所需的数据可能比WHERE IN语句快,WHERE IN语句必须使用提供的所有值进行表扫描。通常,SQL引擎可以优化查询并制定比这种蛮力方法更好的“查询计划”。这取决于您试图传递的值的数量。SQL没有数组数据类型,因为表是该域中类似的数据结构。@DanielNWerner和使用临时表的方式会不一样吗?除此之外,使用临时表会增加客户端和服务器之间的往返次数。通常情况下,这是性能的第一杀手,肯定是在我们的系统上。答案很好,但我希望避免这样做,因为1列表大小不固定,2答案中的AskTom链接为我提供了一个解决方案。我的列表固定为最大大小,但变量可以为空,这意味着使用的值的有效数量不是固定的,而最大值是固定的。就我而言,情况并非如此。在某些情况下,列表中的ID数量可能是几百个。是的,这确实是不现实的。其中一个答案建议构建一个语句字符串并生成一个EXECUTE语句。在我的例子中,这是不可行的,因为它会对DB(语句缓存)中的其他内容产生负面影响,但是如果您没有数以百万计的此类语句,这是一个很好的解决方案。对我来说,这是同一个问题。我可能没有几百万,但我可能有几千,必须重新分析是一个问题。你能提供一些细节吗?