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

Sql Oracle使用同一表的内部联接更新表的值,sql,oracle,inner-join,Sql,Oracle,Inner Join,我试图使用以下语句更新bplustree表的深度列,该语句在MYSQL上运行良好,但在oracle上出现以下错误: BEGIN WHILE EXISTS (SELECT * FROM bplustree WHERE depth IS NULL) LOOP UPDATE T SET T.depth = P.depth + 1 FROM bplustree AS T INNER JOIN bplustree AS P ON (T.p

我试图使用以下语句更新bplustree表的深度列,该语句在MYSQL上运行良好,但在oracle上出现以下错误:

BEGIN    
  WHILE EXISTS (SELECT * FROM bplustree WHERE depth IS NULL) 
  LOOP    
    UPDATE T SET T.depth = P.depth + 1
        FROM bplustree AS T INNER JOIN bplustree AS P 
        ON (T.parent_node_id = P.node_id) 
    WHERE P.depth >= 0 AND T.depth IS NULL;
  END LOOP;
END;
错误报告-
ORA-06550:第4行第3列:
PL/SQL:ORA-00933:SQL命令未正确结束
ORA-06550:第3行第2列:
PL/SQL:SQL语句被忽略
655000000-“行%s,列%s:\n%s”
*原因:通常是PL/SQL编译错误


通过
merge
的帮助,您可以组合
update
select
,如下所示:

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; 

Oracle不支持
更新
中的
FROM
子句,因此我不知道您要做什么。我试图通过在树的所有节点@GordonLinoff上运行一个循环来计算树中每个节点的深度