sql >> Base de Datos >  >> RDS >> Oracle

Comprobar restricción llamando a una función desarrollador de Oracle SQL

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