ORA-00913:太多值将wm_concat字符串插入表中

时间:2012-11-27 20:51:03

标签: sql oracle plsql ora-00913

当我使用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在一个字符串中连接多行;
我该如何解决?

1 个答案:

答案 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');

我希望这就是原因:)