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.