我们的Informix ESQL / C(.ec)程序使用以下查询:

select count(*) from <table> where col >= val1 and col <= val2

在程序内部,我们使用:
select count(*) from <table> where col >= ? and col <= ?

现在,新的要求是我们需要基于值列表进行搜索。该列表是动态生成的,我们不确定列表的大小。如果列表包含2列,则查询将类似于:
select count(*) from <table> where ((col >= ? and col <= ?) OR (col >= ? and col <= ?))

我们能够构建查询框架,但不确定如何执行该查询。

当前执行如下:
exec sql execute :select_prepare using :val1, :val2

我们将所有值都放在一个整数数组中。由于我们不确定参数的数量,因此我们不得不准备执行语句。

下面的命令不起作用
exec sql execute :select_prepare using :val_array

有人可以为此提供任何解决方案吗?

最佳答案

确实确实很尴尬。啊,乔纳森(Jonathan)给出了明确的答案。但是,我的建议是左场替代。

解决此问题的一种方法是按照以下方式进行操作:注意:未经过测试的概念代码如下

CREATE TEMP TABLE ranges (
    lo INT,
    hi INT
);

for(..){
    INSERT INTO ranges (?,?) USING :var1, :var2;
}

SELECT COUNT(DISTINCT id) FROM table, ranges WHERE col BETWEEN lo AND hi

/* later.. */

DROP TABLE ranges;

关于c - 如何在Informix ESQL/C中的“using”中动态提供值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7350065/

10-09 03:30