0

我有两个表如下。

创建表emp(empno varchar2(5),位置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 中不起作用。

请帮忙。先感谢您。

4

1 回答 1

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;
/
于 2017-02-13T20:38:49.207 回答