2014-01-13 2 views
-2

Я получаю сообщение об ошибке при выполнении нижеописанной процедуры.Ошибка при выполнении процедуры в oracle

CREATE OR REPLACE PROCEDURE P_SUMIT (P_FEED IN FEED.FEED_ID%TYPE, P_OPCO_ID IN FEED.OPCO_ID%TYPE) 
AS 
BEGIN 
DECLARE V_PCF_PATTERN FEED.PCF_PATTERN%TYPE; 
DECLARE CURSOR C_FEED FOR SELECT PCF_PATTERN FROM FEED WHERE FEED_ID=P_FEED AND OPCO_ID=P_OPCO_ID; 
    OPEN C_FEED; 
    LOOP 
    FETCH C_FFED INTO V_PCF_PATTERN; 
    EXIT WHEN C_FEED%NOTFOUND; 
    DBMS_OUTPUT.PUT_LINE(V_PCF_PATTERN); 
    END LOOP; 
    CLOSE C_FEED; 
END; 

Журналы ошибок:

3/1   PLS-00103: Encountered the symbol "DECLARE" when expecting one of the following: 

    begin function pragma procedure subtype type <an identifier> 
    <a double-quoted delimited-identifier> current cursor delete 
    exists prior external language 
The symbol "begin" was substituted for "DECLARE" to continue. 

4/1   PLS-00103: Encountered the symbol "DECLARE" when expecting one of the following: 

    begin function pragma procedure subtype type <an identifier> 
    <a double-quoted delimited-identifier> current cursor delete 
    exists prior 

Пожалуйста помогите.

ответ

0

DECLARE должно быть после AS ключевое слово.

CREATE OR REPLACE PROCEDURE P_SUMIT (P_FEED IN FEED.FEED_ID%TYPE, P_OPCO_ID IN FEED.OPCO_ID%TYPE) 
    AS 
     V_PCF_PATTERN FEED.PCF_PATTERN%TYPE; 
     CURSOR C_FEED IS SELECT PCF_PATTERN FROM FEED WHERE FEED_ID=P_FEED AND OPCO_ID=P_OPCO_ID; 
    BEGIN 
     OPEN C_FEED; 
     LOOP 
     FETCH C_FEED INTO V_PCF_PATTERN; 
     EXIT WHEN C_FEED%NOTFOUND; 
     DBMS_OUTPUT.PUT_LINE(V_PCF_PATTERN); 
     END LOOP; 
     CLOSE C_FEED; 
    END P_SUMIT; 
/
+0

CURSOR FOR SELECT? – SriniV

+0

Спасибо, я этого не заметил, только отформатирован из OP. –

+0

Я также ответил на то же, а некоторые на нисходящее. Поэтому я удалил его. Все еще удивляйтесь, почему downvotes и это тоже без оснований. – SriniV

0

Здесь нет необходимости в явном курсоре или для параметров, имеющих префикс «p_». Неявные курсоры быстрее и надежнее писать и работать лучше.

create or replace procedure p_sumit (
    feed_id in feed.feed_id%type, 
    opco_id in feed.opco_id%type) 
as 
begin 
    for c_feed in (
    select pcf_pattern 
    from feed 
    where feed_id = p_sumit.feed_id and 
      opco_id = p_sumit.opco_id) 
    loop 
    dbms_output.put_line(c_feed.pcf_pattern); 
    end loop; 
end; 
Смежные вопросы