Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi TRIGGER -> New - Werte können nciht geändert werden (https://www.delphipraxis.net/97373-trigger-new-werte-koennen-nciht-geaendert-werden.html)

HolgerCW 9. Aug 2007 13:26

Datenbank: ORACLE • Version: 9 • Zugriff über: DATABASE

TRIGGER -> New - Werte können nciht geändert werden
 
Hallo zusammen,

folgender Trigger ergibt die Fehlermeldung: NEW-Werte für diesen Trigger-Typ können nicht geändert werden.

Delphi-Quellcode:
CREATE OR REPLACE TRIGGER DBP_NAECHSTE_PRUEFUNG_AIU AFTER INSERT OR UPDATE ON SYSDBP.DBP_LEISTUNGSWERTE FOR EACH ROW
BEGIN
 
 IF (:new.letzte_ap < :new.letzte_ip) and (:new.letzte_ap < :new.letzte_fp) and (:new.letzte_ap <> NULL)
 THEN
  :new.NAECHSTE_P := :new.LETZTE_AP;
  :new.NAECHSTE_P_ART := 'Äussere Prüfung';
 END IF;

END;
/
Weiss jemand Rat ?

Gruss

Holger

Leonard 9. Aug 2007 19:00

Re: TRIGGER -> New - Werte können nciht geändert werden
 
Hi,
ich kenn mich jetzt mit Oracle nicht aus, aber kann es sein, dass du die :new Werte nur beschreiben kannst, wenn du in einem BEFORE INSERT OR UPDATE Trigger bist?

mfg Leonard

Elvis 9. Aug 2007 19:06

Re: TRIGGER -> New - Werte können nciht geändert werden
 
Zitat:

Zitat von Leonard
Hi,
ich kenn mich jetzt mit Oracle nicht aus, aber kann es sein, dass du die :new Werte nur beschreiben kannst, wenn du in einem BEFORE INSERT OR UPDATE Trigger bist?

Ganz genau.
Und "<> null" kann nicht funktionieren. Die einzigen Operatoren auf null, die nicht selbst null zurückliefern sind "is null" und "is not null".
Kurzfassung: deine if-clause ergibt immer null und niemals true oder false.

HolgerCW 10. Aug 2007 08:13

Re: TRIGGER -> New - Werte können nciht geändert werden
 
Vielen dank für die Hilfen,

aber wenn ich ein before Insert or update nehme, kann ich dann schon die neuen Werte vergleichen, die eingefügt oder upgedatet werden ? oder wo liegt der Unterschied bei bevor oder after ?

Gruss

Holger

dmagin 10. Aug 2007 08:25

Re: TRIGGER -> New - Werte können nciht geändert werden
 
ganz einfach:

before : die daten wurden noch nicht geschrieben (also du kannst noch mit new.feldname das ganze manipulieren) und danach wird geschrieben

after: die daten sind geschrieben die new.feldname daten kannst du nicht manipulieren, nur lesen.

bsp für beide:

before: prüfen von werten und ersetzten
interbase dialect

SQL-Code:
if new.id is null then new.id = 1
after: z.b. bei after update (protokollieren)
du hast ein after update trigger in der tabelle ABC und in der tabelle LOG willst du das protokollieren

SQL-Code:
insert into TBL_LOG (TABNAME,USER,ZEIT) values ('ABC',user,'now')
viel spass daniel

Leonard 10. Aug 2007 08:28

Re: TRIGGER -> New - Werte können nciht geändert werden
 
Zitat:

Zitat von HolgerCW
aber wenn ich ein before Insert or update nehme, kann ich dann schon die neuen Werte vergleichen, die eingefügt oder upgedatet werden ?
Holger

Bei dem Vergleich solltest du aber das beachten, was Elvis mit den null Werten geschrieben hat. Du müsstest deinen Vergleich sicher umgestalten und die Fuktionen is null bzw. is not null verwenden.

Zitat:

Zitat von HolgerCW
oder wo liegt der Unterschied bei bevor oder after ?
Holger

Der before Trigger wird ausgeführt, bevor die Daten in der Datenbank eingefügt (bei Insert) bzw. aktualisiert (bei Update) werden. Bei einem after Trigger eben erst nach der Speicherung in der Datenbank. Wobei du im after Trigger z.B. die Möglichkeit hast, die :new Werte in einer SQL-Anweisung zu verwenden um irgendetwas damit zu machen. Als Beispiel könnte man Prüfen, ob ein bestimmtes Feld geändert wurde und den neuen oder alten Wert in eine andere Tablle schreiben.

mfg Leonard

Edit: Das finde ich an der DP echt :thumb: da kann man unbesorgt vor dem Absenden nochmal schauen und wird festellen, dass man nicht der erste war mit einer Antwort. :dp:

HolgerCW 10. Aug 2007 08:57

Re: TRIGGER -> New - Werte können nciht geändert werden
 
Alles klar,

funktioniert jetzt.

Danke

Holger


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:14 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz