0

有没有办法只在列更新时才更新它,而当它不在一个多列更新查询中时保持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: missing equal sign错误。

我找这个的原因是什么?我有一个运行类似上面查询的计划作业。users如果您尝试更新 'not null' ,表中还存在一个触发器,该触发器将引发错误global_id。所以当我遇到这个触发器时,我的工作失败了。

我有一个选择...将此更新查询拆分为两个.. 一个用于更新 city ,一个用于更新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')

此外,您可以将更新拆分为两句话,请记住,您可以将其包含在单个事务中:

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的第二条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 回答