No, no puede hacer eso, consulte Restricciones en las restricciones de verificación:
- Llamadas a funciones definidas por el usuario
Pero puede solucionarlo usando columnas virtuales
ALTER TABLE tbl_AccountAuthentications ADD (fnCheck NUMBER GENERATED ALWAYS AS (fnCheckValid(accountid_fk)) VIRTUAL);
ALTER TABLE tbl_AccountAuthentications
ADD CONSTRAINT chkCheckvalid CHECK(fnCheck <= 1);
Tenga en cuenta que la función debe ser DETERMINISTA, de lo contrario no funciona. Oracle no verifica si su función es realmente determinista, solo verifica la palabra clave. Este está permitido (aunque no tiene ningún sentido):
CREATE OR REPLACE FUNCTION DET_FUNCTION RETURN NUMBER DETERMINISTIC IS
BEGIN
RETURN DBMS_RANDOM.RANDOM();
END;
/