我有两个表,如下所示。Oracle SQL在多表级别添加检查约束条件
create table emp(empno varchar2(5),position varchar2(5));
create table info(empno varchar2(5),nick varchar2(20));
empno是两个表的主键,empno也是信息中的外键,带有父表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代码给我 – GurV