我是sql的新手。我想创建一个在表之间复制值的触发器。
基本上,我想完成的任务是将学生的消息表值转发给特定的staff_maibox
这是代码。
drop trigger forward_msg_to_staff;
create or replace trigger forward_msg_to_staff
update on message
for each row
declare
message_id VARCHAR2(10);
client_id NUMBER(10);
staff_id NUMBER(5);
message_date DATE;
message_title VARCHAR2(20);
staff_mailbox VARCHAR2(255);
begin
insert into staff_mailbox(message_id, client_id, staff_id, message_date, message_title, staff_mailbox)
values(:new.message_id, :new.client_id, :new.staff_id, :sysdate, :new.message_title, :old.staff_mailbox)
end;
/
这段代码是否正确? 请指教。提前谢谢。
答案 0 :(得分:3)
您收到错误是因为您错过了CREATE TRIGGER statement中的BEFORE或AFTER关键字。
如文档中所示,这些是必需的:
此外:
:sysdate
不正确,您没有绑定它。您可以像使用标准SQL或PL / SQL一样使用sysdate
。将您的触发器放在一起可能看起来像这样
create or replace trigger forward_msg_to_staff
after update on message
for each row
begin
insert into staff_mailbox( message_id, client_id, staff_id, message_date
, message_title, staff_mailbox )
values ( :new.message_id, :new.client_id, :new.staff_id, sysdate
, :new.message_title, :old.staff_mailbox );
end forward_msg_to_staff;
/
请注意,我也在END中使用了触发器名称。这只是为了方便起见,它使触发器结束的位置变得明显......
如果您想查看创建触发器时遇到的错误,请使用show errors
作为a_horse_with_no_name suggests。这显示了任何编译错误,这对于跟踪它们非常有用。