gpt4 book ai didi

sql - 在 SQL 中使用触发器的非空约束

转载 作者:行者123 更新时间:2023-11-29 14:22:57 25 4
gpt4 key购买 nike

我想使用触发器对属性实现非空约束。这是我的代码:

create table mytable2(id int);

create or replace function p_fn() returns trigger as $prim_key$
begin
if (tg_op='insert') then
if (id is null) then
raise notice 'ID cannot be null';
return null;
end if;
return new;
end if;
end;
$prim_key$ language plpgsql;

create trigger prim_key
before insert on mytable2
for each row execute procedure p_fn();

但每当我尝试插入一个空值时,我都会收到一条错误消息,提示“控制已到达触发器过程的末尾,无需返回”。我尝试在内部 IF 中放置“return new”语句,但它仍然给了我同样的错误。我做错了什么?

最佳答案

问题的直接原因是 PostgreSQL 字符串比较区分大小写。 INSERTinsert 不同。尝试:

IF tg_op = 'INSERT' THEN

建议

您只是在发出通知。这允许控制流继续到过程中的下一行。您通常应该RAISE EXCEPTION 来中止执行并回滚事务。参见 RAISE .就目前而言,触发器将导致不满足要求的插入静默失败,这通常不是您想要的。

此外,如果触发器总是应该在函数结束之前返回,那么它们通常应该以 RAISE EXCEPTION 结尾。这会帮助您更快地发现问题所在。

关于sql - 在 SQL 中使用触发器的非空约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15997104/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com