2017-10-15 13 views
0

SQLデベロッパーを使用しています。私はPLSQlの初心者です。私は、提案されているソリューションの多くを試して、提案されていない束を試しました。私は "終わり"か "始める" PLS-00103エラーを得るかのように思えます。以下はコードです。どのようなヘルプのために事前に感謝 - それは非常に感謝します。エラー(42,1)を取得しています:PLS-00103:PlSQLコードのシンボル "END"が検出されました。

CREATE OR REPLACE PROCEDURE PROCEDURE1 
(
     category_id in Messages.category_id%type, 
     messagetext in Messages.messagetext%type, 
     lastupdatedBy in Messages.lastupdatedBy%type, 
     message_id out Messages.message_id%type, 
     txtcomment out varchar2) 
as 
BEGIN 
    Declare uniquecategoryid number := 0; 
    uniquemsgid number := 0; 
    BEGIN 
     -- verify that category id is a valid category 
    SELECT Categories.category_id 
      INTO uniquecategoryid 
      FROM Categories 
      WHERE Categories.category_id = PROCEDURE1.category_id; 
    EXCEPTION  
    WHEN NO_DATA_FOUND THEN 
    uniquecategoryid := 0; 
    END; 

    BEGIN 
     SELECT message_id into uniquemsgid 
      FROM Messages 
      where Messages.messagetext = PROCEDURE1.messagetext 
      AND uniquecategoryid > 0; 
    EXCEPTION  
     WHEN NO_DATA_FOUND THEN 
     uniquecategoryid := 0; 
    END;  

    Begin 
     INSERT INTO Messages (CATEGORY_ID, messagetext, lastupdatedby, lastupdated, status) 
      VALUES (PROCEDURE1.category_id, PROCEDURE1.messagetext, 
        PROCEDURE1.lastupdatedBy, SYSDATE,'A') 
      returning Messages.message_id INTO PROCEDURE1.message_id; 
     COMMIT; 
     PROCEDURE1.txtcomment := 'SUCCESS'; 
    end; 
END;  
END PROCEDURE1; 
+1

**最後の2行を削除する:** 'END;' – L30n1d45

+0

テキストエディタを使用すると、 'BEGIN'文を数え、' END'文を数えればそれを見つけることができます( ' IF'または 'CASE'などのステートメント)。 – g00dy

+0

Btwの場合、 'Declare'文にもエラーが発生します。というのも、pl/sqlという名前のプロシージャはそれを使用しません。彼らの「宣言」セクションは、対応するユニットの最初の「BEGIN〜」のすぐ上にあります。 – g00dy

答えて

1

ENDを削除します。上述した終了手順1;コードはEND PROCEDURE1;によってプロシージャブロックの終了を認識します。終わり;この場合は役に立たない。

関連する問題