0

非常に簡単な質問ですが、列名と値をグループ化して、このようなOracle更新ステートメントを作成することは可能ですか?

UPDATE table_name SET (column1, column2, column3) = (value1, value2, value3)

私が尋ねている理由は、大量のデータを移行するスクリプトを作成していて、挿入ステートメントには、すべての列名を含む文字列とすべての値を含む文字列があるためです。同じデータの更新ステートメントを作成する必要があり、別の形式ですべてを再度書き出す代わりの方法があるかどうか疑問に思っていました。

4

2 に答える 2

5

あなたがそれを書いたように直接ではありませんが、あなたはこのようにそれを行うことができます:

UPDATE table_name 
   SET (column1, column2, column3) = (select 1 as value1, 'foo' as value2, 'bar' as value3 from dual);

したがって、複数列の更新は、「値」の副選択を使用する場合にのみサポートされます。

また、MERGEステートメントを調べることもできます。

merge into table_name 
using
( 
   select 1 as id, 
          'foo' as value1,
          'bar' as value2
   from dual
) t on (t.id = table_name.id)
when matched then update
  set value1 = t.value1,
      value2 = t.value2
when not matched then 
   insert (id, value1, value2)
   values (t.id, t.value1, t.value2);

その行が存在する場合は更新され、存在しない場合は挿入されます。

于 2012-08-21T11:08:21.590 に答える
0

方法の 1 つは、この文字列を削除してから再度挿入することです。

于 2012-08-21T11:03:27.163 に答える