我无法获得一块pl / sql代码.在我的程序的顶部,我从我的oracle apex应用程序中获取了一些复选框的数据.因为包含复选框的报表是动态生成的,所以我必须遍历
APEX_APPLICATION.G_F01
v_list VARCHAR2(255) := (1,3,5,9,10);
我想稍后在该列表上查询并将v_list放在IN子句上,如此
SELECT * FROM users WHERE user_id IN (v_list);
这当然会引发错误.我的问题是我可以将v_list转换为什么,以便能够将它插入到pl / sql过程中的查询中的IN子句中?
解决方法
如果用户很小且user_id不包含逗号,您可以使用:
SELECT * FROM users WHERE ',' || v_list || ',' LIKE '%,'||user_id||',%'
此查询不是最佳的,因为它无法在user_id上使用索引.
我建议你使用一个流水线函数,它返回一个你可以直接查询的NUMBER表.例如:
CREATE TYPE tab_number IS TABLE OF NUMBER; / CREATE OR REPLACE FUNCTION string_to_table_num(p VARCHAR2) RETURN tab_number PIPELINED IS BEGIN FOR cc IN (SELECT rtrim(regexp_substr(str,'[^,]*,',1,level),') res FROM (SELECT p || ',' str FROM dual) CONNECT BY level <= length(str) - length(replace(str,''))) LOOP PIPE ROW(cc.res); END LOOP; END; /
然后,您就可以构建如下查询:
SELECT * FROM users WHERE user_id IN (SELECT * FROM TABLE(string_to_table_num('1,2,4,5'));
原文地址:https://www.jb51.cc/mssql/83406.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。