Вопрос по Oracle

  • Всем привет.
    Вот никак вот такую проблему решить не могу, может кто–нибудь уже сталкивался.
    Мне нужно создать Таблицу назовём её Тест а в ней 3 столбика (A, B, C) 'А' из них Primary Key .
    Все они типа Number. А проблеме в том что одно из Б или С должны быть 0. Это значит что , если Б не ноль , то C должно быть нулю и наоборот.
    Всё это должно идти через CHECK-CONSTRAINTS
    Вот к чему я пришёл:

    Цитата

    CREATE TABLE Test (
    A NUMBER(10) CONSTRAINT Test_pk PRIMARY KEY,
    B NUMBER(10) CONSTRAINT pruefe_B CHECK ((B=0 AND C!=0) OR (B!=0 AND C=0)),
    C NUMBER(10) CONSTRAINT pruefe_C CHECK ((B=0 AND C!=0) OR (B!=0 AND C=0)),
    );


    Но это не идёт, потомучто

    Цитата


    FEHLER in Zeile 3:
    ORA-02438: Spalten-Check kann sich nicht auf eine andere Spalte beziehen


    Может есть у кого–то какиее–нибудь идеи?

  • А если так


    CREATE TABLE Test (
    A NUMBER(10) CONSTRAINT Test_pk PRIMARY KEY,
    B NUMBER(10) CONSTRAINT pruefe_B CHECK ((B=0 AND C>=0) OR (B>=0 AND C=0)),
    C NUMBER(10) CONSTRAINT pruefe_C CHECK ((B=0 AND C>=0) OR (B>=0 AND C=0)));

  • Цитата

    По словам пользователя Akkermanez ...
    А если так


    CREATE TABLE Test (
    A NUMBER(10) CONSTRAINT Test_pk PRIMARY KEY,
    B NUMBER(10) CONSTRAINT pruefe_B CHECK ((B=0 AND C>=0) OR (B>=0 AND C=0)),
    C NUMBER(10) CONSTRAINT pruefe_C CHECK ((B=0 AND C>=0) OR (B>=0 AND C=0)));


    В том то и дело , что нельзя проверять другой аттрибут одновременно

    Цитата


    FEHLER in Zeile 3:
    ORA-02438: Spalten-Check kann sich nicht auf eine andere Spalte beziehen

  • Мне кажется что ты что то непрвильно сделал.


    Вот Пример
    Definition von Integritätsbedingungen zur Begrenzung des Wertebereiches einzelner oder mehrerer Attribute. Constraints sind Tabellen und Spalten zuzuordnen. Typen von Constraints:


    NOT NULL
    Spalte muß stets gefüllt sein.


    UNIQUE
    Spalte oder Spaltenkombination ist eindeutig.


    PRIMARY KEY
    Spalte oder Spaltenkombination ist Primärschlüssel.


    FOREIGN KEY
    Spalte oder Spaltenkombination muß in einer separaten Tabelle als Schlüssel vorhanden sein.


    ON DELETE CASCADE
    Löschen eines Datensatzes führt zum kaskadierenden Löschen der, über foreign key constraints verbundenen, Datensätze.


    CHECK
    Boolscher Ausdruck ist wahr


    Beispiele:
    create table einheit (
    einheit_kurz varchar2(10) constraint pk_einheit primary key,
    bezeichnung varchar2(40)
    );


    create table artikel (
    artikel_nr number(5) not null,
    bezeichnung varchar2(40) not null,
    einheit_ref varchar2(10) not null,
    constraint pk_artikel primary key (artikel_nr),
    constraint fk_artikel_einheit foreign key (einheit_ref)
    references einheit(einheit_kurz)
    );


    alter table auftrag_pos add constraint pk_auftrag_pos
    primary key (auftrag_nr, pos);


    alter table auftrag_pos add constraint ck_auftr_pos_artikel_text
    check (artikel_nr is not null or text is not null);


    alter table auftrag_pos add constraint fk_auftrag_pos_auftrag
    foreign key (auftrag_nr) references auftrag(auftrag_nr);

  • Akkermanez
    Спасибо за помошь.
    Я решил эту проблему вот так