0

wm_concat を使用して複数のタプルを 1 つのタプルに連結する場合。

例えば

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 つの文字列に連結すると思います。
どうすれば修正できますか?

4

1 に答える 1

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||')

オラクルは次のように変換します。

apr値に挿入(リンゴ、桃、バナナ、x、y、z)

また、データベースはすべてのコンマ区切りの値を列として認識しますが、テーブルには 6 列ではなく 2 列しかありません。引用符をエスケープする場合:

Insert into  apr values('''||v_name_l||''','''||v_name_b||''');

oracle は次のように表示されます。

apr 値に挿入します('リンゴ、桃、バナナ'、'x、y、z');

それが理由だったことを願っています:)

于 2012-11-27T21:40:29.483 に答える