2017-04-01 8 views
0

Ich versuche diese gespeicherte Prozedur zu erstellen, die Kunden keine und E-Mail-Adresse als Eingabe nehmen sollte. Aktualisieren Sie dann die E-Mail-Adresse für diesen Kunden. Wenn die neue E-Mail-Adresse gleich alt ist, sollte die Ausnahme ausgelöst werden.Oracle Update gespeicherte Prozedur mit benutzerdefinierten Ausnahme

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; 
/

Aber es ist Fehler werfen. Nicht sicher, ob ich es richtig mache. Ich verwende den neuesten Oracle SQL Developer.

Error (6,1): PLS-00103: Fand das Symbol "DECLARE" wenn eine der folgenden erwarten: begin Funktion pragma Verfahren Subtyp Typ aktuellen Cursor löschen existiert das Symbol vor externen Sprache „begin "wurde für" DECLARE "ersetzt, um fortzufahren.
Fehler (28,4): PLS-00103: Das Symbol "Dateiende" beim Erwarten eines der folgenden: (Begin Fall deklarieren Ende Ausnahme Exit für Goto, wenn Schleife Mod Null Pragma Raise Return wählen Update während mit < < schließen Lock-Einsatz offen Satz Rollback-Speicherpunkt holen aktuellen löschen weiter sql forall Rohrspülung

+0

Entfernen 'Declare' – Utsav

Antwort

0

DECLARE entfernen fusionieren ausführen commit.

Sie nicht Declare in einem Verfahren verwendet werden soll. Wenn Sie schreiben, ein PLSQL blockieren dann nur du solltest Declare verwenden. Nicht in einem tatsächlichen Prozedurkörper.

+0

Dank @Utsav für die Erklärung. – MohammedS

Verwandte Themen