Ne, to nemůžete udělat, viz Omezení kontrolních omezení:
- Volání funkcí definovaných uživatelem
Ale můžete to obejít pomocí virtuálních sloupců
ALTER TABLE tbl_AccountAuthentications ADD (fnCheck NUMBER GENERATED ALWAYS AS (fnCheckValid(accountid_fk)) VIRTUAL);
ALTER TABLE tbl_AccountAuthentications
ADD CONSTRAINT chkCheckvalid CHECK(fnCheck <= 1);
Poznámka, funkce musí být DETERMINISTICKÁ, jinak nefunguje. Oracle neověřuje, zda je vaše funkce skutečně deterministická, pouze kontroluje klíčové slovo. Toto je povoleno (ačkoli to nedává vůbec žádný smysl):
CREATE OR REPLACE FUNCTION DET_FUNCTION RETURN NUMBER DETERMINISTIC IS
BEGIN
RETURN DBMS_RANDOM.RANDOM();
END;
/