0

ある場合にのみ列を更新し、1 つの複数列更新クエリに含まれnullていない場合はそのままにしておく方法はありますか? null以下のようなもの。(select ステートメントで case を使用する方法と同様)

UPDATE users  SET users.city = 'Dallas',
      CASE
          WHEN users.Global_id IS NULL
          THEN
              users.Global_id = '123'
      END WHERE userid = '12312312'

上記の更新ステートメントは、ORA-00927: 等号がありませんというエラーをスローします。

これを探している理由は? 上記と同様のクエリを実行するスケジュール ジョブがあります。usersまた、 'not null' を更新しようとするとエラーが発生するトリガーもテーブルに存在しますglobal_id。したがって、このトリガーに遭遇すると、私の仕事は失敗します。

この更新クエリを 2 つに分割するオプションが 1 つあります。1 つは都市を更新し、もう 1 つはglobal_idwhereを更新しglobal_id is nullます。

しかし、これが他の方法で達成できるかどうか疑問に思っています...どんなアイデアでもいただければ幸いです。

4

3 に答える 3

1

いくつかのオプションがありますが、コードに最も近いものは次のとおりです(再フォーマットされ、冗長なコンテンツが削除されています)。

UPDATE users SET
    city = 'Dallas',
    Global_id = 
        CASE 
            WHEN Global_id IS NULL THEN '123' 
            ELSE Global_id
        END
WHERE userid = '12312312';

ただし、これはcoalesce()関数のより簡潔な使用と同等です。

...
    Global_id = COALESCE(Global_id, '123')
...
于 2012-11-19T18:11:55.873 に答える
0

合体機能を使用できます:

UPDATE users  
SET 
   users.city = 'Dallas',
   users.Global_id = coalesce( users.Global_id, '123')

また、更新を 2 つの文に分割することもできます。1 つのトランザクションにまとめることはできないことに注意してください。

UPDATE users  
SET 
   users.city = 'Dallas';

UPDATE users  
SET 
   users.Global_id = '123'
WHERE
    users.Global_id is null
于 2012-11-19T18:02:24.283 に答える
0

この列名が更新されていないとしましょうcity

(UPDATE users SET city = 'Dallas' WHERE Global_id = your_variable_of_user 
                                 AND   city    = "" )  // it means it null here. 

グローバル ID の 2 番目の sql

(UPDATE users SET city = 'Dallas' WHERE Global_id = 0 
                                 AND   city    = "" )  // it means it null here. 
  • user_id は、使用するユーザー ID の列名です
  • global_id が更新されるということですか? global_id が 0 の場合、ゲストがログインしていないことを意味するため、どのように更新しますか? ただし、 PDO を使用することをお勧めします。それがあなたを助けることを願っています
于 2012-11-19T18:16:34.700 に答える