我想编写一个过程,将记录从 SYS.AUD$ 复制到 AUDIT_USER.AUDIT_HISTORY_TABLE 然后 TRUNCATE SYS.AUD$。我希望只有在复制/插入顺利时才执行截断。
所以像这样:
CREATE OR REPLACE PROCEDURE proc_copy_records_and_then_delete
IS
BEGIN
DECLARE number_of_records NUMBER(900000000) :=SELECT COUNT(*) FROM SYS.AUD$;
insert into AUDIT_USER.AUDIT_HISTORY_TABLE select * from SYS.AUD$;
IF number_of_records <= rows_inserted THEN
COMMIT;
TRUNCATE TABLE SYS.AUD$;
/
所以我只想在记录被插入到另一个表中时才 TRUNCATE TABLE SYS.AUD$ 。
你可以尝试这样做。我没有测试这个解决方案,但它应该让你知道如何去做
CREATE OR REPLACE PROCEDURE proc_copy_records_and_then_delete
IS
v_row_count number;
BEGIN
insert into AUDIT_USER.AUDIT_HISTORY_TABLE
select * from SYS.AUD$;
v_row_count := SQL%ROWCOUNT ;
IF v_row_count > 0 THEN -- check if some rows where inserted
INSERT INTO LOG_TABLE (TEXT) VALUES (v_row_count);
COMMIT;
execute immediate 'truncate table SYS.AUD$';
end if;
end;
/
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句