Non, vous ne pouvez pas faire cela, voir Restrictions sur les contraintes de vérification :
- Appels aux fonctions définies par l'utilisateur
Mais vous pouvez contourner le problème en utilisant des colonnes virtuelles
ALTER TABLE tbl_AccountAuthentications ADD (fnCheck NUMBER GENERATED ALWAYS AS (fnCheckValid(accountid_fk)) VIRTUAL);
ALTER TABLE tbl_AccountAuthentications
ADD CONSTRAINT chkCheckvalid CHECK(fnCheck <= 1);
Remarque, la fonction doit être DETERMINISTE, sinon elle ne fonctionne pas. Oracle ne vérifie pas si votre fonction est réellement déterministe, il vérifie simplement le mot-clé. Celle-ci est autorisée (bien qu'elle n'ait aucun sens) :
CREATE OR REPLACE FUNCTION DET_FUNCTION RETURN NUMBER DETERMINISTIC IS
BEGIN
RETURN DBMS_RANDOM.RANDOM();
END;
/