2016-08-11 16 views
0

Итак, у меня есть программное обеспечение .NET, использующее Oracle в качестве платформы базы данных. Отчет в этом программном обеспечении будет вызывать процедуры из схемы Oracle, которые будут запускать ряд обновлений/вставок/удалений/слияний в базе данных.Oracle - использование SQL% ROWCOUNT для целей аудита

Теперь из исследования я вижу, что SQL% ROWCOUNT может использоваться, чтобы сообщить запросам указать количество строк в DBMS_OUTPUT, но так, как я понимаю, это будет работать, если я выполню эти процедуры из программного обеспечения запроса (т.е. SQL Plus, TOAD и т. д.).

Мне нужно найти способ отображения отчета о том, сколько строк было затронуто.

Теперь, если я не пропущу что-то основное, я думаю, что самый простой способ - вставить в таблицу аудита SQL% ROWCOUNT затронутых строк, а затем вызвать ее с сообщением после того, как процедуры завершили свою работу.

Итак, наконец, возникли проблемы с тем, как я мог это сделать.

Большое спасибо!

UPDATE:

Ok. Так что моя SPs была немного сложнее с курсорами, динамическим 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 - отлично, рад, что я мог бы помочь. Если бы вы могли, дайте мне взнос PLZ. :-) – tale852150

+0

конечно, извините за то. я застрял в голове, что мне нужно ждать 2 дня до этого: \ - но это применимо только к вашему собственному ответу – EkeshOkor