Ich habe ein großes Problem mit Triggern unter Oracle. Meine Anwendung hat zwei einfache Straßentabellen [ID (integer, primary key),Name (varchar50), Kürzel (varchar12)], nach jeder Eingabe bzw. Änderung sollen die beiden Tabellen über Trigger abgeglichen werden. Leider bekomme ich immer die Fehler ORA-06512 und ORA-04088.
Der Quellcode der beiden Trigger lautet:
<PRE>
CREATE OR REPLACE TRIGGER "TEST".IACABGLEICH_RHQSR_RHSTR after INSERT on RHQSTR
for each row
DECLARE anz INTEGER;id INTEGER;
BEGIN
SELECT MAX(STR_ID) INTO id from RHSTR;
id:=id+1;
SELECT COUNT(*) INTO anz FROM RHSTR where STR_KUERZEL = :new.QSR_KUERZEL;
if anz=0 then
INSERT INTO RHSTR (STR_ID,STR_NAME,STR_KUERZEL) VALUES (id,:new.QSR_NAME,:new.QSR_KUERZEL);
elsif anz>0 then
if :new.QSR_NAME <> ld.QSR_NAME then
UPDATE RHSTR SET STR_NAME = :new.QSR_NAME WHERE STR_KUERZEL = :new.QSR_KUERZEL;
end if;
end if;
END;
/
CREATE OR REPLACE TRIGGER "TEST".IACABGLEICH_RHSTR_RHQSR after INSERT on RHSTR
for each row
DECLARE anz INTEGER;id INTEGER;
BEGIN
SELECT MAX(QSR_ID) INTO id from RHQSTR;
id:=id+1;
SELECT COUNT(*) INTO anz FROM RHQSTR where QSR_KUERZEL = :new.STR_KUERZEL;
if anz=0 then
INSERT INTO RHQSTR (QSR_ID,QSR_NAME,QSR_KUERZEL) VALUES (id,:new.STR_NAME,:new.STR_KUERZEL);
elsif anz>0 then
if ld.STR_NAME <> :new.STR_NAME then
UPDATE RHQSTR SET QSR_NAME = :new.STR_NAME WHERE QSR_KUERZEL = :new.STR_KUERZEL;
end if;
end if;
END;
/
</PRE>
Vielen Dank für Eure Tipps.
Roland
Der Quellcode der beiden Trigger lautet:
<PRE>
CREATE OR REPLACE TRIGGER "TEST".IACABGLEICH_RHQSR_RHSTR after INSERT on RHQSTR
for each row
DECLARE anz INTEGER;id INTEGER;
BEGIN
SELECT MAX(STR_ID) INTO id from RHSTR;
id:=id+1;
SELECT COUNT(*) INTO anz FROM RHSTR where STR_KUERZEL = :new.QSR_KUERZEL;
if anz=0 then
INSERT INTO RHSTR (STR_ID,STR_NAME,STR_KUERZEL) VALUES (id,:new.QSR_NAME,:new.QSR_KUERZEL);
elsif anz>0 then
if :new.QSR_NAME <> ld.QSR_NAME then
UPDATE RHSTR SET STR_NAME = :new.QSR_NAME WHERE STR_KUERZEL = :new.QSR_KUERZEL;
end if;
end if;
END;
/
CREATE OR REPLACE TRIGGER "TEST".IACABGLEICH_RHSTR_RHQSR after INSERT on RHSTR
for each row
DECLARE anz INTEGER;id INTEGER;
BEGIN
SELECT MAX(QSR_ID) INTO id from RHQSTR;
id:=id+1;
SELECT COUNT(*) INTO anz FROM RHQSTR where QSR_KUERZEL = :new.STR_KUERZEL;
if anz=0 then
INSERT INTO RHQSTR (QSR_ID,QSR_NAME,QSR_KUERZEL) VALUES (id,:new.STR_NAME,:new.STR_KUERZEL);
elsif anz>0 then
if ld.STR_NAME <> :new.STR_NAME then
UPDATE RHQSTR SET QSR_NAME = :new.STR_NAME WHERE QSR_KUERZEL = :new.STR_KUERZEL;
end if;
end if;
END;
/
</PRE>
Vielen Dank für Eure Tipps.
Roland
Comment