Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Trigger -> Problem (https://www.delphipraxis.net/97043-trigger-problem.html)

HolgerCW 3. Aug 2007 12:11

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

Trigger -> Problem
 
Hallo zusammen,

bin noch nicht so fit mit Triggern, dieser hier klappt nur halb:

Delphi-Quellcode:
CREATE OR REPLACE TRIGGER DBP_LETZTE_PRUEFUNG_AIU AFTER INSERT OR UPDATE ON SYSDBP.DBP_AUFTRAEGE
FOR EACH ROW
BEGIN

  UPDATE SYSDBP.DBP_LEISTUNGSWERTE
  SET LETZTE_AEUSSEREPRUEFUNG = :old.AUFTRAGERLEDIGT
 
  WHERE SYSDBP.DBP_LEISTUNGSWERTE.ANLAGENNUMMER = :old.ANLAGENNUMMER
  AND :old.SIGMA_TAETIGKEIT_ID = '131'
  AND (:old.AUFTRAGERLEDIGT = (SELECT MAX(:old.AUFTRAGERLEDIGT)
      FROM SYSDBP.DBP_AUFTRAEGE WHERE SYSDBP.DBP_LEISTUNGSWERTE.ANLAGENNUMMER = :old.ANLAGENNUMMER
      AND SYSDBP.DBP_LEISTUNGSWERTE.ANZAHL = :old.DB_REGISTER AND :old.SIGMA_AUFTYP_ID = '50'
      AND :old.STATUS = 'abgeschlossen');

END;
/
Der Fehler muss in dem SubSelect liegen. Was mache ich da falsch ?

Gruss

Holger

mkinzler 3. Aug 2007 12:14

Re: Trigger -> Problem
 
Was soll der trigger machen, was macht er, was funktioniert nicht?

HolgerCW 3. Aug 2007 12:20

Re: Trigger -> Problem
 
Das kompiliert er:

Delphi-Quellcode:
CREATE OR REPLACE TRIGGER DBP_LETZTE_PRUEFUNG_AIU AFTER INSERT OR UPDATE ON SYSDBP.DBP_AUFTRAEGE
FOR EACH ROW
BEGIN

  UPDATE SYSDBP.DBP_LEISTUNGSWERTE
  SET LETZTE_AEUSSEREPRUEFUNG = :old.AUFTRAGERLEDIGT
 
  WHERE SYSDBP.DBP_LEISTUNGSWERTE.ANLAGENNUMMER = :old.ANLAGENNUMMER
  AND :old.SIGMA_TAETIGKEIT_ID = '131';

END;
/
der Teil klappt nicht: (kommt an den oberen Teil noch angehängt)

Delphi-Quellcode:
 

AND (:old.AUFTRAGERLEDIGT = (SELECT MAX(:old.AUFTRAGERLEDIGT)
      FROM SYSDBP.DBP_AUFTRAEGE WHERE SYSDBP.DBP_LEISTUNGSWERTE.ANLAGENNUMMER = :old.ANLAGENNUMMER
      AND SYSDBP.DBP_LEISTUNGSWERTE.ANZAHL = :old.DB_REGISTER AND :old.SIGMA_AUFTYP_ID = '50'
      AND :old.STATUS = 'abgeschlossen');
END;
/
Der Trigger soll, wenn ein neuer Datensatz oder ein Datensatz in der Tabelle AUFTRAEGE geändert wird, in der Tabelle LEISTUNGSWERTE, in die Spalte LETZTE_AEUSSEREPRUEFUNG das letzte Datum von der Spalte AUFTRAGERLEDIGT aus der Tabelle AUFTRAEGE schrieben. Einschränkungen sind: In der Tabelle AUFTRAEGE muss Spalte SIGMA_TAETIGKEIT_ID = 131 und die Spalte SIGMA_AUFTYP_ID = 50 und die Spalte STATUS = abgeschlossen sein.
LEISTUNGSWERTE.ANZAHL muss gleich AUFTRAEGE.DB_REGISTER sein und LEISTUNGSWERTE.ANLAGENNUMMER muss gleich AUFTRAEGE.ANLAGENNUMMER sein.

Gruss

Holger

DeddyH 3. Aug 2007 12:22

Re: Trigger -> Problem
 
Ohne mir das im Detail angesehen zu haben, fällt mir auf, dass die Klammerung nicht stimmt.

HolgerCW 3. Aug 2007 12:27

Re: Trigger -> Problem
 
Das war es schon.

Trigger wurde erstellt.

Juhuuu...

Danke

Holger


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:11 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