我在一个表中有50列,需要更新每列。 试试下面的plsql代码。 (评论更新部分正在运行)。
但动态生成的列不接受。 (PL / SQL:ORA-01747:无效的user.table.column,table.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;
答案 0 :(得分: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作为使代码可读的有用技巧。