2014-09-04 49 views
-4

我想做如何在'in'子句中设置字段基础?

update my_table set bool_column = id in (1,5,8);

所以这3行会获得真正的和别人虚伪。但甲骨文说:SQL command not properly ended 我该怎么做到这一点?

+0

colunm的数据类型是什么? Oracle没有布尔值。 – 2014-09-04 14:36:56

+0

'where'在哪里? :) – 2014-09-04 14:37:16

+0

@Patrick number(1,0); @david为什么我需要'where'?我想更新所有行 – piotrek 2014-09-04 14:38:14

回答

2

Update语句需要几个参数:你会被修改(在这种情况下MY_TABLE)

  • 列要修改(在这种情况下bool_column)
  • 表达式将被评估

    1. 表以匹配列类型(这里是我们遇到问题的地方)
    2. 过滤条件以限制更新行数(在这种情况下为空)

    我列出了所有的人,因为它是不太清楚是什么bool_column类型以及是否要更新所有行或仅3

    有一个在Oracle中没有布尔列,所以表达id in (1,5,8)不能转换为任何已知的数据类型。 Oracle不期望bool_column右边的布尔表达式。

    您的bool_column数据类型是number或varchar/char。所以,而不是真/假,你有1/0,'Y'/'N'或类似的东西。 我会假设你有'Y'/'N'。

    然后你的声明可能是这样的:

    update my_table set 
    bool_column = case when id in (1,5,8) then 'Y' else 'N' end 
    

    另一种选择是与1,5,8只设置行,让他们空休息(假设假):

    update my_table set 
    bool_column = 'Y' 
    where id in (1,5,8) 
    

    但是对于这个问题,你需要确保以empty/false bool_column开头。

  • 2

    你可以使用一个case声明:

    update my_table 
    set bool_column = 
         case 
         when id in (1,5,8) 
         then 1 
         else 0 
         end 
    where ... 
    

    注意,Oracle不具有布尔数据类型,所以也许你正在使用numberchar