Использование условных блоков с Refcursor в Pl / SQl - PullRequest
1 голос
/ 28 апреля 2011

Я создал пакет типа 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.

Может ли кто-нибудь помочь мне, объяснив мне синтаксис этого.1014 *

-

Обновление

Спасибо Джастину ( ответ здесь ),

Но я хочу использоватьдва условия типа:

IF (критерии = '1'), затем

// некоторый запрос;конец, если

IF (критерии = '2'), тогда

// некоторый запрос;

конец, если

Я передам значение критерия параметра.

Исходя из значения критериев, я хочу выполнить разные запросы.

Ответы [ 2 ]

1 голос
/ 28 апреля 2011

Во-первых, нет необходимости определять слабо типизированный REF CURSOR в пакете TYPES в 10g. Это было необходимо в некоторых старых выпусках, но у 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;
0 голосов
/ 26 июля 2018

sys_refcursor по-прежнему является слабо набранным ссылочным курсором. Посмотрите на определение sys_refcursor в словаре данных, и вы увидите это:

type sys_refcursor является курсором ссылки;

...