2016-03-20 6 views
1

Ich versuche einen Trigger zu erstellen, um den Monat vor dem Einfügen in die Datenbank zu überprüfen. der followingg Code wurde als Warning: Trigger created with compilation errors.Oracle-Trigger Kompilierungsfehler

triedbut ein complationng Fehler zeigt, wird dieser den Code

CREATE OR REPLACE TRIGGER tr_july 
BEFORE INSERT 
ON TBL_EVENT 
BEGIN 
SELECT EXTRACT(month FROM EVN_DATE) FROM TBL_EVENT; 
    IF EXTRACT (month from EVN_DATE) == 7 THEN 
     RAISE_APPLICATION_ERROR(-20110, 'NOT ALLOWED TO INSERT RECORDS DURING JULY'); 
    END IF; 
    END; 
/

Antwort

0

Verwenden Sie es als:

CREATE OR REPLACE TRIGGER tr_july 
BEFORE INSERT 
ON TBL_EVENT 
Declare 
E_date date; 
BEGIN 
SELECT EVN_DATE into E_date FROM TBL_EVENT; 
    IF EXTRACT (month from E_date) = 7 THEN 
     RAISE_APPLICATION_ERROR(-20110, 'NOT ALLOWED TO INSERT RECORDS DURING JULY'); 
    END IF; 
    END; 

Hinweis: Oracle wenn Klausel = benötigen nur einmal

+0

Immer noch der gleiche Fehler auftritt – Likitha

1

Ich denke, Sie suchen etwas in der Art:

CREATE OR REPLACE TRIGGER tr_july 
BEFORE INSERT ON TBL_EVENT 
BEGIN 
    IF EXTRACT (month from :new.EVN_DATE) = 7 THEN 
     RAISE_APPLICATION_ERROR(-20110, 'NOT ALLOWED TO INSERT RECORDS DURING JULY'); 
    END IF; 
END;/

Studie der Dokumentation, ein Abschnitt „Zugriff auf Spaltenwerte in Row Trigger“
https://docs.oracle.com/cd/B19306_01/appdev.102/b14251/adfns_triggers.htm
zu lernen, wie man innerhalb des Triggers Körper Spalten der aktuellen Zeile zuzugreifen.
Kurz gesagt: Sie müssen „Korrelationsnamen“ genannt NEW und OLD


Tips verwenden: SET DEFINE OFF; Lauf vor dem Trigger Kompilieren bind Variablensubstitution (Variablen durch einen Doppelpunkt : vorangestellt) zu vermeiden.

0

Es gibt mehrere Isues mit diesem Code.

Zuerst ist es ein Trigger vor dem Einfügen, also ist der Wert, den Sie überprüfen möchten, noch nicht in der Tabelle. Sie können es nicht mit einer Auswahl finden.

Trigger sind PL/SQL-Code. Für jeden Wert, den Sie innerhalb einer pl/sql Prozedur auswählen, müssen Sie 'aaa INTO bbb from xxx; und bbb muss vor deinem BEGIN deklariert werden.

In Oracle ist der Gleichheitsvergleichsoperator eine einzige = (nicht ==).

Innerhalb eines Triggers haben Sie die speziellen Qualifizierer: new und: old, um auf die Spaltenwerte zu verweisen, an denen Sie gerade arbeiten.

In Aktualisierungstriggern ist nur das neue Qualifikationsmerkmal verwendbar.

CREATE OR REPLACE TRIGGER tr_july 
BEFORE INSERT 
ON TBL_EVENT 
BEGIN 
    IF EXTRACT (month from :new.EVN_DATE) = 7 THEN 
     RAISE_APPLICATION_ERROR(-20110, 'NOT ALLOWED TO INSERT RECORDS DURING JULY'); 
    END IF; 
END;