Oracle - 使用 SQL%ROWCOUNT 进行审计
Oracle - using SQL%ROWCOUNT for auditing purpose
所以我有一个使用 Oracle 作为其数据库平台的 .NET 软件。该软件中的报告将调用 Oracle 模式中的过程,这些过程将 运行 数据库中的多个 update/inserts/deletes/merges。
现在从研究中我可以看到 SQL%ROWCOUNT 可用于告诉查询将行数放入 DBMS_OUTPUT - 但我理解它的方式如果我从查询软件(即:SQL Plus、TOAD 等)执行这些程序。
我需要找到一种方法来向报告显示受影响的行数。
现在,如果我没有遗漏一些基本的东西,我想最简单的方法是插入受影响行的审计 table 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**
这(诚然)是一个微不足道的例子,但您可以(如您所建议的那样)将受影响的行数放在 table 中,然后 运行 一个关于 table 的报告。
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;
运行 你的报告关闭 table sales_log
.
所以我有一个使用 Oracle 作为其数据库平台的 .NET 软件。该软件中的报告将调用 Oracle 模式中的过程,这些过程将 运行 数据库中的多个 update/inserts/deletes/merges。
现在从研究中我可以看到 SQL%ROWCOUNT 可用于告诉查询将行数放入 DBMS_OUTPUT - 但我理解它的方式如果我从查询软件(即:SQL Plus、TOAD 等)执行这些程序。
我需要找到一种方法来向报告显示受影响的行数。
现在,如果我没有遗漏一些基本的东西,我想最简单的方法是插入受影响行的审计 table 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**
这(诚然)是一个微不足道的例子,但您可以(如您所建议的那样)将受影响的行数放在 table 中,然后 运行 一个关于 table 的报告。
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;
运行 你的报告关闭 table sales_log
.