Я часами пытался найти решение этой проблемы, но так как я не могу найти, я решил спросить здесь.
Я выполняю процедуру для извлечения информации из таблицы на основе строки ROWID
, и с результатами я делаю некоторый пользовательский запрос, используя execute immediate
. Я сократил проблему до следующих строк, которые выполняю непосредственно в SQL Developer:
declare
row_id ROWID;
consulta VARCHAR2(1000);
begin
row_id := 'AAAEC5AAFAAAADHAAC';
select 'insert into ' ||
(select TABLA from BITACORA where rowid = row_id) || ' values(' ||
(select VALOR_VIEJO from BITACORA where rowid = row_id) || ')'
into Consulta from dual;
DBMS_OUTPUT.PUT_LINE(Consulta);
--execute immediate Consulta;
end;
Предыдущие строки не работают как есть. Когда я печатаю содержимое Consulta
, оно показывает:
insert into values()
но если я исключу переменную row_id
и введу ее непосредственно в такие запросы, это сработает:
declare
consulta VARCHAR2(1000);
begin
select 'insert into ' ||
(select TABLA from BITACORA where rowid = 'AAAEC5AAFAAAADHAAC') || ' values(' ||
(select VALOR_VIEJO from BITACORA where rowid = 'AAAEC5AAFAAAADHAAC') || ')'
into Consulta from dual;
DBMS_OUTPUT.PUT_LINE(Consulta);
--execute immediate Consulta;
end;
Отображение того, что я ожидал, что-то вроде:
insert into MI_TABLA values(1,'Hola','Adios',3,1)
Это не связано с работой, поэтому нет проблем с производительностью / безопасностью. Спасибо за любой отзыв.