いいえ、それはできません。チェック制約の制限を参照してください:
- ユーザー定義関数の呼び出し
ただし、仮想列を使用して回避策を作成できます
ALTER TABLE tbl_AccountAuthentications ADD (fnCheck NUMBER GENERATED ALWAYS AS (fnCheckValid(accountid_fk)) VIRTUAL);
ALTER TABLE tbl_AccountAuthentications
ADD CONSTRAINT chkCheckvalid CHECK(fnCheck <= 1);
関数はDETERMINISTICである必要があることに注意してください。そうでない場合、関数は機能しません。 Oracleは、関数が実際に決定論的であるかどうかを検証せず、キーワードをチェックするだけです。これは許可されています(まったく意味がありませんが):
CREATE OR REPLACE FUNCTION DET_FUNCTION RETURN NUMBER DETERMINISTIC IS
BEGIN
RETURN DBMS_RANDOM.RANDOM();
END;
/