2015-02-06 44 views
0

我試圖通過將字符串「999」更新多行一列:追加字符在多行中的Oracle SQL字符串

UPDATE integration.ol_orders 
SET order_id = ((SELECT order_id 
      FROM integration.ol_orders 
      WHERE status = 2) || '999') 
WHERE status = 2 

,但不管是什麼原因,我不斷收到「ORA-01427:單行子查詢返回多個行提示」的錯誤。

所以,當我重複我的n行,我試圖做的事:

a1 = a1 || '999' 
a2 = a2 || '999' 
a3 = a3 || '999' 
an = an || '999' 

任何建議,如何去了解呢?

編輯:改變 '+' 到 '||',仍然沒有運氣

+0

執行您的子查詢('選擇ORDER_ID FROM integration.ol_orders WHERE狀態= 2'),看看有多少行返回。 – mmmmmpie 2015-02-06 18:10:52

+0

@mmmmmpie 14行返回 – antihero989 2015-02-06 18:14:25

+1

Theres你的問題。您正試圖設置1行等於14行+'999'的輸出。 BTW'+'不是你在oracle中連接它的'||'的方式。 – mmmmmpie 2015-02-06 18:15:39

回答

5

子查詢看起來是不必要的,只是在做這應該工作:

UPDATE integration.ol_orders 
SET order_id = order_id || '999' 
WHERE status = 2 

如果我記得沒錯Oracle使用||進行連結。如果它是一個整數,可能有必要將order_id轉換爲字符類型,我不確定這一點,並且目前無法對其進行測試。 (轉換應該隱含在註釋中,否則可以使用TO_CHAR()來明確地轉換它)。

確保雖然運行前有表的備份或複製......

+0

我同意,但確認order_id不是數字很好。當然反英雄989在上面的嘗試中確實這樣對待它。 – 2015-02-06 18:19:22

+2

Oracle會將'order_id'隱式轉換爲varchar2以便應用連接。 – Allan 2015-02-06 18:21:03

+0

是的,儘管我不喜歡依賴於隱式投射。 – 2015-02-06 18:22:06