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 に答える