Oracle - 使用SQL%ROWCOUNT进行审计

时间:2016-08-11 20:31:01

标签: oracle plsql audit rowcount audit-trail

所以我有一个.NET软件,它使用Oracle作为其数据库平台。此软件中的报告将调用Oracle模式中的过程,该过程将在数据库上运行许多更新/插入/删除/合并。

现在从研究中我可以看到SQL%ROWCOUNT可以用来告诉查询将行数放在DBMS_OUTPUT中 - 但是我理解它的方式如果我从查询软件执行这些程序(即:SQL Plus,TOAD等)。

我需要找到一种方法来显示回报告已经影响了多少行。

现在,如果我没有遗漏一些基本的东西,我想最简单的方法是在受影响的行中插入SQL%ROWCOUNT的审计表,然后在程序完成工作后用报告调用它。

最后:在如何实现这一目标方面遇到麻烦。

非常感谢!

更新

确定。所以我的SP在游标,动态SQL等方面有点复杂 - 正如你的想法和AskTom来自https://jsfiddle.net/rq1zymv2/2/的这个主题的一些帮助我设法得到以下内容:

declare v_count number;
.......
loop
 fetch v_data into v_database_name;
 exit when v_data%NOTFOUND;
  sql_update := 'merge PL/SQL block';
  execute immediate 'begin ' || sql_update || '; :x := sql%rowcount; end;' using OUT v_count;
  update cw_script_audit set sparam = sparam||'//'||v_count where hmy = 5063; 
  commit;
  sql_alter := 'alter session close database link '||v_database_name;
  execute immediate sql_alter;
 commit;
end loop;
...........

  **update cw_script_audit set sparam = sparam||'//'||v_count where hmy = 5063;** 
  **This line updates a single static record for testing purposes**

1 个答案:

答案 0 :(得分:1)

这是(诚然)一个简单的例子,但你可以(如你所建议的)将受影响的行计数放在一个表中,然后从该表中运行一个报告。

declare
  row_cnt number;
begin
  update sales set job = 'DIRECTOR' where job = 'CLERK';
  row_cnt := sql%rowcount;  
  insert into sales_log values('Update', row_cnt);
  commit;

  exception
    when others then
      dbms_output.put_line('Error');
end;

从表sales_log开始运行您的报告。