Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi sehr allgemeine frage zu sql (https://www.delphipraxis.net/62901-sehr-allgemeine-frage-zu-sql.html)

sancho1980 11. Feb 2006 01:45

Datenbank: interbase 6.5 • Zugriff über: ibx, ibexpert

sehr allgemeine frage zu sql
 
hallo,
angenommen, ich hab eine interbase-datenbank 'datenbank.gdb' mit einer tabelle 'tabelle' mit den feldern 'feld1' und 'feld2'
gibt es sql-statements, die in der lage sind, folgenden constraint festzulegen:

if (feld1 not null) then (feld2 muss null)

ich weiß das klingt n bisschen doof, is aber ne rein hypothetische frage, weil ich meine datenbank wenn möglich so definieren möchte, dass bestimmte felder leer bleiben müssen, wenn bestimmte andere es nicht sind

danke

martin

peter12 11. Feb 2006 06:48

Re: sehr allgemeine frage zu sql
 
Das kann man in Triggers machen.
Wenn Feld geändert wird wird die Prüfung gemacht.

peter

sancho1980 11. Feb 2006 09:50

Re: sehr allgemeine frage zu sql
 
1) kannst du mir bitte mal kurz zeugen, wie die syntax in diesem konkreten fall ('feld1' und 'feld2') auszusehen hätte; hab zwar literatur zu sql aber da sind solche sachen nicht beschrieben; da muss man doch irgendwie ne exception schmeißen können..habe aber keinen plan wie das in sql geht

2) wenn ich einen before-insert-trigger oder einen before-update-trigger erstellen will und dabei 'feld1' eingetragen bzw. verändert werden soll: wie referenziere ich dann diesen wert für 'feld1' (nicht der, der bereits in der datenbank ist, sondern der, der eingetragen wird)?

danke
martin

alcaeus 11. Feb 2006 10:03

Re: sehr allgemeine frage zu sql
 
Hier das Query zum Erstellen des Triggers (ungetestet):
SQL-Code:
CREATE TRIGGER <triggername> FOR <tabellenname>
BEFORE INSERT
AS
BEGIN
  IF (NEW.<feldname> IS NOT NULL) THEN
    NEW.<zweiterfeldname> = NULL;
END;;
Greetz
alcaeus

sancho1980 11. Feb 2006 12:24

Re: sehr allgemeine frage zu sql
 
Jo das scheint zu funzen.
aber um mir in meinem trigger allzu viel getippse zu ersparen, gibt es vielleicht nen trick, im trigger noch folgendes auszudrücken:

if (new.feld1 not null) then
begin
feld2 = new.feld2
feld3 = new.feld3
alleRestlichenFelderDerTabelle = null
end

many thanx

martin

sancho1980 11. Feb 2006 12:30

Re: sehr allgemeine frage zu sql
 
oder was mir noch lieber wäre, ist, dass der sql-server eine exception an den client zurückgibt, falls ein ungültiger datensatz eingefügt wird; wie geht sowas in sql?
also na dem prinzip:

if (new.feld1 not null) then
if (new.feld2 not null) then
begin
ungültigerRecordException;
abbruch update oder insert;
end;

ihr versteht was ich meine...


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