【发布时间】:2017-07-01 23:05:46
【问题描述】:
我有两张如下表。
创建表emp(empno varchar2(5), position varchar2(5));
创建表信息 (empno varchar2(5), nick varchar2(20));
empno是两个表的主键,empno也是info中的外键,父表emp。
现在我想添加一个检查约束,以便除了 gm 或 catcher(列位置的值)之外,nick 不应超过 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代码
标签: sql oracle multiple-tables check-constraint