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

Làm cách nào để viết một thủ tục được lưu trữ để thêm một cột vào con trỏ tham chiếu từ một thủ tục được lưu trữ khác?

Một giải pháp khả thi (cuối cùng có thể được đơn giản hóa) là sử dụng một hàm bảng để xử lý con trỏ và thêm giá trị hàm.

Giả sử hàm trả về sys_refcursor được gọi là get_cur và con trỏ bao gồm cột ID, NAME (điều này quan trọng vì hàm bảng yêu cầu định nghĩa kiểu).

Bạn khai báo TYPE cho hàng (bao gồm cả cột đường dẫn bổ sung) và cho bảng kết quả.

create type t_row is object
 ( id             number(10),
   name varchar2(10),
   path varchar2(10)
);
/

create type t_rows is table of t_row;
/

và xác định hàm bảng tìm nạp con trỏ và thêm lệnh gọi hàm.

create or replace function get_cur2  return 
t_rows
PIPELINED
as
   cv_out     sys_refcursor;
   id   number;
   name   varchar2(100);    
begin
      cv_out := get_cur; 
      loop 
        FETCH cv_out INTO id, name;
        exit when cv_out%NOTFOUND;
        pipe row(t_row(id,name, GetRegionPath(id)));
      end loop;
      close    cv_out;
      return;
end;
/

Bây giờ bạn có thể chọn dữ liệu từ hàm bảng

select * from  table(get_cur2); 

        ID NAME       PATH     
---------- ---------- ----------
         1 one        path 1     
         2 two        path 2 

và tất nhiên bạn có thể sử dụng truy vấn này để mở con trỏ trong hàm thứ ba sẽ trả về SYS_REFCURSOR với cột đường dẫn bổ sung.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để xóa các số 0 đứng đầu khỏi giá trị ngày và tháng trong Oracle, khi phân tích cú pháp thành chuỗi bằng hàm to_char?

  2. Oracle:BẬT SERVEROUTPUT bằng Toad

  3. Chiều dài thực của một chuỗi, như Oracle đã thấy

  4. Làm thế nào để sử dụng bản ghi để lặp lại một con trỏ tham chiếu?

  5. Cách biểu diễn phép chia quan hệ (biểu thức đại số cơ bản) trong SQL