Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

ORA-06531 sau khi nâng cấp Oracle

Lỗi này:

ORA-06531: Reference to uninitialized collection

có nghĩa là bạn có một bộ sưu tập chưa được khởi tạo trước khi bạn sử dụng nó, ví dụ:

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

Như bạn thấy, tôi có ORA-06531 lỗi, đó là do tôi chưa khởi tạo l_emps biến, tôi phải thêm 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.

Vì vậy, hãy xem nguồn của tất cả các thủ tục PL / SQL này, vấn đề là ở chúng.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ORA-00907:Thiếu dấu ngoặc phải khi tạo khóa ngoại Oracle 12c

  2. Chạy exe từ DBMS_SCHEDULER

  3. Làm thế nào để liệt kê các kết nối đang hoạt động / đang mở trong Oracle?

  4. Không thể tải DLL “OraOps10.dll”

  5. Ant có nhiệm vụ kiểm tra xem một cơ sở dữ liệu (kết nối) có tồn tại hay không?