【问题标题】:how to call plsql procedure out parameter as a user-defined ref cursor?如何将plsql过程输出参数调用为用户定义的参考游标?
【发布时间】:2012-08-10 06:58:13
【问题描述】:

我有一个包 P 和一个过程 A。

create or replace package pkg_get_users_info_by_role
as 
type user_info_ref_cur is ref cursor;
procedure get_user_info_proc 
(p_role_name varchar2, p_user_info out user_info_ref_cur);
end pkg_get_users_info_by_role;
/

还有身体;

create or replace package body pkg_get_users_info_by_role
as 
procedure get_user_info_proc
(p_role_name varchar2, p_user_info out user_info_ref_cur)
as
begin
open p_user_info for 
select user_id,username,user_password,role_name from user_info,role_info
where user_info.user_role=role_info.role_id 
and role_info.role_name like p_role_name; 
end; 
end pkg_get_users_info_by_role;

我的问题是,我该如何调用该程序?我需要一个 pkg_get_users_info_by_role.user_info_ref_cur 类型的变量来调用它吗?我无法创建这种类型的变量。有没有办法解决这个问题?

谢谢!!

【问题讨论】:

    标签: oracle parameters cursor procedure ref


    【解决方案1】:

    是的,您只需在调用程序中将光标定义为 package.type。这是一个简单的示例,应该适用于大多数 Oracle 数据库:

    CREATE OR REPLACE PACKAGE pkg AS
    TYPE rc IS REF CURSOR;
    PROCEDURE get_rc(p_rc OUT rc);
    END pkg;
    /
    CREATE OR REPLACE PACKAGE BODY pkg AS
    PROCEDURE get_rc(p_rc OUT rc) IS
    BEGIN
      OPEN p_rc FOR
      SELECT t.owner, t.table_name FROM all_tables t;
    END get_rc;
    END pkg;
    /
    
    DECLARE
      crsr pkg.rc;
      v1 VARCHAR2(32);
      v2 VARCHAR2(32);
    BEGIN
      pkg.get_rc(crsr);
      LOOP
        EXIT WHEN crsr%NOTFOUND;
        FETCH crsr INTO v1, v2;
        dbms_output.put_line(v1||': '||v2);
      END LOOP;
      CLOSE crsr;
    END;
    /
    

    【讨论】:

      猜你喜欢
      • 2017-07-19
      • 2012-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多