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