Oracle
 sql >> Base de données >  >> RDS >> Oracle

PLS-00201 :l'identifiant 'R_CUR' doit être déclaré en sql dynamique

L'erreur est valable ici. Si vous regardez le execute immediate instruction, lorsqu'elle est résolue et exécutée, elle commence par un begin bloquer. Dans ce bloc de début, la déclaration de r_cur est hors de portée et vous obtenez donc le problème. Vous devez faire le r_cur déclaration dans votre bloc de début également. Voir ma partie commentée.

FOR j IN r.FIRST .. r.LAST
      LOOP
         v_if_statement :=
                'IF r_cur('||i||').'
             || r (j)
             || ' '
             || 'IS NOT NULL'
             || ' '
             || 'THEN :var:=''true'';'
             || ' '
             || 'dbms_output.put_line(''inside stmt'');'
             || 'END IF;';

           ----**Here when the begin block gets resolved the r_cur decalration is needed.**     
            v_sql_statement := 'BEGIN ' || v_if_statement || ' END;';

            EXECUTE IMMEDIATE v_sql_statement USING OUT var;

        DBMS_OUTPUT.put_line ('var : ' || var);