私は以下の2つのテーブルを持っています。複数のテーブルレベルでOracle SQLチェック制約を追加
create table emp(empno varchar2(5)、position varchar2(5));
create table info(empno varchar2(5)、nick varchar2(20));
empnoは両方のテーブルのプライマリキーで、empnoも親テーブルempを持つinfoの外部キーです。
gmまたはcatcher(column positionの値)を除いて、ニックネームが16文字を超えないようにチェック制約を追加します。
私は以下のようにUDFメソッドを試しました。
create function checkPos (@empno varchar2(5))
returns bit
as
begin
declare @par bit
select @par = CASE WHEN pos = 'gm' or pos = 'catcher'
THEN 0 ELSE 1 END
FROM emp
WHERE empno = @empno
RETURN(@par)
END
ALTER TABLE info ADD CONSTRAINT info_nick_ck CHECK (checkPos(empno) * length(nick) <16);
ただし、oracle live sqlでは機能しません。
助けてください。前もって感謝します。
あなたは、Oracleを使用していることを言ったが、あなたのコードは私に多くのTSQLコードのように見える – GurV