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
2 odpowiedzi
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)
)
By
ALTER TABLE CONFIG
ADD CONSTRAINT CHK
CHECK (
SET_2 IS NULL AND RATIO <> 0
)
Praca?
Podobne pytania
Nowe pytania
oracle
Oracle Database to wielomodelowy system zarządzania bazami danych stworzony przez Oracle Corporation. NIE używaj tego znacznika w przypadku innych produktów należących do Oracle, takich jak Java i MySQL.