24.11.2011

DSQL: EXECUTE IMMEDIATE

Напишем процедуру вставки в таблицу из предыдущего поста.
Имя таблицы и значения передаются через параметры.
create or replace procedure Alex.DSQL_TEST1(p_table varchar2,
pV1 number,
pV2 varchar) is
--делаем автономную транзакцию в процедуре
pragma autonomous_transaction;
sql_str varchar2(255);
begin
--запрос собираем конкатенацией строк (имя таблицы)
--и переменными привязки (значения)
select 'insert into ' || p_table || ' values(:pV1, :pV2)'
into sql_str
from dual;
execute immediate sql_str
using pV1, pV2;
dbms_output.put_line('Inserted: ' || sql%rowcount);
commit;
end;
Вызов:
SQL> exec Alex.Dsql_Test1('Alex.I1', 1000010, 'test_str');
PL/SQL procedure successfully completed
---
Inserted: 1

Комментариев нет :