2017-12-28 23 views
0

1つの表に50の列があり、各列を更新する必要があります。 以下のplsqlコードを試してみてください。 (コメントの更新セクションが動作しています)。Oracleカーソルの列を動的に変更

しかし、動的に生成された列は受け付けません。 (PL/SQL:ORA-01747:無効なuser.table.column、table.columnまたはcolumnの指定) 誰も助けてくれますか?

DECLARE 
cursor udas is 
select 5109 as udaid from dual 
union all  
select 8209 as udaid from dual;   
BEGIN 
for uda in udas loop 
DECLARE 
cursor c1 is 
select 
x.item, x.uda_id, x.uda_value, x.uda_value_desc 
from 
hp2_uda_data x 
where 
x.uda_type='LOV' 
and x.uda_id=uda.udaid; 
begin  
for i in c1 loop 
begin 
/*update testtable set item_uda_5109_v=i.uda_value, 
item_uda_5109_d=i.uda_value_desc where item_code=i.item;*/ 
update testtable set 'item_uda_'||uda.udaid||'_v'=i.uda_value, 
'item_uda_'||uda.udaid||'_d'=i.uda_value_desc where item_code=i.item; 
end; 
end loop; 
commit; 
end; 
end loop; 
END; 

答えて

3

動的なコードが必要ですexecute immediate

execute immediate 
'update testtable 
set item_uda_'||uda.udaid||'_v = :b1 
     , item_uda_'||uda.udaid||'_d = :b2 
where item_code = :b3' 
using i.uda_value, i.uda_value_desc, i.item; 

あなたが報告したり、障害が発生した場合に、それをログに記録できるように、変数に動的なコードを作成すると便利です。

コードを読みやすくするための便利なテクニックとして、code indentationを調べることをおすすめします。

+0

ありがとうございました。本当に役に立ちました。 –

+1

うれしかったですが、「ありがとうございました」というコメントはSOにはお勧めできません:https://stackoverflow.com/help/someone-answers –

関連する問題