expression of wrong type oracle error

111 Views Asked by At

I am trying to execute the below plsql program, but facing expression of wrong type. Could anyone let me know what might be the error?

CREATE OR REPLACE PROCEDURE CLN_TBL (CTRLM IN VARCHAR2, CTG IN  VARCHAR,SBCT IN NUMBER, RTDT IN NUMBER )    
AS    
    V_SQL VARCHAR(2000);   
    V_TABLE VARCHAR(30);    
    CURSOR TBL_CUR    
    IS    
    SELECT TGT_TABLE_NAME FROM ODS_USER.CLNP WHERE CONTROLM=CTRLM AND     APPL_CTGY=CTG AND APPL_SUB_CTGY= SBCT;    
    L_TGT_TABLE_NAME TBL_CUR%ROWTYPE;    
BEGIN    
    OPEN TBL_CUR;    
    LOOP    
        FETCH TBL_CUR INTO L_TGT_TABLE_NAME;    
        V_TABLE:= L_TGT_TABLE_NAME ;    
        EXIT WHEN TBL_CUR%NOTFOUND;    
        V_SQL:='DELETE FROM '||V_TABLE||' WHERE RPT_DT_ID'||'=:1';    
        EXECUTE IMMEDIATE V_SQL using RTDT;    
    END LOOP;    
    COMMIT;    
    CLOSE TBL_CUR;   
END;
1

There are 1 best solutions below

0
On

As Exhausted said you cant assign row variable to varchar so You should take TGT_TABLE_NAME from row variable, like below should work;

    CREATE OR REPLACE PROCEDURE CLN_TBL (CTRLM IN VARCHAR2, CTG IN   VARCHAR,SBCT IN NUMBER, RTDT IN NUMBER )    
AS    
V_SQL VARCHAR(2000);   
V_TABLE VARCHAR(30);    
CURSOR TBL_CUR    
IS    
SELECT TGT_TABLE_NAME FROM ODS_USER.CLNP WHERE CONTROLM=CTRLM AND     APPL_CTGY=CTG AND APPL_SUB_CTGY= SBCT;    
L_TGT_TABLE_NAME TBL_CUR%ROWTYPE;    
BEGIN    
OPEN TBL_CUR;    
LOOP    
    FETCH TBL_CUR INTO L_TGT_TABLE_NAME;    
    V_TABLE:= L_TGT_TABLE_NAME.TGT_TABLE_NAME ;    
    EXIT WHEN TBL_CUR%NOTFOUND;    
    V_SQL:='DELETE FROM '||V_TABLE||' WHERE RPT_DT_ID'||'=:1';    
    EXECUTE IMMEDIATE V_SQL using RTDT;    
END LOOP;    
COMMIT;    
CLOSE TBL_CUR;   
END;