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

Làm cách nào để bạn nhận được các kết quả được định dạng độc đáo từ một thủ tục Oracle trả về một con trỏ tham chiếu?

Nếu GetQuestions là một hàm trả về một con trỏ chuột, dường như là những gì bạn có trong phiên bản SQL Server, sau đó bạn có thể thực hiện điều gì đó như sau:

select * from table(MyPackage.GetQuestions('OMG Ponies'));

Hoặc nếu bạn cần nó trong một khối PL / SQL thì bạn có thể sử dụng cùng một lựa chọn trong con trỏ.

Bạn cũng có thể có hàm tạo ra dbms_output thay vào đó, các câu lệnh để chúng luôn có sẵn để gỡ lỗi, mặc dù điều đó làm tăng thêm một chút chi phí.

Chỉnh sửa

Rất tiếc, không chắc có thể cast() con trỏ trả về cho một kiểu có thể sử dụng được, trừ khi bạn sẵn sàng khai báo kiểu của riêng mình (và một bảng thuộc kiểu đó) bên ngoài gói. Tuy nhiên, bạn có thể làm điều này, chỉ để kết xuất kết quả:

create package mypackage as
    function getquestions(user in varchar2) return sys_refcursor;
end mypackage;
/

create package body mypackage as
    function getquestions(user in varchar2) return sys_refcursor as
        r sys_refcursor;
    begin
        open r for
            /* Whatever your real query is */
            select 'Row 1' col1, 'Value 1' col2 from dual
            union
            select 'Row 2', 'Value 2' from dual
            union
            select 'Row 3', 'Value 3' from dual;
            return r;
    end;
end mypackage;
/

var r refcursor;
exec :r := mypackage.getquestions('OMG Ponies');
print r;

Và bạn có thể sử dụng kết quả của cuộc gọi trong một thủ tục hoặc hàm khác; việc truy cập nó bên ngoài PL / SQL có vẻ hơi phức tạp.

Đã chỉnh sửa để thêm: Với cách tiếp cận này, nếu đó là một thủ tục, về cơ bản bạn có thể làm điều tương tự:

var r refcursor;
exec mypackage.getquestions(:r, 'OMG Ponies');
print r;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 2 cách để nối một chuỗi và một số trong Oracle

  2. PL / SQL ORA-01422:tìm nạp chính xác trả về nhiều hơn số hàng được yêu cầu

  3. Cơ sở dữ liệu:Hàm Pipelined

  4. Di chuyển dữ liệu giữa các DBMS khác nhau

  5. Làm thế nào để chỉ chọn 1 hàng từ oracle sql?