ERLEDIGT
JA
JA
ANTWORTEN
2
2
ZUGRIFFE
623
623
EMPFEHLEN
-
Servus,
versuche mich gerade an nem Trigger, leider tritt immer die folgende Fehlermeldung auf:
Error(31,15): PLS-00103: Fand das Symbol "END" als eines der folgenden erwartet wurde: ( - + case mod new not null <an identifier> <a double-quoted delimited-identifier> <a bind variable> avg count current exists max min prior sql stddev sum variance execute forall merge time timestamp interval date <a string literal with character set specification> <a number> <a single-quoted SQL string> pipe <ein alternativ in Anführungszeichen gesetztes Zeichenfolgenliteral mit Zeichensatzangabe> <eine alter
Benutze Oracle 10g
TRIGGER:
-----------------------------------------------------------------------------
CREATE OR REPLACE
TRIGGER IU_LEHRVER_AFTER_STMT AFTER INSERT OR UPDATE ON LEHRVERANSTALTUNGEN
DECLARE
old_fachid FACH.fach%TYPE;
--in dieser Var. wird beim update die alte Fachid gespeichert
cursor lehrv is
select lehrid, bezeichung from LEHRVERANSTALTUNGEN
where stand_alone = 1 for update;
BEGIN
IF INSERTING then
for item in lehrv loop
execute:= package_fach.insert_FACH(fachseq.nextval, item.bezeichnung, item.lehrid);
end loop;
END IF;
IF UPDATING then
for item in lehrv
loop
select fachid into old_fachid from fach where SA_Lehrvera=item.lehrid;
--Die alte Fachid wird gespeicht, das sich diese beim Update
--nicht ändern darf!!
if old_fachid is null then
execute:= package_fach.insert_fach(fachseq.nextval, item.bezeichnung, item.lehrid);
ELSIF
-- execute:= package_fach.DELETE_Fach(item.lehrid);
--Beim Update muss der alte Zustand gelöscht werden, anderfalls
--würde man ein und die selbe Lehrva mehrfach als Fach eintragen
--execute package_fach.insert(old_fachid, item.bezeichnung, item.lehrid);
end if;
--Beim update auf Fach muss die alte Fachid erhalten bleiben,
end loop;
END IF;--END if updating
END IU_LEHRVER_AFTER_STMT;
Kann ja eigentlich nur ein Syntax error sein, vielleicht kann mir einer von euch auf die Sprünge helfen
Danke
-
20.12.06 12:32 #2
Zunächst solltest du deinen Code bitte in die CODE oder SQL Tags setzen, dass man ihn einigermassen lesen kann. Ausserdem wäre es gut im Titel des Threads auch das Datenbanksystem anzugeben.
Code sql:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
CREATE OR REPLACE TRIGGER IU_LEHRVER_AFTER_STMT AFTER INSERT OR UPDATE ON LEHRVERANSTALTUNGEN DECLARE old_fachid FACH.fach%TYPE; --in dieser Var. wird beim update die alte Fachid gespeichert cursor lehrv IS SELECT lehrid, bezeichung FROM LEHRVERANSTALTUNGEN WHERE stand_alone = 1 FOR UPDATE; BEGIN IF INSERTING THEN FOR item IN lehrv loop EXECUTE:= package_fach.insert_FACH(fachseq.NEXTVAL, item.bezeichnung, item.lehrid); END loop; END IF; IF UPDATING THEN FOR item IN lehrv loop SELECT fachid INTO old_fachid FROM fach WHERE SA_Lehrvera=item.lehrid; --Die alte Fachid wird gespeicht, das sich diese beim Update --nicht ändern darf!! IF old_fachid IS NULL THEN EXECUTE:= package_fach.insert_fach(fachseq.NEXTVAL, item.bezeichnung, item.lehrid); ELSIF -- execute:= package_fach.DELETE_Fach(item.lehrid); --Beim Update muss der alte Zustand gelöscht werden, anderfalls --würde man ein und die selbe Lehrva mehrfach als Fach eintragen --execute package_fach.insert(old_fachid, item.bezeichnung, item.lehrid); END IF; --Beim update auf Fach muss die alte Fachid erhalten bleiben, END loop; END IF;--END if updating END IU_LEHRVER_AFTER_STMT;
Der Fehler liegt vermutlich hier:
Deine ELSE Anweisung ist leer, bzw. es stehen nur Kommentare drin. Entweder nimmst du das ELSIF ganz raus, oder fügst einfach die Anweisung "NULL;" zwischen ELSIF und END IF;Code sql:1 2 3 4 5 6
ELSIF -- execute:= package_fach.DELETE_Fach(item.lehrid); --Beim Update muss der alte Zustand gelöscht werden, anderfalls --würde man ein und die selbe Lehrva mehrfach als Fach eintragen --execute package_fach.insert(old_fachid, item.bezeichnung, item.lehrid); END IF;
liebe Grüße
Exceptionfault (http://exceptionfault.de)
Never say: "Always"! Always say: "Never say never"! - Tom Kyte @ Ask Tom Live in Berlin 2008
-
Servus, habs selbst rausgefunden, problem was das exceute... SP werden im block ja ohen exceute ausgeführt....
Trotzdem danke
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
CREATE OR REPLACE TRIGGER IU_LEHRVER_AFTER_STMT AFTER INSERT OR UPDATE ON LEHRVERANSTALTUNGEN DECLARE old_fachid FACH.fachid%TYPE; --in dieser Var. wird beim update die alte Fachid gespeichert cursor lehrv is select lehrid, bezeichnung from LEHRVERANSTALTUNGEN where stand_alone = 1 for update; BEGIN IF INSERTING then for item in lehrv loop package_fach.insert_FACH(item.bezeichnung, item.lehrid); end loop; END IF; IF UPDATING then for item in lehrv loop select fachid into old_fachid from fach where SA_Lehrvera=item.lehrid; --Die alte Fachid wird gespeicht, das sich diese beim Update --nicht ändern darf!! if old_fachid is null then package_fach.insert_fach(item.bezeichnung, item.lehrid); ELSE package_fach.DELETE_Fach(item.lehrid); --Beim Update muss der alte Zustand gelöscht werden, anderfalls --würde man ein und die selbe Lehrva mehrfach als Fach eintragen package_fach.insert_fach(old_fachid, item.bezeichnung, item.lehrid); --Hier aufruf der Überladenen Methode package_fach.insert_fachs END IF; --Beim update auf Fach muss die alte Fachid erhalten bleiben end loop; END IF;--END if updating END IU_LEHRVER_AFTER_STMT;
Ähnliche Themen
-
Trigger
Von Chrissy_Love im Forum Relationale DatenbanksystemeAntworten: 15Letzter Beitrag: 24.06.10, 15:58 -
MS SQL 2k3 - Mergereplikation - Trigger
Von DaRealMC im Forum Relationale DatenbanksystemeAntworten: 0Letzter Beitrag: 08.03.10, 15:52 -
einfacher Trigger
Von WenzelPaul im Forum Relationale DatenbanksystemeAntworten: 13Letzter Beitrag: 15.07.09, 03:18 -
Trigger in MySQL
Von NBOne im Forum Relationale DatenbanksystemeAntworten: 6Letzter Beitrag: 14.08.08, 11:46 -
Trigger in MS Access
Von Ste-Re im Forum Relationale DatenbanksystemeAntworten: 1Letzter Beitrag: 29.08.06, 05:29





Zitieren
Login





