2016-08-11 34 views
0

因此,我有一個使用Oracle作爲數據庫平臺的.NET軟件。此軟件中的報告將調用Oracle架構中的程序,該架構將在數據庫上運行一些更新/插入/刪除/合併。Oracle - 使用SQL%ROWCOUNT進行審計目的

現在從研究我可以看到,SQL%ROWCOUNT可以用來告訴查詢將行數放在DBMS_OUTPUT中 - 但我明白這一點,如果我從查詢軟件執行這些程序將工作(即:SQL Plus,TOAD等)。

我需要找到一種方法來顯示回報告有多少行受到影響。

現在,如果我沒有遺漏一些基本的東西,我想最簡單的方法是插入到受影響的行的SQL%ROWCOUNT的審計表中,然後在過程完成其工作後用報告調用它。

因此最後:在我如何完成這件事上遇到了麻煩。

非常感謝!

UPDATE:

確定。所以,我的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** 

回答

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運行您的報告。

+0

非常感謝 - 檢查我的問題更新。你的幫助再多一點,我想我明白了。現在來調整我寫到目前爲止的一切。 :) – EkeshOkor

+0

@EkeshOkor - 太棒了,很高興我能幫上忙。如果可以的話,給我一個upvote PLZ。 :-) – tale852150

+0

當然,對不起。我一直在腦海中停留,我需要等待2天:\ - 但這隻適用於你自己的答案 – EkeshOkor