Pl / SQLを使用して、「即時実行」によって実行されるステートメントがdmlステートメントであるかどうかを確認する方法を探しています。
1160 次
2 に答える
1
クエリ文字列に「INSERT」または「UPDATE」または...が含まれているかどうかを確認するための解決策がある場合があります。
しかし、それが一般的で一貫した解決策ではないと思います。
SQLがDMLまたはDLLを呼び出す可能性のあるパッケージまたはストアドプロシージャを呼び出している場合はどうなりますか?
BEFORE / AFTER DDL TRIGERora_sysevent
に依存するか、機能を調査することができると思います
于 2013-02-25T06:38:34.423 に答える
0
SQL%ROWCOUNT で確認できると思います。例(ラフブロック、未テスト)
set serveroutput on
begin
execute immediate 'update tableA set fieldA=100';
if(SQL%ROWCOUNT > 0) then
dbms_output.put_line('DML');
end if;
end;
/
SQL%ROWCOUNT は、最新の DML によって影響を受けた行の数を返します。したがって、execute immediate によって実行されるステートメントが DML ステートメントであり、それによって何かが変更された場合、sql%rowcount は 0 より大きくなります。それ以外の場合、それが DDL の場合、SQL%ROWCOUNT を使用すると、おそらく例外が発生します (または0 に等しくなります)
于 2013-02-25T05:04:04.497 に答える