2017-12-28 32 views
0

하나의 테이블에 50 개의 열이 있고 각 열을 업데이트해야합니다. 아래의 plsql 코드를 시도해보십시오. (주석 처리 된 업데이트 섹션이 작동 중입니다).오라클 커서의 동적 변경 열

하지만 동적으로 생성 된 열을 수락하지 않습니다. (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

도움이 되니 기쁘지만 "감사합니다"라고하는 코멘트는 실망하고 있습니다. https://stackoverflow.com/help/someone-answers –