2015-08-17 60 views
0

我有包這樣的:函數返回REF CURSOR

CREATE OR REPLACE PACKAGE product_package AS 
    TYPE t_ref_cursor to IS REF CURSOR; 

    FUNCTION get_products_ref_cursor RETURN t_ref_cursor; 
END product_package; 


CREATE OR REPLACE PACKAGE BODY product_package AS 
    FUNCTION get_products_ref_cursor is RETURN t_ref_cursor IS 
     products_ref_cursor t_ref_cursor; 

    BEGIN 
     OPEN products_ref_cursor FOR 
     SELECT product_id, name, price FROM Products; 
     RETURN products_ref_cursor; 
    END get_products_ref_cursor; 
END product_package; 

我的問題是,我該如何使用功能get_products_ref_cursor(REF CURSOR),以獲得產品列表?

回答

2
declare 
    type rec is record(produc_id number, name varchar2(x), price number); 
    type l_rec is table of rec; 
    v_l_rec l_rec; 
    v_cursor product_package.t_ref_cursor; 
begin 
    v_cursor := product_package.get_products_ref_cursor; 
    fetch v_cursor bulk collect into v_l_rec; 
    -- in v_l_rec is list collection of products. 
    close v_cursor; 
end; 

代碼未經測試。

0

它取決於您從中調用函數的語言或工具。如果您使用SQL * Plus進行調用,則可以使用

print <variable_name> 

其中是返回函數結果的PL/SQL綁定變量的名稱。

如果您使用的是PL/SQL,您需要編寫一個循環,您可以在%NOTFOUND ...時退出...等等。有100多個示例,包括PL/SQL用戶指南。

如果您在Java中,則將光標對象轉換爲ResultSet並將其結果作爲循環提取。

其他語言將有其他方式,但他們大多都需要遍歷遊標並獲取結果。

所以......這取決於調用者的語言。