Oracle: Spalte aktualisieren per Trigger

Hallo,

ich habe folgendes Problem:

Beim INSERT oder UPDATE von TABELLE_T soll SPALTE_S2 per Trigger auf den Wert ‚true‘ gesetzt werden, wenn SPALTE_S1 die Bedingung LIKE ‚_A%‘ erfüllt. BEFORE oder AFTER ist eigentlich egal.

Ich habe schon alle möglichen Kombinationen des folgenden Codes ausprobiert:

CREATE OR REPLACE TRIGGER tr
–AFTER
BEFORE
INSERT OR UPDATE OF spalte1 ON tabelle_t
FOR EACH ROW
WHEN ( NEW.spalte1 LIKE ‚_A%‘ )
BEGIN

NEW.spalte2 = ‚true‘

–UPDATE table_t SET spalte2 = ‚true‘ WHERE spalte1 LIKE ‚_A%‘
END

Der Trigger lässt sich kompilieren - allerdings mit „warning“. Beim INSERT oder UPDATE kommt aber leider die Fehlermeldung „ORA-04098: trigger ‚INVTIV.SWDREADY_TR‘ is invalid and failed re-validation“.

Für die Lösung wäre ich Euch sehr dankbar!

Gruß,

Martin

Hi Martin,
ist gar nicht so schwer:

create table table\_t 
(
 spalte\_s1 varchar2(20)
 ,spalte\_s2 varchar2(20)
);


CREATE OR REPLACE TRIGGER tr
BEFORE
INSERT OR UPDATE OF spalte\_s1 ON table\_t
FOR EACH ROW
WHEN ( new.spalte\_s1 LIKE '\_A%' )
BEGIN
 :NEW.spalte\_s2 := 'true';
END;
/

insert into table\_t (spalte\_s1) values('HALLO');
insert into table\_t (spalte\_s1) values('WELT');
commit;

select \* from table\_t;

gruss
bernhard

Hallo Bernhand,

1000 Dank. Der Trigger funktioniert super. Ich habe wohl lediglich die Doppelpunkte, Semikolons und das /-Zeichen vergessen.

Ich habe den Trigger sogar noch ein wenig verbessert:

CREATE OR REPLACE TRIGGER test_tr
BEFORE
INSERT OR UPDATE OF spalte1 ON tabelle1
FOR EACH ROW
BEGIN
IF :new.spalte1 like ‚_A%‘
THEN :NEW.spalte2 := ‚true‘;
ELSE :NEW.spalte2 := ‚false‘;
END IF;
END;
/

Viele Grüße,

Martin