Oracle
 sql >> база данни >  >> RDS >> Oracle

PLS-00201:идентификаторът „R_CUR“ трябва да бъде деклариран в динамичен sql

Грешката е валидна тук. Ако погледнете execute immediate израз, когато бъде разрешен и се изпълни, той започва с begin блок. В това начало блокирайте декларацията на r_cur е извън обхвата и следователно получавате проблема. Трябва да направите r_cur декларация и в блока you begin. Вижте моята коментирана част.

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);



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Използване на изрази WITH и UPDATE в една и съща SQL заявка

  2. Не може да се предаде стойност на низ 1,2 като вход към заявка за оракул

  3. Извлечете конкретна стойност от CLOB (съдържаща XML), като същевременно създавате по един ограничен низ на ред от таблица. CLOB стойността може да е нулева на някои редове

  4. Oracle SQL:сортиране на ред с разделен низ

  5. Агрегиране на низове в ORACLE 10g с три колони