I am trying to delete some records in a SP before doing subsequent inserts. When I use a variable in WHERE clause of the DELETE, it doesn't work. When I replace the variable with its value, it deletes the records. I am guessing it is something I am doing with placing the variable in WHERE clause but can't figure out what it is. I tried different ways, none of which worked.
PROCEDURE USPGETOUTCOME
(
IPSITEMIDS VARCHAR2,
....
CUR_OUT OUT GETDATACURSOR
)
IS
....
....
V_TEMP VARCHAR(200);
V_NEWITEMSLIST VARCHAR2(4000) := REPLACE(IPSITEMIDS, '''', '');
CURSOR cur IS
SELECT REGEXP_SUBSTR(V_NEWITEMSLIST, '[^,]+', 1, LEVEL) V_NEWITEM2 FROM DUAL CONNECT BY instr(V_NEWITEMSLIST, ',',1, LEVEL -1) > 0;
BEGIN
-- IPSITEMIDS is ''EM060500103','LP060500105''
V_TEMP := TRIM(BOTH '''' FROM IPSITEMIDS);
-- After above statement V_TEMP shows as 'EM060500103','LP060500105'
-- These don't work
-- DELETE FROM TEMPOUTCOME WHERE ITEMID IN (IPSITEMIDS);
-- DELETE FROM TEMPOUTCOME WHERE ITEMID IN (V_TEMP);
-- DELETE FROM TEMPOUTCOME WHERE ITEMID IN ('''|| V_TEMP ||''');
-- This works
DELETE FROM TEMPOUTCOME WHERE ITEMID IN ('EM060500103','LP060500105');
COMMIT;
-- This is using cursor to loop through each item and delete one by one; works but seems a waste!
-- Delete existing records from temp table for given ITEM IDs
FOR rec IN cur LOOP
V_NEWITEM := rec.V_NEWITEM2;
DELETE FROM IDCTEMPOUTCOME WHERE ITEMID IN (V_NEWITEM);
END LOOP;
COMMIT;