Oracle
 sql >> Baza danych >  >> RDS >> Oracle

PLS-00201:identyfikator 'R_CUR' musi być zadeklarowany w dynamicznym sql

Tutaj błąd jest poprawny. Jeśli spojrzysz na execute immediate instrukcja, kiedy zostanie rozwiązana i wykonana, zaczyna się od begin blok. W tym początku zablokuj deklarację r_cur jest poza zakresem i dlatego pojawia się problem. Musisz zrobić r_cur deklaracja w tobie również zaczyna się blok. Zobacz moją komentowaną część.

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. Czy istnieje instrukcja SQL, która podzieli 2 długie kolumny na kilka par kolumn?

  2. Jaka jest różnica między warunkiem NOT a NOT() w Oracle i MS SQL Server?

  3. Jak wybrać rekord z drugą najwyższą pensją w bazie danych Oracle?

  4. (Oracle SQL) Wyłapywanie unikalnego błędu ograniczenia

  5. wykonać obliczenia na danych w formie tabeli