Tôi có một quy trình thực hiện một số phép tính trên tất cả các bản ghi được con trỏ trả về. Có vẻ như sau:Tôi có thể chuyển con trỏ rõ ràng đến một hàm/thủ tục để sử dụng trong vòng lặp FOR không?
PROCEDURE do_calc(id table.id_column%TYPE)
IS
CURSOR c IS
SELECT col1, col2, col3
FROM table
WHERE ...;
BEGIN
FOR r IN c LOOP
-- do some complicated calculations using r.col1, r.col2, r.col3 etc.
END LOOP;
END;
Bây giờ tôi có trường hợp cần thực hiện cùng một phép tính trên một bộ hồ sơ khác đến từ một bảng khác. Tuy nhiên, chúng có cùng "hình dạng" như trong ví dụ trên.
Có thể viết một thủ tục mà trông như thế này:
PROCEDURE do_calc2(c some_cursor_type)
IS
BEGIN
FOR r IN c LOOP
-- do the calc, knowing we have r.col1, r.col2, r.col3, etc.
END LOOP;
END;
tôi biết về SYS_REFCURSOR
, nhưng tôi đã tự hỏi nếu nó đã có thể sử dụng thuận tiện hơn nhiều FOR ... LOOP
cú pháp và loại kỷ lục tiềm ẩn.
Cảm ơn Vasily, tôi đã không chắc chắn PL/SQL có thể xử lý rằng mức độ đánh máy structual, nhưng nó hoạt động như một sự quyến rũ! :-) –
Bạn được chào đón) –
hi @VasilyKomarov .. nếu câu lệnh con trỏ có tham số mà bạn chuyển làm đầu vào cho tất cả các hàm và thủ tục trong gói .. như ví dụ .. con trỏ c được chọn 1 làm một, 2 là hai từ hai nơi hàng = row_id; trong đó row_id là tham số – thealchemist