SQL-Trigger WHEN-Klausel Kompilierungsfehler
Ich bin versucht, einen trigger erstellen, der prüft, ob das eingegebene Datum ist in Reichweite, wenn die Prog_Type
eingetragen ist 'FILM'
jedoch erhalte ich einen Kompilierungsfehler, jedes mal, wenn die Anweisung ausgeführt wird.
Den Fehler code ist 00103, "Begegnete ; wenn man von Ihnen erwartet ....."
dann eine Liste von vielen Satzzeichen. Von der Erforschung des Problems, die ich gesehen habe Verweise auf eine DECLARE
Aussage, jedoch bin ich nicht sicher, ich würde erklären müssen, wenn die Prog_Type
erstellt, in der Program_Table
, und ich habe Referenz, die Tabelle im trigger.
CREATE OR REPLACE TRIGGER Prog_Made_Limits
BEFORE INSERT OR UPDATE OF Prog_Made ON Program_Table
FOR EACH ROW
WHEN (NEW.Prog_Type <> 'FILM')
BEGIN
IF (:new.Prog_Made < date '1864-12-31' or
:new.Prog_Made > sysdate );
THEN
RAISE_APPLICATION_ERROR( -20001, 'Program Made date must be later than Dec 31st 1864, and earlier than today, if FILM is inserted');
END IF;
END Prog_Made_Limits;
/
- Was passiert, wenn Sie entfernen die
;
zwischen)
undTHEN
? - Erstaunlich, die Fehlermeldung sagt Ihnen genau, was das problem ist...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre syntax fast in Ordnung, aber Sie haben eine
;
nach IhremIF
Bedingung, die den Fehler verursacht.;
wird verwendet, um die einzelnen Aussagen und konsequent Ihre Wenn ist Teil der die gleiche Aussage wie der Zustand ist.Sollte dies funktionieren:
Ich sagen sollte, weil ich nicht von Oracle auf meinem laptop, so kann nur der test auf SQL Fiddle, aber indem Sie alle Semikolons ich war in der Lage, dieses zu kompilieren, aber ich denke, SQL-Fiddle behandelt Semikolons als batch bricht eher als Anweisung bricht, so bin ich nicht sicher, es ist notwendig, Sie zu entfernen alle.
Beispiel auf SQL Fiddle
Hey, Sie verwendet das Semikolon nach der IF-Klausel. Das wird Ende der Anweisung. Also bitte entfernen Sie die Spalte aus, die Ort und verwenden Sie den code unten einmal: