Oracle:检查dml语句

时间:2013-02-24 23:28:17

标签: sql oracle plsql dml

我正在寻找一种使用Pl / SQL的方法来检查由'Execute immediate'执行的语句是否是dml语句。

2 个答案:

答案 0 :(得分:1)

可能有一个解决方案来检查查询字符串是否包含“INSERT”或“UPDATE”或...
但我认为这可能不是一般和一致的解决方案 如果sql正在调用可能调用DML或DLL的包或storprocedure,该怎么办? 我想您可以转发BEFORE / AFTER DDL TRIGER或调查ora_sysevent功能

答案 1 :(得分: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)