加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

oracle – PL / SQL查询以逗号分隔的字符串

发布时间:2020-12-12 13:09:28 所属栏目:百科 来源:网络整理
导读:我正在Oracle APEX中开发一个应用程序.我有一个用户ID的字符串,以逗号分隔,看起来像这样, 45,4932,20,19 该字符串存储为 :P5_USER_ID_LIST 我想要一个查询,它将查找此列表中的所有用户,我的查询如下所示 SELECT * FROM users u WHERE u.user_id IN (:P5_USER
我正在Oracle APEX中开发一个应用程序.我有一个用户ID的字符串,以逗号分隔,看起来像这样,
45,4932,20,19

该字符串存储为

:P5_USER_ID_LIST

我想要一个查询,它将查找此列表中的所有用户,我的查询如下所示

SELECT * FROM users u WHERE u.user_id IN (:P5_USER_ID_LIST);

我一直收到Oracle错误:数字无效.但是,如果我将字符串硬编码到查询中则可行.像这样:

SELECT * FROM users u WHERE u.user_id IN (45,19);

任何人都知道为什么这可能是一个问题?

绑定变量绑定一个值,在本例中为字符串’45,19′.您可以使用Randy建议的动态SQL和连接,但是您需要非常小心,用户无法修改此值,否则您会遇到SQL注入问题.

更安全的路线是将ID放入PL / SQL过程中的Apex集合中:

declare
    array apex_application_global.vc_arr2;
begin
    array := apex_util.string_to_table (:P5_USER_ID_LIST,',');
    apex_collection.create_or_truncate_collection ('P5_ID_COLL');
    apex_collection.add_members ('P5_ID_COLL',array);
end;

然后将您的查询更改为:

SELECT * FROM users u WHERE u.user_id IN 
(SELECT c001 FROM apex_collections
 WHERE collection_name = 'P5_ID_COLL')

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读