如何在oracle的触发器中的变量中存储sysdate值?

时间:2013-10-29 05:13:49

标签: oracle triggers dynamic-sql

我的触发器如下:

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'); 我不明白这是什么问题。

1 个答案:

答案 0 :(得分: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;

here is an example