缺少引号
decode(report_item_name,'||chi_name||',test_result,null)
改为
decode(report_item_name,'''||chi_name||''',test_result,null)
decode(report_item_name,'||chi_name||',test_result,null)
改为
decode(report_item_name,'''||chi_name||''',test_result,null)
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);
execute immediate l_str2; commit;
end alter_table;
如果传入的字段名eng_name中存在特殊字符,如 - / \等,你这个就报错了,而楼主拼接的语句将字段用双引号引起来了,进行转义,是不报错的
update set d.'||eng_name||'=f.a
如果传入的字段名eng_name中存在特殊字符,如 - / \等,你这个就报错了,而楼主拼接的语句将字段用双引号引起来了,进行转义,是不报错的
是不会报错,但是将列名加入特殊字符不是在给自己挖坑吗?不管从后期使用和维护都可能导致出问题,很简单的后面的merger就出问题了