如何编写仅在满足条件时运行的 SQL 语句?

睾丸

我想编写一个过程,将记录从 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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章