Oracle SQL在多个表级别添加检查约束

时间:2017-02-13 20:27:23

标签: sql oracle multiple-tables check-constraint

我有两张表格如下。

create table emp(empno varchar2(5),position varchar2(5));

创建表信息(empno varchar2(5),nick varchar2(20));

empno是两个表的主键,empno也是info中的外键,父表为emp。

现在我想添加一个检查约束,这样除了gm或catcher(列位置的值)之外,缺口不应超过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中不起作用。

请帮忙。提前谢谢。

1 个答案:

答案 0 :(得分:0)

您的代码看起来像TSQL代码。

在Oracle中尝试此功能:

create function checkPos (p_empno varchar2)
return number
as
    v_par number := 0;
begin
    select case 
            when pos = 'gm'
                or pos = 'catcher'
                then 0
            else 1
            end into v_par
    from emp
    where empno = p_empno;

    return v_par;
exception
    when no_data_found then
        dbms_output.put_line('No data found');
        -- Do something about it
end;
/