Oracle
 sql >> Database >  >> RDS >> Oracle

Verifica vincolo Chiamando una funzione Sviluppatore Oracle SQL

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