ORACLE 如何将参数变量作为select in()的参数使用

2025-03-23 06:25:37
推荐回答(3个)
回答(1):

用动态sql
或者
将V_CUR_GOODS 中的值 变成多行数据插入临时表中 再使用

SELECT COUNT(*) INTO V_PCTRANS
FROM LT_ORDERS A
WHERE A.DD_SOURCE = '0042' AND A.DD_ORDERSTATUS = '0'
AND A.DD_STOREID = '0001'
AND A.DD_GOODS IN (
SELECT A.PARAM_4
FROM LT_PARAMTOPARAM A
WHERE A.PARAM_1 = '7'
AND A.PARAM_2 = '0001'
AND A.PARAM_3 = '0058';
);

回答(2):

  1. 用动态sql

    或者

  2. 将V_CUR_GOODS 中的值 变成多行数据插入临时表中 再使用


话说为什么要这么复杂呢?


像下面就可以了?!


SELECT COUNT(*)    INTO V_PCTRANS    
FROM LT_ORDERS A   
WHERE A.DD_SOURCE = '0042'     AND A.DD_ORDERSTATUS = '0'
     AND A.DD_STOREID = '0001'
     AND A.DD_GOODS IN (
SELECT A.PARAM_4        
FROM LT_PARAMTOPARAM A       
WHERE A.PARAM_1 = '7'         
AND A.PARAM_2 = '0001'         
AND A.PARAM_3 = '0058';
);

回答(3):

可以用正则表达式和分层的方式将变量先转化为查询结果,再去in
这么写:“AND A.DD_GOODS IN (SELECT trim(regexp_substr(str, '[^,]+', 1, level)) strRows FROM(SELECT :V_CUR_GOODS as str from dual) t CONNECT BY instr(str, ',', 1, level - 1) > 0)”