Feld (a,b) wobei eines immer NULL sein muss!

Hallo,
kann ich ein constraint (unter Oracle) aufsetzen, der überprüft, dass zwischen zwei Felder (a,b) eines immer Null sein muss und das andere immer gefüllt? Also eines der Felder muss immer einen Wert enthalten während das andere leer bleibt.
Wie kann ich sowas definieren?

Hi,

kann ich ein constraint (unter Oracle) aufsetzen

Nein - sonst würdest Du nicht fragen :smile:
Aber ich kann das.

überprüft, dass zwischen zwei Felder (a,b) eines immer Null
sein muss und das andere immer gefüllt? Also eines der Felder
muss immer einen Wert enthalten während das andere leer
bleibt.
Wie kann ich sowas definieren?

Mit einem sog. Check-Constraint:

SQL\> create table nix(nix1 number, nix2 number);
Tabelle wurde angelegt.

SQL\> alter table nix add constraint nix\_c1 check ((nix1 is not null and nix2 is null) or (nix1 is null and nix2 is not null));
Tabelle wurde geändert.

SQL\> insert into nix values ( null, 2);

1 Zeile wurde erstellt.

SQL\> insert into nix values (1, null);

1 Zeile wurde erstellt.

SQL\> insert into nix values ( null, null);
insert into nix values ( null, null)
\*
FEHLER in Zeile 1:
ORA-02290: Verstoß gegen CHECK-Regel (SYSTEM.NIX\_C1)

SQL\> insert into nix values (1, 2);
insert into nix values (1, 2)
\*
FEHLER in Zeile 1:
ORA-02290: Verstoß gegen CHECK-Regel (SYSTEM.NIX\_C1)

SQL\> drop table nix;

Tabelle wurde gelöscht.

Regel für Check-Constraints: abgefragt wird ein Ausdruck, der Wahr oder Falsch liefert, die Komplexität darf ruhig ziemlich hoch sein.

Gruß

J.