Hallo,
ich möchte einen Trigger in der Art einer Indexierung aufbauen:
Beispiel:
In „TABELLE“ stehen Name und Telefonnummer.
In „TABCHANGE“ stehen Name und Datum der letzten Rufnummeränderung.
Die Namen sind in „TABELLE“ nicht primary key, d.h. ein Name kann zig Rufnummern haben. In „TABCHANGE“ sind sie es (d.h. es gibt eine eindeutige letzte Änderung).
Jetzt mein Problem:
Wenn in „TABELLE“ ein neuer Eintrag eingefügt wird, aber jener Name noch nicht existiert, soll per Trigger in „TABCHANGE“ ein neuer Eintrag mit Name und jetzigem Datum angelegt werden.
Wenn jener Name schon existiert, soll in „TABCHANGE“ kein neuer Eintrag entstehen, sondern der bestehende Eintrag für das letzte Änderungsdatum aktualisiert werden.
Im Prinzip habe ich das hier, aber ich kriege einen Fehler beim Ausführen, weil er das Select nicht mag. Was mache ich falsch - und gibt es evtl. eine ganz andere Möglichkeit, um das „If count(*) … = 0“ nicht zu brauchen?
CREATE OR REPLACE TRIGGER MYTRIGGER
BEFORE INSERT OR UPDATE
ON TABELLE
REFERENCING NEW AS New OLD AS Old
FOR EACH ROW
BEGIN
if INSERTING or UPDATING then
if ( select count(\*) from TABCHANGE where NAME= :new.NAME = 0 ) then
INSERT INTO TABCHANGE ( NAME, LAST\_MODIFY )
VALUES ( :new.NAME, SYSDATE);
else
UPDATE TABCHANGE
where where NAME= :new.NAME
set LAST\_MODIFY = SYSDATE;
end if;
end if;
END
Danke und Gruss,
Michael