【发布时间】:2021-10-09 16:09:24
【问题描述】:
我使用 LISTAGG 对一系列 ID 进行分组。 这是返回值的示例-
A 1,2,3,4,5 PROC.ABC
B 6,7,8 PROC.ABC
C 2,3,4 PROC.DEF
然后我尝试使用游标并将每个值传递到以下过程:
PROCEDURE abc(id_list IN VARCHAR2) IS
BEGIN
UPDATE table_a SET flag = 1 WHERE id IN (id_list);
END;
这个错误(“无效号码”错误)因为 id_list 被插入为
'1,2,3,4,5'
,不是
1,2,3,4,5
。我怎样才能让它工作?如果可能,我宁愿不使用动态 SQL。
【问题讨论】:
-
如果您控制此设计,请不要使用 listagg 和字符串参数 - 而是创建并传递数字集合。
-
SQL 没有处理 CSV 值的本地方法。您必须编写一个,或者切换到支持的东西,例如 JSON、XML 或 Alex 建议的集合。
-
感谢 Alex 的想法,花了一段时间,但我终于弄明白了
标签: sql oracle stored-procedures