我有这样的包裹:
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 (参考光标)来获取产品列表?
答案 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并在循环中获取其结果。
其他语言将有其他方式,但它们通常都需要循环遍历游标并获取结果。
所以......这取决于来电者的语言。