【发布时间】:2017-11-01 00:23:19
【问题描述】:
我似乎无法在逻辑上放置这个错误,不像大多数人几乎没有提供关于原因的信息(通常看起来他们的预处理器非常好,或者你可以深入研究逻辑,但在这里我没有错误。 我还有另一个运行良好的功能,它添加了这些键,所以不是那个.. 否则交易似乎失败了,当我进入时我进入了终端
update guest_list set coatcheck = true where ticket_number = 3;
"PL/pgSQL 函数 coatcheck_gen() 第 8 行 SQL 语句 SQL 语句“更新 guest_list 设置coatcheck_num = coat_num where ticket_number = old.ticket_number” PL/pgSQL 函数 coatcheck_gen() 第 8 行 SQL 语句 SQL语句“更新guest_list set coatcheck_num = coat_num where ticket_number = old.ticket_number”
这持续页面,然后结束。 我试过用新的。老的。或者只是看数字。没事了。同样的错误。 所有的桌子都很好。所有更新都在命令完成后工作。 它出现在其他地方的例子中似乎是正确的......
功能是
create or replace function coatcheck_gen() returns trigger as $gencoatcheck$
declare
coat_num bigint;
begin
IF (TG_OP = 'UPDATE') then
if ( new.coatcheck = true ) then
coat_num := (old.frkey_id_event + old.frkey_id_guest);
update guest_list set coatcheck_num = coat_num where ticket_number = old.ticket_number;
return new;
END IF;
return new;
end if;
return new;
end;
$gencoatcheck$ LANGUAGE plpgsql;
触发
create trigger trg_coatchek_gen after update on guest_list for each row when (new.coatcheck = true) execute Procedure coatcheck_gen();
【问题讨论】:
-
我还没有完全理解你想要达到什么目的。
-
您创建了一个
trigger after update for each row并在触发器内部更新了同一个表。是你的真实意图吗?如果这是您的想法,那么出了什么问题?你的交易有例外吗?您对每一行都有一个例外,或者您没有例外,但它看起来不对? -
是的。所以,当coat-check bool 修改为true 时,它会创建一个coat-check 编号。并将其添加到表中。这只发生在有人参加之后。并在宾客名单上。 (创建票号的功能,在类型事件的贡献上都很好。我有一个例外,确保一个人必须在添加外套检查之前“参加”。所以,当且仅当“外套检查”被更改时才会触发. 在那些行上。一旦发生这种情况,触发器应该转到函数并创建一个 coatcheck_number ..
标签: postgresql plpgsql