2017-06-13 67 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

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