我正试图完成这个问题:
向给定工作人员的支持票证添加更新。如果票证已关闭,则客户或工作人员都不应再进行更新。
然而,我得到了一个错误,我把我的代码和错误输出放在下面。如有任何帮助,我们将不胜感激。
create or replace function update_ticket()
returns trigger
language plpgsql
as $$
begin
if old.status = 'closed' then
RAISE EXCEPTION 'Ticket is closed';
end if;
return new;
end;
$$;
CREATE TRIGGER update_trigger AFTER UPDATE OR INSERT ON coursework.TicketUpdate
FOR EACH ROW EXECUTE PROCEDURE update_ticket();
--Insert an update to a ticket with values: ticketUpdateID = 10050;
--Message ='Highlight folder for backup and press to trash or right click and choose delete'; --
--TicketID = 1010 ; StaffID=2
INSERT INTO TicketUpdate(ticketUpdateID, message, ticketID, StaffID)
VALUES(10050,"突出显示要备份的文件夹并按垃圾桶或右键单击并选择删除",1010,2(;
错误:记录";旧的";没有字段";"状态";
上下文:SQL语句";SELECT old.status="已关闭">
IF 的PL/pgSQL函数public.update_ticket((第3行
SQL状态:42703
您的触发器应用于INSERT,但UPDATE或DELETE上只有一行和旧行,请参阅文档https://www.postgresql.org/docs/12/plpgsql-trigger.html.
此外,还不清楚您要插入的表是否有状态列。如果有,那么您的触发器应该可以进行更新,并且您将需要不同的插入逻辑。