![]() |
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; |
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. |
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 |
AW: Im Trigger abfragen ob Datensatz existiert
Danke für die Infos habe jetzt eine Stored Procedure gebaut.
|
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 06:35 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz