2017-04-01 16 views
0

このストアド・プロシージャを作成しようとしています。このストアド・プロシージャには、顧客名と電子メール・アドレスを入力する必要があります。その顧客の電子メールアドレスを更新します。新しい電子メールアドレスが古いものと同じ場合、例外を発生させる必要があります。ユーザー定義例外付きのoracle更新ストアド・プロシージャ

CREATE OR REPLACE PROCEDURE UpdateEmail 
(CUSTOMERID IN CUSTOMER.CUSTOMERNO%TYPE, 
N_EMAIL IN CUSTOMER.EMAIL%TYPE) 

IS 
DECLARE 
    e_same EXCEPTION; 
    V_ROWCOUNT NUMBER; 

BEGIN 
SELECT COUNT(EMAIL) 
INTO V_ROWCOUNT 
FROM [email protected] 
WHERE CUSTOMER.EMAIL = N_EMAIL 
AND CUSTOMER.CUSTOMERNO = CUSTOMERID; 

IF V_ROWCOUNT > 0 

THEN RAISE e_same; 
ELSE 
UPDATE CUSTOMER 
SET EMAIL = N_EMAIL 
WHERE CUSTOMER.CUSTOMERNO = CUSTOMERID; 
END IF; 

EXCEPTION 
WHEN e_same THEN dbms_output.put_line ('email address exist'); 
END; 
/

しかし、それは投げている間違いです。私が正しいことをしているかどうかはわかりません。私は最新のOracle SQL Developerを使用しています。

エラー(6,1):PLS-00103:次の いずれかを期待するとき、記号「DECLARE」を発生しました:関数プラグマ手順サブタイプの種類を開始 電流 カーソル削除記号「始まる前に、外部の言語が存在します"は" DECLARE "の代わりに でした。
エラー(28,4):PLS-00103: のいずれかを予期しているときにシンボル "end-of-file"が検出されました:(ループモードのヌルプラグを返す場合は、 < <が近い現在の削除はロック挿入オープン ロールバックセーブポイントセットはFORALLパイプパージ

+0

「Declare」を削除してください – Utsav

答えて

0

DECLAREを削除マージコミット実行SQLフェッチ続けると。

あなたが手順にDeclareを使用しないでください。あなたが書いている場合はしばらく更新a PLSQLブロックの場合は、Declareを使用する必要があります。実際のプロシージャー本体ではありません。

+0

ありがとうございます@Utsavの説明です。 – MohammedS

関連する問題