我目前正在处理我正在编写的触发器问题。我想做一个简单的触发器,在更新表STATEMENT并将状态字段设置为'Sent'之后,它将在表NOTICE中创建一个新行,其中包含id,date,user和最后一个字段为a的字段消息,它使某些字段值创建“通知”。
如果有帮助,我的STATEMENT表包含以下字段:
因此,在插入NOTICE的最后一个字段时,我想创建一条消息,或许可以说“发送日期时发出的声明,(id) - (标题)”。
我目前有:
create trigger send_notice
after update on STATEMENT
for each row
when (new.status = 'Sent')
begin
insert into NOTICE values (notice_seq.nextval, SYSDATE, '10001', 'the notice
im having trouble constructing');
end send_notice;
我在数据库中测试了这个触发器,一切似乎都运行正常。我只是想知道的另一件事是格式化或是否有任何遗漏可能有助于此触发器?而且,我是否会创建该通知,它从STATEMENT获取字段值?
感谢任何帮助
答案 0 :(得分:3)
您可以使用以下命令在触发器中引用新的STATEMENT列值:new。,并将它们连接到您的文本中:
create trigger send_notice
after update on STATEMENT
for each row
when (new.status = 'Sent')
begin
insert into NOTICE values (notice_seq.nextval, SYSDATE, '10001',
'The statement, ' || :new.id || ' - ' || :new.title || ', issued on '
|| :new.issue_date || ' has been sent');
end send_notice;
有时连接大量文本和值会让人感到困惑,您可能会发现使用这种“模板”方法更容易:
create trigger send_notice
after update on STATEMENT
for each row
when (new.status = 'Sent')
declare
l_text varchar2(500);
begin
l_text := 'The statement, #ID# - #TITLE#, issued on #DATE# has been sent';
l_text := replace (l_text, '#ID#', :new.id);
l_text := replace (l_text, '#TITLE#', :new.title);
l_text := replace (l_text, '#DATE#', :new.issue_date);
insert into NOTICE values (notice_seq.nextval, SYSDATE, '10001', l_text);
end send_notice;