Nej, du kan inte göra det, se Restriktioner för kontrollbegränsningar:
- Anrop till användardefinierade funktioner
Men du kan göra en lösning med virtuella kolumner
ALTER TABLE tbl_AccountAuthentications ADD (fnCheck NUMBER GENERATED ALWAYS AS (fnCheckValid(accountid_fk)) VIRTUAL);
ALTER TABLE tbl_AccountAuthentications
ADD CONSTRAINT chkCheckvalid CHECK(fnCheck <= 1);
Observera att funktionen måste vara DETERMINISTISK, annars fungerar den inte. Oracle verifierar inte om din funktion faktiskt är deterministisk, den letar bara efter nyckelordet. Den här är tillåten (även om det inte är meningsfullt alls):
CREATE OR REPLACE FUNCTION DET_FUNCTION RETURN NUMBER DETERMINISTIC IS
BEGIN
RETURN DBMS_RANDOM.RANDOM();
END;
/