PL / pgSQL:选择哪里不起作用

时间:2015-03-03 08:20:05

标签: sql postgresql plpgsql

我目前正在使用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;

2 个答案:

答案 0 :(得分:1)

更改功能以接受文字array

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

并在= any子句中使用where

where value = any (input)

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

根据评论中的 @a_horse 建议,可以保留该功能,只需将字符串转换为array

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

答案 1 :(得分:-3)

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

中的值

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

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