Sql 使用变量列执行即时更新查询

Sql 使用变量列执行即时更新查询,sql,oracle,dynamic-sql,Sql,Oracle,Dynamic Sql,我第一次使用命令executeimmediate,我想问您是否可以帮助我 我有一个变量列,因为我在internet上搜索并找到了EXECUTION IMMEDIATE命令,但它给出了以下错误: ORA-00904:“启动”:无效标识符 ORA-06512:在第9行 我真的很困惑,因为驱动是“old_val”列而不是“column_name”列,也许你能帮我。代码如下: declare cursor such is select column_name, old_val, CTN.ID from

我第一次使用命令executeimmediate,我想问您是否可以帮助我

我有一个变量列,因为我在internet上搜索并找到了EXECUTION IMMEDIATE命令,但它给出了以下错误:

ORA-00904:“启动”:无效标识符
ORA-06512:在第9行

我真的很困惑,因为驱动是“old_val”列而不是“column_name”列,也许你能帮我。代码如下:

declare
cursor such is 
select column_name, old_val, CTN.ID from abc.firsttable
ctn, def.secondtable#CC ctncc
where CTN.bup#rev = CTNCC.bup#rev
and ID in (127605689)
and CTN.bup#changefrom > to_date ('08/06/2017', 'dd/MM/YYYY');
begin
for srec in such loop 
EXECUTE IMMEDIATE
'update firsttable ctn2
set ctn.' || srec.column_name || ' = '|| srec.old_val ||' 
where CTN2.ID = '|| srec.id;
end loop; 
end;

我想是的,您必须在字符串的参数之间添加更多的

显示这一点,在您的代码中,我在
|srec.old|u val |

EXECUTE IMMEDIATE
'update firsttable ctn2
set ctn.' || srec.column_name || ' = '''|| srec.old_val ||'''
where CTN2.ID = '|| srec.id;
end loop; 
end;

我想是的,您必须在字符串的参数之间添加更多的

显示这一点,在您的代码中,我在
|srec.old|u val |

EXECUTE IMMEDIATE
'update firsttable ctn2
set ctn.' || srec.column_name || ' = '''|| srec.old_val ||'''
where CTN2.ID = '|| srec.id;
end loop; 
end;
试试这个:

EXECUTE IMMEDIATE
   'update firsttable ctn2
    set ctn.' || srec.column_name || ' = :OldVal 
    where CTN2.ID = :id' 
using srec.old_val, srec.id;
试试这个:

EXECUTE IMMEDIATE
   'update firsttable ctn2
    set ctn.' || srec.column_name || ' = :OldVal 
    where CTN2.ID = :id' 
using srec.old_val, srec.id;

构造SQL查询并将其打印出来。95%的情况下,错误是明显的。构造SQL查询并打印出来。95%的情况下,错误是显而易见的。谢谢!有时它很简单,你看不出问题所在。注意,对于
这样的值,这将失败。不要像这样引用它
谢谢!有时它很简单,你看不出问题所在。注意,对于
这样的值,这将失败。不要像这样引用它
这在性能和可伸缩性方面比公认的答案要好。在性能和可伸缩性方面,这比公认的答案要好。