1

入力パラメーターの値に基づいて、ストアド プロシージャによって更新されるテーブルのフィールドを選択できるようにしたいと考えています。入力フィールドが 'draft' と等しい場合はid_draftを更新する必要があり、そうでない場合はidを更新する必要があります。これは可能ですか?

これは、私がやりたいことを説明するのに役立つかもしれない私の失敗した試みの 1 つです。

CREATE OR REPLACE PROCEDURE sp_test (input_field VARCHAR DEFAULT NULL)
 IS
   BEGIN
      UPDATE TABLE
      SET
        CASE
            WHEN input_field = 'draft' THEN id_draft
            ELSE id
   END = 'x'
4

1 に答える 1

2

CASE ステートメントを使用してクエリ構造自体を変更することはできません。データを返すだけで、関数です。

What you have ( ) は、フィールドまたはフィールドのCASE WHEN input_field = 'draft' then id_draft ELSE id END返します。こんなことしてるみたい…idid_draft

UPDATE
  yourTable
SET
  CASE WHEN 'abc' = 'draft' THEN 123 ELSE 789 END = 'x'

代わりに、右側に CASE ステートメントを配置する必要があります...

UPDATE
  yourTable
SET
  id       = CASE WHEN input_field = 'draft' THEN id  ELSE 'x'      END,
  id_draft = CASE WHEN input_field = 'draft' THEN 'x' ELSE id_draft END

しかし、実際には、これを行う方が良いかもしれません...

IF (input_field = 'draft')
  UPDATE yourTable SET id_draft = 'x'
ELSE
  UPDATE yourTable SET id = 'x'

編集:*

の代わりに別のテーブルの値を使用するには、次の'x'ようなものを使用できます...

UPDATE
  yourTable
SET
  id       = CASE WHEN input_field = 'draft' THEN yourTable.id  ELSE otherTable.x       END,
  id_draft = CASE WHEN input_field = 'draft' THEN otherTable.x  ELSE yourTable.id_draft END
FROM
  otherTable
WHERE
  otherTable.a=? AND otherTable.b=?
于 2012-07-12T09:01:28.793 に答える