函数返回REF CURSOR

时间:2015-08-17 19:17:07

标签: oracle plsql

我有这样的包裹:

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 (参考光标)来获取产品列表?

2 个答案:

答案 0 :(得分: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;

代码未经过测试。

答案 1 :(得分:0)

这取决于您调用该函数的语言或工具。如果您使用SQL * Plus进行调用,则可以

print <variable_name>

其中是您返回函数结果的PL / SQL绑定变量的名称。

如果您使用的是PL / SQL,则需要编写一个循环来获取...当%NOTFOUND ...等时退出。有一百万个例子,包括PL / SQL用户指南。

如果您使用的是Java,则将游标对象强制转换为ResultSet并在循环中获取其结果。

其他语言将有其他方式,但它们通常都需要循环遍历游标并获取结果。

所以......这取决于来电者的语言。