No, non puoi farlo, vedi Restrizioni sui vincoli di controllo:
- Chiamate a funzioni definite dall'utente
Ma puoi trovare una soluzione alternativa usando le colonne virtuali
ALTER TABLE tbl_AccountAuthentications ADD (fnCheck NUMBER GENERATED ALWAYS AS (fnCheckValid(accountid_fk)) VIRTUAL);
ALTER TABLE tbl_AccountAuthentications
ADD CONSTRAINT chkCheckvalid CHECK(fnCheck <= 1);
Nota, la funzione deve essere DETERMINISTICA, altrimenti non funziona. Oracle non verifica se la tua funzione è effettivamente deterministica, controlla solo la parola chiave. Questo è consentito (anche se non ha alcun senso):
CREATE OR REPLACE FUNCTION DET_FUNCTION RETURN NUMBER DETERMINISTIC IS
BEGIN
RETURN DBMS_RANDOM.RANDOM();
END;
/