2011-04-28 12 views
1

我已經創建了一個RefCursor類型的包。如果使用條件塊中的Refcursor in Pl/SQl

我在我的存儲過程中使用包。

代碼如下所示:

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; 

我想用兩個如果在這個存儲過程的條件。

我是Pl-Sql的新手。

任何人都可以通過告訴我這個語法來幫助我。

感謝名單

-

更新

感謝名單賈斯汀(response here),

但我想用兩個條件,如:

IF(標準=' 1')然後

//一些查詢;結束如果

如果(條件='2')然後

// some query;

end if

我會傳遞param標準的值。

基於標準的價值,我想執行不同的查詢。

回答

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;