2015-02-06 45 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