Oracle
 sql >> Base de données >  >> RDS >> Oracle

Vérifier la contrainte appelant une fonction Développeur Oracle SQL

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;
/