2016-06-26 70 views
1

私のようなエラーを取得していますため:エラー:00103 PLSQL手順

Error(5,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.

Error(5,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.

と私のコードは次のとおりです。

CREATE OR REPLACE PROCEDURE procExplicitCursorAccountSlct 
AS 
DECLARE 
    CURSOR C1 IS SELECT * FROM ACCOUNT; 
BEGIN 
    OPEN C1; 
    FOR i in C1 LOOP 
    FETCH C1 INTO ID,ACCOUNTTYPE,BALANCE; 
    EXIT WHEN C1%NOTFOUND; 
    DBMS_OUTPUT.PUT_LINE(ID||'-'||ACCOUNTTYPE||'-'||BALANCE); 
    DBMS_OUTPUT.PUT_LINE(C1%ROWCOUNT); 
    END LOOP; 
    CLOSE C1;  
END; 
+2

ちょうど 'DECLARE'キーワードを削除してください。 CREATE PROCEDUREの構文を参照してください。https://docs.oracle.com/database/121/LNPLS/create_procedure.htm#LNPLS01373 Threreは 'IS/AS'キーワードの直後に* declre_section *ですが、このセクションは含まれていませんDECLAREキーワード**。このキーワードは、匿名ブロックおよびトリガーでのみ使用されます。 – krokodilko

答えて

1

これを試してみて、修正のためのインラインコメントを参照してください。それが役に立てば幸い。

CREATE OR REPLACE 
PROCEDURE procExplicitCursorAccountSlct 
AS 
    CURSOR C1 
    IS 
    SELECT 
     * 
    FROM 
     ACCOUNT; 
--Variabke declaration was missing 
    ID   NUMBER; 
    ACCOUNTTYPE VARCHAR2(100); 
    BALANCE  NUMBER; 
    --Variabke declaration was missing 
BEGIN 
    OPEN C1; 
    LOOP 
    FETCH 
     C1 
    INTO 
     ID, 
     ACCOUNTTYPE, 
     BALANCE; 
    EXIT 
    WHEN C1%NOTFOUND; 
    DBMS_OUTPUT.PUT_LINE(ID||'-'||ACCOUNTTYPE||'-'||BALANCE); 
    DBMS_OUTPUT.PUT_LINE(C1%ROWCOUNT); 
    END LOOP; 
    CLOSE C1; 
END; 
0

あなたは暗黙のループ(およびDECLAREあまりにも取り除く)と、それは方法よりシンプルにすることができます:

CREATE OR REPLACE PROCEDURE procExplicitCursorAccountSlct 
AS 
    CURSOR C1 IS SELECT * FROM ACCOUNT; 
BEGIN 
    FOR i in C1 LOOP 
    DBMS_OUTPUT.PUT_LINE(i.ID||'-'||i.ACCOUNTTYPE||'-'||i.BALANCE); 
    DBMS_OUTPUT.PUT_LINE(C1%ROWCOUNT); 
    END LOOP; 
END;