1

我有一个触发器,如下所示:

create or replace
TRIGGER impt_downloadproc
before delete ON A
declare
storedate nvarchar2(80);
storetime nvarchar2(80);
sequel string(2000);
BEGIN
storedate := to_char(sysdate,'YYYYMMDD');
storetime :=  to_char(sysdate,'HH24MISS');
sequel:='create table B_'||storedate||'_'||storetime||' as select * from ipcsdd_download_process';
execute immediate sequel;
END;

我在触发器中尝试做的是:在某人/某事从 A 表中删除记录之前,创建一个备份表 B_yyyymmdd_hhmmss 并将记录备份到该表。

但是我在行中遇到错误:storedate := to_char(sysdate,'YYYYMMDD'); 我不明白有什么问题。

4

1 回答 1

2

我预计会出现不同的错误-您不能在触发器中提交。如果您真的想要,那么您将需要使用自治事务(这通常不是一个好主意)

因此,您的代码应如下所示:

create or replace
TRIGGER impt_downloadproc
before delete ON A
declare
pragma   autonomous_transaction; -- see this line
storedate nvarchar2(80);
storetime nvarchar2(80);
sequel string(2000);
BEGIN
storedate := to_char(sysdate,'YYYYMMDD');
storetime :=  to_char(sysdate,'HH24MISS');
sequel:='create table B_'||storedate||'_'||storetime||' as select * from ipcsdd_download_process';
execute immediate sequel;
END;

这是一个例子

于 2013-10-29T05:45:18.780 回答