PL/pgSQL:选择in不起作用的位置



我目前正在使用PL/pgSQL,我有一行代码如下:

 FOR r_var in    
 select distinct value as val, count(*) as count from table where value IN (input) GROUP BY value;
 LOOP
 --do something here
 END LOOP;

输入来自用户,即$$'A123','B456','C789'$$

我不知道为什么它不起作用,但如果我手动输入值而不是使用输入,它就起作用了。

更新:

我发现问题出在哪里了。

代码必须是:

FOR r_var in
EXECUTE 'select distinct value as val, count(*) as count from table where value IN ('||input||') GROUP BY value;
 LOOP
 --do something here
 END LOOP;

更改函数以接受文本array:

select * from my_function(array['A123','B456','C789']::text)

并在where子句中使用= any

where value = any (input)

一般来说,循环是一个糟糕的解决方案。

正如@a_marse在评论中所建议的那样,可以保留该函数并将字符串转换为array:

where value = any (string_to_array(input, ','))

在存储过程中传递逗号分隔的输入值可以通过-1) 在临时表中添加值,并在程序中选择值

2) 通过创建表值函数来解析,调用函数来拆分逗号分隔的值

你可以参考这个网站-http://www.codeproject.com/Articles/6083/Passing-comma-delimited-parameter-to-stored-proced

最新更新