【问题标题】:Oracle - using SQL%ROWCOUNT for auditing purposeOracle - 使用 SQL%ROWCOUNT 进行审计
【发布时间】:2016-12-18 17:43:39
【问题描述】:

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

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

我需要找到一种方法来将受影响的行数显示回报告中。

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

所以最后:我不知道如何做到这一点。

非常感谢!

更新:

好的。所以我的 SP 在游标、动态 SQL 等方面有点复杂 - 因此,根据您的想法和来自 AskTom 的这个主题的一些帮助,我设法得到了以下信息:

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**

【问题讨论】:

    标签: oracle plsql audit rowcount audit-trail


    【解决方案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

    【讨论】:

    • 非常感谢 - 检查我在问题中的更新。你的帮助加上一点,我想我明白了。现在来调整我到目前为止写的所有内容。 :)
    • @EkeshOkor - 太好了,很高兴我能帮上忙。如果可以的话,请给我一个upvote plz。 :-)
    • 当然,很抱歉。我一直在想,我需要等待 2 天前:\ - 但这仅适用于您自己的答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-03
    • 1970-01-01
    • 2023-03-14
    • 2018-04-18
    • 2019-12-18
    • 1970-01-01
    • 2017-05-22
    相关资源
    最近更新 更多