no Oracle você pode analisar uma consulta antes de executá-la
declare
l_theCursor integer default dbms_sql.open_cursor;
begin
dbms_sql.parse( l_theCursor, 'SELECT 1 FROM DUAL', dbms_sql.native );
end;
o que é uma boa prática de qualquer maneira, pois você receberá seu SQL da entrada do usuário. se a declaração não for válida, você receberá a mensagem de erro apropriada. Claro que a instrução não é executada pelo acima.
Depois de analisar a instrução, você pode consultar v$sql para descobrir o command_type:
select command_type, sql_text
from v$sql t
where sql_text = 'SELECT 1 FROM DUAL';
Os vários command_types são assim:
2 -- INSERIR
3 -- SELECIONE
6 -- ATUALIZAÇÃO
7 -- EXCLUIR
189 -- FUSÃO
você pode obter a lista completa
select * from audit_actions order by action
Espero que ajude :)