2014-09-04 47 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