Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Check Constraint Calling a Function Oracle SQL-Entwickler

Nein, das ist nicht möglich, siehe Einschränkungen bei Check Constraints:

  • Aufrufe benutzerdefinierter Funktionen

Aber Sie können einen Workaround schaffen, indem Sie virtuelle Spalten verwenden

ALTER TABLE tbl_AccountAuthentications ADD (fnCheck NUMBER GENERATED ALWAYS AS (fnCheckValid(accountid_fk)) VIRTUAL);


ALTER TABLE tbl_AccountAuthentications
ADD CONSTRAINT chkCheckvalid CHECK(fnCheck <= 1);

Beachten Sie, dass die Funktion DETERMINISTIC sein muss, sonst funktioniert sie nicht. Oracle überprüft nicht, ob Ihre Funktion tatsächlich deterministisch ist, sondern prüft nur auf das Schlüsselwort. Dies ist erlaubt (obwohl es überhaupt keinen Sinn macht):

CREATE OR REPLACE FUNCTION DET_FUNCTION RETURN NUMBER DETERMINISTIC IS 
BEGIN 
    RETURN DBMS_RANDOM.RANDOM();
END;
/