Вам действительно нужно динамически изменять SQL, или вы просто хотите получить количество измененных строк?Если вам нужно только количество измененных строк, то SQL%ROWCOUNT
может обеспечить следующее:
create table temp as
select 1 a, 'orange' b from dual;
declare
v_sql varchar2(32767) := q'[update temp set b='apple' where a=1]';
begin
execute immediate v_sql;
dbms_output.put_line('Rows updated: '||sql%rowcount);
end;
/
Вывод:
Rows updated: 1
Если вам действительно нужно динамически изменить SQL,тогда ты в мире боли.Правильный синтаксический анализ SQL на 100% практически невозможен, если только вы не можете гарантировать, что ваш входной SQL будет соответствовать небольшому диапазону значений.
Если вам нужно проанализировать и переформатировать SQL, надеюсь, вы сможете использовать регулярные выражения, как в Tejashответ.Если вам нужно что-то более мощное, взгляните на мою программу с открытым исходным кодом PLSQL_LEXER .Если вам все еще нужно больше энергии, взгляните на Antlr.Но по мере того, как решения становятся более мощными, они экспоненциально усложняются.