Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Im Trigger abfragen ob Datensatz existiert (https://www.delphipraxis.net/211897-im-trigger-abfragen-ob-datensatz-existiert.html)

Walter Landwehr 18. Nov 2022 13:32

Datenbank: Firebitd • Version: 2.5 • Zugriff über: IBO

Im Trigger abfragen ob Datensatz existiert
 
Hallo,

gibt es ein Möglichkeit im Trigger abzufragen ob ein Datensatz existiert. Etwa so:
Delphi-Quellcode:
Select count(PATIENTNR) from tbl_patdiagnose PD where PD.suchwort = :New.SUCHWORT and PD.patientnr = :New.PATIENTNR;
 if (Count) = 0 then
 begin
   INSERT INTO TBL_PATDIAGNOSE(
                 PATDIAGNOSENR, PATIENTNR, DATUM, DAUERDIAGNOSE, DIAGNOSE,
                 ANLAGE, ANLAGEBENUTZER, DIAGNOSENR, Suchwort, ReferenzTabelle, ReferenzNr)
          VALUES (
                 Gen_ID(GEN_TBL_PATDIAGNOSE,1), new.PATIENTNR, new.BEHANDLUNGSDATUM, 'N', new.Text,
                 new.Anlage, new.ANLAGEBENUTZER, new.GEBUEHRENNR, new.Suchwort, 'PB', new.PatBlattNr);
 end;

MyRealName 18. Nov 2022 13:34

AW: Im Trigger abfragen ob Datensatz existiert
 
Jein, weil ein Trigger ist ja beim INSERT, UPDATE oder DELETE gefeuert und dann musst Du kein neues INSERT zu machen.
Was Du machen kannst ist eine Exception, wenn der DS existiert, also das INSERT nicht zulassen.

dataspider 18. Nov 2022 13:54

AW: Im Trigger abfragen ob Datensatz existiert
 
Und wenn man es nicht über die Exception möchte, schreibt man eine Stored Procedure oder eine Updateable View.
Da beim View das Insert Statement in den Before Insert Trigger kommt, kannst du das genau so machen, wie du es schon beschrieben hast.
Obwohl ich statt einem "Count" "if not exists" bevorzugen würde.

Frank

Walter Landwehr 18. Nov 2022 15:23

AW: Im Trigger abfragen ob Datensatz existiert
 
Danke für die Infos habe jetzt eine Stored Procedure gebaut.

himitsu 18. Nov 2022 17:16

AW: Im Trigger abfragen ob Datensatz existiert
 
Jupp, "if not exist" kann beim ersten Auffinden/Nichtauffinden abbrechen, während "count" erstmal alle Datensätze durchgehn muß.

Warum sorum und nicht als WHERE?

SQL-Code:
INSERT INTO TBL_PATDIAGNOSE (
   PATDIAGNOSENR, PATIENTNR, DATUM, DAUERDIAGNOSE, DIAGNOSE,
   ANLAGE, ANLAGEBENUTZER, DIAGNOSENR, Suchwort, ReferenzTabelle, ReferenzNr
)
SELECT
   Gen_ID(GEN_TBL_PATDIAGNOSE,1), PATIENTNR, BEHANDLUNGSDATUM, 'N', Text,
   Anlage, ANLAGEBENUTZER, GEBUEHRENNR, Suchwort, 'PB', PatBlattNr
WHERE not exists(  -- bei IF exists ohne SubSelect und eventuell noch mit einem LIMIT 1
   SELECT True FROM tbl_patdiagnose
   WHERE suchwort = :SUCHWORT and patientnr = :PATIENTNR
)


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