sql >> データベース >  >> RDS >> Oracle

Oracleアップグレード後のORA-06531

    このエラー:

    ORA-06531: Reference to uninitialized collection
    

    使用する前に初期化されていないコレクションがあることを意味します。例:

    SQL> select banner from v$version;
    
    BANNER
    --------------------------------------------------------------------------------
    Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
    
    SQL> ed
    Wrote file afiedt.buf
    
      1  CREATE OR REPLACE TYPE t_employee AS OBJECT(
      2    id  number,
      3    name VARCHAR2(300),
      4    CONSTRUCTOR FUNCTION t_employee RETURN SELF AS RESULT
      5* )
    SQL> /
    
    Type created.
    
    SQL> ed
    Wrote file afiedt.buf
    
      1* CREATE OR REPLACE TYPE t_employees AS TABLE OF t_employee
    SQL> /
    
    Type created.
    
    SQL> ed
    Wrote file afiedt.buf
    
      1  DECLARE
      2    l_emp t_employee;
      3    l_emps t_employees;
      4  BEGIN
      5    for i in (SELECT employee_id, first_name
      6                FROM employees)
      7    loop
      8      l_emp := t_employee(i.employee_id, i.first_name);
      9      l_emps.extend();
     10      l_emps(l_emps.COUNT) := l_emp;
     11    end loop;
     12    DBMS_OUTPUT.put_line(l_emps(4).name);
     13* END;
    SQL> /
    DECLARE
    *
    ERROR at line 1:
    ORA-06531: Reference to uninitialized collection
    ORA-06512: at line 9
    

    ご覧のとおり、私はORA-06531を持っています エラー、それは私がl_empsを初期化していないためです 変数、l_emps := t_employees();を追加する必要があります :

    SQL> ed
    Wrote file afiedt.buf
    
      1  DECLARE
      2    l_emp t_employee;
      3    l_emps t_employees;
      4  BEGIN
      5    l_emps := t_employees();
      6    for i in (SELECT employee_id, first_name
      7                FROM employees)
      8    loop
      9      l_emp := t_employee(i.employee_id, i.first_name);
     10      l_emps.extend();
     11      l_emps(l_emps.COUNT) := l_emp;
     12    end loop;
     13    DBMS_OUTPUT.put_line(l_emps(4).name);
     14* END;
    SQL> /
    David
    
    PL/SQL procedure successfully completed.
    

    したがって、これらすべてのPL/SQLプロシージャのソースを見てください。問題はそれらにあります。




    1. パイプライン化されたPL/SQL表関数内でSELECTを使用することは許可されていますか?

    2. Javascriptの奇妙なジェネレーターはサブ関数の動作を生成します

    3. 特別な島々

    4. SQLServerでクエリ結果の行数を返す方法