SELECT ITEM_CD,INV_PRICE BULK COLLECT INTO itemcd_table,old_price_table 
FROM ZHT_INVENTORY_EX 
WHERE ITEM_CD IN ('215','216','217','218','219','220','221','222') 通过v_item_cd VARCHAR2(50) := '215'
...
v_sql_sel VARCHAR2(1000) := 'SELECT ITEM_CD,INV_PRICE FROM ZHT_INVENTORY_EX WHERE ITEM_CD IN (:1)'
...
EXECUTE IMMEDIATE v_sql_sel BULK COLLECT INTO itemcd_table,old_price_table USING v_item_cd单个数据也通过v_item_cd VARCHAR2(50) := '215,216';
v_item_cd VARCHAR2(50) := '215'||chr(44)||'216';
v_item_cd VARCHAR2(50) := '(''215'',''216'')';两个以上的查询就是找不到,where in 里面怎么用占位符写请指教。

解决方案 »

  1.   

    ... 老问题了,这样用Oracle会把那一串字符作为一个值去匹配。用拼SQL字符的方式:
    ...
    v_sql_sel VARCHAR2(1000) := 'SELECT ITEM_CD,INV_PRICE FROM ZHT_INVENTORY_EX WHERE ITEM_CD IN ('||v_item_cd||')';
    ...
      

  2.   

    那在using里面的v_item_cd怎么写?
    v_item_cd VARCHAR2(50) := '215,216';v_sql_sel VARCHAR2(1000) := 'SELECT ITEM_CD,INV_PRICE FROM ZHT_INVENTORY_EX WHERE ITEM_CD IN ('||:1||')';EXECUTE IMMEDIATE v_sql_sel BULK COLLECT INTO itemcd_table,old_price_table USING v_item_cd;还是不对啊