当我使用wm_concat将几个元组连接成一个元组时。
例如
ID项目
1'苹果'
2'桃'
2'香蕉'
declare
v_name_l: varchar(100);
v_name_b: varchar(100);
begin
select wm_concat(Items) into v_name_l from Item group by ID having count(*)=1;
select wm_concat(Items) into v_name_b from Item group by ID having count(*)=2;
execute immediate ('Insert into apr values('||v_name_l||','||v_name_b||')');
end;
另一个表apr结构是
Name1 Name2
name1和nam2是varchar(100);
中出现错误
*execute immediate execute immediate ('Insert into apr values('||v_name_l||','||v_name_b||')')"
ORA-00913: too many values
我认为wm_concat在一个字符串中连接多行;
我该如何解决?
答案 0 :(得分:0)
我认为wm_concat查询没有错。你只需要逃避报价。因为您在这种情况下将查询引用为字符串,所以请说:
v_name_l 'apple, peach, banana'
且 v_name_b 为“x, y, z
”
因此,当您定义为当前查询时:
Insert into apr values('||v_name_l||','||v_name_b||')
Oracle转换为:
插入apr值(苹果,桃子,香蕉,x,y,z)
并且数据库将每个逗号分隔的值识别为列,但该表只有两列而不是6.如果您转义引号:
Insert into apr values('''||v_name_l||''','''||v_name_b||''');
然后oracle将读作:
插入apr值('apple,peach,banana','x,y,z');
我希望这就是原因:)