Używając PL/SQL buduję tabelę zawierającą config, który definiuje rozkład próbek na 2 różne zestawy w oparciu o stosunek. Ma 4 kolumny: sample_type, set_1, set_2, ratio (procent próbek przechodzących do set_1). Na przykład, jeśli wiersz to ('walk', 'left', 'right', 50), oznacza to, że dla próbek, których typ to 'walk', 50% z nich idzie 'left', a reszta 'right'.

Chcę dodać ograniczenie sprawdzające, które zapewnia, że ​​set_2 ma wartość null, jeśli tylko stosunek wynosi 100, tj. 100% próbki trafia do set_1. Próbuję czegoś takiego:

ALTER TABLE CONFIG
ADD CONSTRAINT CHK
CHECK (
    NOT EXISTS (SELECT 1 FROM CONFIG WHERE SET_2 IS NULL AND RATIO <> 0)
)

Jednak Oracle nie zezwala na podzapytanie pod kontrolą. Czy jest więc inny sposób na dodanie ograniczenia sprawdzającego w tej sytuacji?

Dziękuję Ci

3
Long Thai 30 sierpień 2012, 18:06

2 odpowiedzi

Najlepsza odpowiedź
ALTER TABLE CONFIG
ADD CONSTRAINT CHK
CHECK (
    (RATIO = 100) OR (SET_2 IS NOT NULL AND RATIO != 100)
)

I nie byłem do końca pewien, czy to wymaganie, ale jeśli SET_2 musi mieć wartość null w przypadku 100, to chciałbyś to:

ALTER TABLE CONFIG
ADD CONSTRAINT CHK
CHECK (
    (SET_2 IS NULL AND RATIO = 100) OR (SET_2 IS NOT NULL AND RATIO != 100)
)
4
Reimius 30 sierpień 2012, 21:31

By

ALTER TABLE CONFIG
ADD CONSTRAINT CHK
CHECK (
    SET_2 IS NULL AND RATIO <> 0
)

Praca?

1
Greg Reynolds 30 sierpień 2012, 18:11