Bedingte eindeutige Integritätsregel mit mehreren Feldern in Oracle DB

8

Ich habe diese Tabelle:

%Vor%

Ich möchte eine eindeutige Einschränkung erstellen, die nur für die Felder (obj_x, date_x, type_x) gilt, wenn status_x <> 5 .

Ich habe versucht, dieses zu erstellen, aber Oracle sagt:

%Vor% %Vor%

Was ist die richtige Syntax?

    
James Freitas 13.01.2014, 10:10
quelle

3 Antworten

13

@jamesfrj: Es sieht so aus, als wollten Sie sicherstellen, dass Ihre Tabelle nur einen Datensatz enthält, für den status <>5 gilt.

Sie können versuchen, einen eindeutigen Funktionsindex zu erstellen, indem Sie die Spalten wie unten angegeben verketten.

%Vor%

Ich hoffe, es hilft

Vishad

    
vishad 13.01.2014, 11:10
quelle
5

Unter Oracle 11 können Sie eine Reihe virtueller Spalten erstellen, die nur dann einen Nicht-NULL-Wert erhalten, wenn STATUS_X 5 ist, und dann sie eindeutig machen:

%Vor%

Sie können Duplikate beliebig einfügen, solange STATUS_X nicht 5:

ist %Vor%

Aber versucht, ein Duplikat einzufügen, wenn STATUS_X 5 ist, schlägt fehl:

%Vor%     
Branko Dimitrijevic 13.01.2014 11:59
quelle
2

Da der CREATE UNIQUE INDEX nur einen Wert erwartet, können Sie die Spalten wie folgt verketten

%Vor%     
Marco Montel 28.09.2016 07:17
quelle