create or replace procedure
alter_table(eng_name in varchar2,chi_name in varchar2)
as
begin
execute immediate 'alter table xxxxx add '||'"'||eng_name||'"'||'number';
execute immediate 'merge into xxxxx d
using(select decode(report_item_name,'||chi_name||',test_result,null) as a from yy) f
on(1=1)
when matched then
update set d.'||eng_name||'=f.a';
commit;
end alter_table;
call alter_table('a','细胞');
//执行完这个过程后,表结构倒是修改了(即alter table xxxxx add a number执行成功),但是字段a的值没有更新进去,全是null,求教各位大神,我的代码哪里有问题,需要修改,拜谢!
------解决思路----------------------
缺少引号
decode(report_item_name,'
------解决思路----------------------
chi_name
------解决思路----------------------
',test_result,null)
改为
decode(report_item_name,'''
------解决思路----------------------
chi_name
------解决思路----------------------
''',test_result,null)
------解决思路----------------------
解决这种问题的方法是你先将要执行的SQL语句打印出来,看有没有语法错误,因为你拼接的过程中很容易出错。其实你第一个语句就有问题,我帮你全部修改了一下,我试过,可以执行。
create or replace procedure alter_table(eng_name in varchar2,
chi_name in varchar2) as
l_str1 varchar2(1000);
l_str2 varchar2(1000);
begin
l_str1 := 'alter table xxxxx add '
------解决思路----------------------
eng_name
------解决思路----------------------
' number';
dbms_output.put_line(l_str1);
execute immediate l_str1;
l_str2 := 'merge into xxxxx d
using(select decode(report_item_name,'
------解决思路----------------------
''''
------解决思路----------------------
chi_name
------解决思路----------------------
''''
------解决思路----------------------
',test_result,null) as a from yy) f
on(1=1)
when matched then
update set d.'
------解决思路----------------------
eng_name
------解决思路----------------------
'=f.a';
dbms_output.put_line(l_str2);