【问题标题】:Function returning REF CURSOR [duplicate]返回 REF CURSOR 的函数 [重复]
【发布时间】:2015-08-17 19:17:07
【问题描述】:

我有这样的包裹:

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

【问题讨论】:

    标签: oracle plsql


    【解决方案1】:
    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;
    

    代码未经测试。

    【讨论】:

      【解决方案2】:

      这取决于您调用函数的语言或工具。如果你是从 SQL*Plus 调用,你可以

      print <variable_name>
      

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

      如果您在 PL/SQL 中,则需要编写一个循环,当 %NOTFOUND... 时,您 fetch...exit... 等等。有一百万个示例,包括 PL/SQL 用户指南。

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-07-21
        • 2010-11-02
        • 2020-05-05
        • 2012-01-13
        • 2013-11-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多