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