2017-06-13 45 views
0

我正在使用第一次命令EXECUTE IMMEDIATE,我想问你是否可以帮助我。EXECUTE IMMEDIATE更新查询变量列

我有一个变量列,因为我在互联网上搜索,发现执行即时命令,但它给了我下面的错误:

ORA-00904: "ACTUATION": invalid identifier
ORA-06512: at line 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; 
+2

构建SQL查询并打印出来。 95%的时间,错误是显而易见的。 –

回答

0

我想是这样,你必须添加更多'字符串PARAMS之间:

证明这一点,在你的代码我|| srec.old_val ||

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

谢谢!有时它很简单,你看不到问题。 – Xplosio

+0

请注意,对于像'不要这样引用它'这样的值将会失败。 –

3

尝试之间增加3 '这一个:

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

在性能和可伸缩性方面,这比接受的答案要好。 –