【问题标题】:Using if condition blocks with Refcursor in Pl/SQl在 Pl/SQl 中使用带有 Refcursor 的 if 条件块
【发布时间】:2011-04-28 17:57:23
【问题描述】:

我创建了一个 RefCursor 类型的包。

我在我的存储过程中使用包。

代码如下:

CREATE OR REPLACE PACKAGE PRODDB.types
AS
type cursorType is ref cursor;
END;

CREATE OR REPLACE PROCEDURE PRODDB.P_Get_AdminPLCReport         
(        
    Final_Output out TYPES.cursorType

)        
AS

BEGIN       
IF( Criteria='1') THEN        
  OPEN Final_Output FOR 
  SELECT  Personal_Information.F_Salutation
  FROM    Allotment_Information;

END IF;

END P_Get_AdminPLCReport;

我想在这个存储过程中使用两个 if 条件。

我是 Pl-Sql 的新手。

谁能帮我告诉我这个的语法。

感谢

--

更新

感谢贾斯汀 (response here),

但我想使用两个条件:

如果(条件 = '1')然后

// 一些查询;结束如果

如果(条件 = '2')然后

// 一些查询;

如果结束

我将传递参数标准的值。

根据条件的值,我想执行不同的查询。

【问题讨论】:

    标签: oracle10g if-statement sys-refcursor


    【解决方案1】:

    首先,没有必要在 10g 的 TYPES 包中定义弱类型 REF CURSOR。这在一些旧版本中是必需的,但 Oracle 现在有一个 SYS_REFCURSOR 类型。

    其次,您的过程无法编译,因为没有声明变量Criteria。我将忽略这一点,并假设您已在其他地方声明并初始化了该变量。

    根据第二个条件,最简单的选择通常是这样的

    CREATE OR REPLACE PROCEDURE PRODDB.P_Get_AdminPLCReport 
    (
      Final_Output OUT sys_refcursor
    )
    AS
    BEGIN
      IF( criteria = '1' and someOtherCriteria = '2' )
      THEN
        OPEN final_output FOR
          SELECT personal_information.f_salutation
            FROM allotment_information;
      END IF;
    END p_get_adminPLCReport;
    

    【讨论】:

      【解决方案2】:

      sys_refcursor 仍然是弱类型引用游标。查看数据字典中sys_refcursor 的定义,您会看到:

      type sys_refcursor 是引用光标;

      【讨论】:

        猜你喜欢
        • 2014-11-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-09
        • 1970-01-01
        相关资源
        最近更新 更多