Sql Oracle使用同一表的内部联接更新表的值
我试图使用以下语句更新bplustree表的深度列,该语句在MYSQL上运行良好,但在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
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上运行一个循环来计算树中每个节点的深度