![]() |
Datenbank: Firebird • Version: 3.0 • Zugriff über: FireDac
Trigger Felder verketten
Hallo zusammen,
ich bin gerade dabei, die Datenbank etwas zu optimieren. An vielen Stellen werden unötige Verkettungen durchgeführt. Nun habe ich mir gedacht, dass ich durch einen Trigger die Adresse zusammensetzen lassen kann.
Delphi-Quellcode:
Nur leider bringt er mir [FireDAC][Phys][FB]attempted update of read-only column und ich weiß nicht warum.
Create Trigger Adresse_ai_au
active after insert or update on Adressen as begin new.Adresse = (Select Coalesce(Titel,'') || ' ' || Coalesce(Vorname, '') || ' ' || Coalesce(Nachname, '') from Adressen where ID = new.ID); end Jemand eine Idee? VG |
AW: Trigger Felder verketten
Im AfterInsert/-Update wurde bereits gespeichert und es lässt sich nichts mehr Ändern.
Du kannst dort maximal ein neues UPDATE-Statement auslösen.
SQL-Code:
--UPDATE Adressen SET Adresse = concat(new.Titel, ' ', new.Vorname, ' ', new.Nachname) WHERE ID = new.ID;
SQL-Code:
UPDATE Adressen SET Adresse = concat(Titel, ' ', Vorname, ' ', Nachname) WHERE ID = new.ID;
(auf Endlosschleifen achten) Was du willst, ist wohl im BeforeInsert/-Update zu besser lösen.
SQL-Code:
new.Adresse = concat(new.Titel, ' ', new.Vorname, ' ', new.Nachname);
(wird Titel/Vorname/Nachname in einem anderen Trigger geändert, dann auf die Reihenfolge der Trigger achten) Einige DBMS kennen auch sowas wie ein
SQL-Code:
,
new.Adresse = concat_ws(' ', new.Titel, new.Vorname, new.Nachname);
also "concatenate with separator", wo
Delphi-Quellcode:
als Trennzeichen nur zwischen vorhandene Einträge (nicht NULL) eingefügt wird.
' '
Kennt Firebird Writeable-Views? Wenn ja, dann keine doppelte Datenhaltung, sondern sich einen View erstellen, der das bei der Abfrage zusammensetzt. |
AW: Trigger Felder verketten
Perfekt danke!
|
AW: Trigger Felder verketten
Büdde.
PS: Hatte noch was nachgetragen. (sah nicht das du noch da warst und auch schon geantwortet hattest) Der letzte Satz/Frage, bezüglich der doppelten Daten, und das concat/concat_ws. Alternativ kann man es auch umdehen und ins Coalesce einfügen.
SQL-Code:
Coalesce(Titel || ' ', '') || Coalesce(Vorname || ' ', '') || Coalesce(Nachname, '')
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:38 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