2015-08-17 63 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并将其结果作为循环提取。

其他语言将有其他方式,但他们大多都需要遍历游标并获取结果。

所以......这取决于调用者的语言。