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

Tham chiếu đến bộ sưu tập chưa được khởi tạo PL / SQL

Trong quy trình KIỂM TRA, bạn có v được khai báo dưới dạng tham số OUT - điều này có nghĩa là thủ tục cần khởi tạo tập hợp đầu ra trong thủ tục (ví dụ:v := T(); ). Ngay cả khi bạn thay đổi khối gọi để khởi tạo u_t điều này sẽ không hữu ích, vì u_t bộ sưu tập không được chuyển vào thủ tục - nó chỉ nhận những gì thủ tục chuyển trả lại.

Thay đổi mã của bạn như sau:

CREATE OR REPLACE PROCEDURE TEST ( u IN T, v OUT T) IS
  i NUMBER := u.FIRST;
BEGIN
  v := T();
  v.EXTEND(u.COUNT);

  IF i IS NOT NULL THEN
    LOOP
      v(i) := u(i);
      i := u.NEXT(i);
      EXIT WHEN i IS NULL;
    END LOOP;
  END IF;
END TEST;

DECLARE
  v_t T;
  u_t T;
BEGIN
  v_t := T();
  v_t.EXTEND(2);

  v_t(1) := 'This is test1';
  v_t(2) := 'This is test2';

  TEST(v_t, u_t);

  FOR i IN u_t.FIRST..u_t.LAST LOOP
    DBMS_OUTPUT.PUT_LINE(u_t(i));
  END LOOP;
END;

Xin lưu ý rằng hằng số chuỗi trong PL / SQL phải được đặt trong dấu ngoặc đơn, không phải dấu ngoặc kép.

Ngoài ra - việc sử dụng các tên biến tương tự có ý nghĩa trái ngược nhau trong thủ tục và khối gọi chỉ làm tăng thêm sự nhầm lẫn. Hãy tập thói quen sử dụng những cái tên có ý nghĩa và bạn sẽ đỡ phải nhầm lẫn sau này.

Chia sẻ và tận hưở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. Giá trị trình tự Oracle không được sắp xếp

  2. Khi nào một QUERY CHUẨN BỊ không thành công trong PRO C?

  3. ES miễn phí cho ngày phát hành 11.2.0.4 và 12.2

  4. Làm cách nào để sao chép hoặc nhập các lược đồ Oracle giữa hai cơ sở dữ liệu khác nhau trên các máy chủ khác nhau?

  5. Truy vấn số / nhóm Oracle