在oracle中执行过程期间发生错误

时间:2014-01-13 10:47:36

标签: oracle plsql

我在执行以下程序时遇到错误。

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

请协助。

2 个答案:

答案 0 :(得分: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;
/

答案 1 :(得分:0)

这里不需要显式游标,或者参数以&#34; p _&#34;为前缀。隐式游标的编写速度更快,更健壮,性能更好。

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;