作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我无法让一段 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 子句中?
最佳答案
如果 users
很小且 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,3,4,5'));
关于plsql - PL/SQL - IN CLAUSE 中的逗号分隔列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12800180/
我是一名优秀的程序员,十分优秀!