AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi TRIGGER -> New - Werte können nciht geändert werden
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von HolgerCW · begonnen am 9. Aug 2007 · letzter Beitrag vom 10. Aug 2007
Antwort Antwort
HolgerCW

Registriert seit: 28. Nov 2006
Ort: Marl
1.207 Beiträge
 
Delphi XE7 Enterprise
 
#1

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

  Alt 9. Aug 2007, 14:26
Datenbank: ORACLE • Version: 9 • Zugriff über: DATABASE
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
  Mit Zitat antworten Zitat
Leonard

Registriert seit: 12. Okt 2005
Ort: Lutherstadt Eisleben
64 Beiträge
 
Delphi 11 Alexandria
 
#2

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

  Alt 9. Aug 2007, 20:00
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
Tobias
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#3

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

  Alt 9. Aug 2007, 20:06
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.
Robert Giesecke
  Mit Zitat antworten Zitat
HolgerCW

Registriert seit: 28. Nov 2006
Ort: Marl
1.207 Beiträge
 
Delphi XE7 Enterprise
 
#4

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

  Alt 10. Aug 2007, 09:13
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
  Mit Zitat antworten Zitat
dmagin

Registriert seit: 17. Jan 2003
Ort: Frankfurt
33 Beiträge
 
#5

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

  Alt 10. Aug 2007, 09:25
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

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

insert into TBL_LOG (TABNAME,USER,ZEIT) values ('ABC',user,'now') viel spass daniel
Daniel Magin
  Mit Zitat antworten Zitat
Leonard

Registriert seit: 12. Okt 2005
Ort: Lutherstadt Eisleben
64 Beiträge
 
Delphi 11 Alexandria
 
#6

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

  Alt 10. Aug 2007, 09:28
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 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 da kann man unbesorgt vor dem Absenden nochmal schauen und wird festellen, dass man nicht der erste war mit einer Antwort.
Tobias
  Mit Zitat antworten Zitat
HolgerCW

Registriert seit: 28. Nov 2006
Ort: Marl
1.207 Beiträge
 
Delphi XE7 Enterprise
 
#7

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

  Alt 10. Aug 2007, 09:57
Alles klar,

funktioniert jetzt.

Danke

Holger
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:03 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