Oracle使用同一个表的内部联接更新表的值

时间:2018-01-07 20:43:47

标签: sql oracle inner-join

我正在尝试使用此语句更新bplustree表的深度列,这在MYSQL上运行正常,但在oracle上我有这样的错误:

122
  

错误报告 -
  ORA-06550:第4行,第3栏:
  PL / SQL:ORA-00933:SQL命令未正确结束
  ORA-06550:第3行,第2栏:
  PL / SQL:忽略SQL语句
  06550. 00000 - "行%s,列%s:\ n%s"
  *原因:通常是PL / SQL编译错误。

1 个答案:

答案 0 :(得分:1)

您可以在update的帮助下合并selectmerge,如下所示:

MERGE INTO bplustree t1
USING
(
  SELECT P.depth + 1 depth, p.node_id
    FROM bplustree T INNER JOIN bplustree P
      ON (T.parent_node_id = P.node_id)    
    WHERE P.depth >= 0 AND T.depth IS NULL 
) t2
ON ( t1.node_id = t2.node_id )
WHEN MATCHED THEN UPDATE SET
t1.depth = t2.depth; 

D e m o