Не, не можете да направите това, вижте Ограничения на ограниченията за проверка:
- Извиквания към дефинирани от потребителя функции
Но можете да направите заобиколно решение с помощта на виртуални колони
ALTER TABLE tbl_AccountAuthentications ADD (fnCheck NUMBER GENERATED ALWAYS AS (fnCheckValid(accountid_fk)) VIRTUAL);
ALTER TABLE tbl_AccountAuthentications
ADD CONSTRAINT chkCheckvalid CHECK(fnCheck <= 1);
Забележете, функцията трябва да е ДЕТЕРМИНИСТИЧНА, в противен случай не работи. Oracle не проверява дали вашата функция всъщност е детерминистична, а просто проверява за ключовата дума. Това е позволено (въпреки че няма никакъв смисъл):
CREATE OR REPLACE FUNCTION DET_FUNCTION RETURN NUMBER DETERMINISTIC IS
BEGIN
RETURN DBMS_RANDOM.RANDOM();
END;
/