我正在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')