我花了几个小时试图找到解决这个问题的方法,但由于我找不到我决定在这里问。
我正在执行一个过程来根据行从表中检索信息,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)
这与工作无关,因此无需担心性能/安全性。感谢您的任何反馈。