如何将pl/sql代码转换为Ansi sql?

如何将pl/sql代码转换为Ansi sql?,sql,oracle,recursive-query,ansi-sql,connect-by,Sql,Oracle,Recursive Query,Ansi Sql,Connect By,对于sql专家来说,我的问题可能并不具有挑战性。我想将我的sql重写为ansi sql。如何在Oracle中将下面的sql更改为ansi sql select * from TEST r start with r.childid=@CHILDID connect by prior r.PARENTID=r.childid and r.recordstatus=1 ANSI SQL等价物将是递归公共表表达式: with recursive tree as ( select *

对于sql专家来说,我的问题可能并不具有挑战性。我想将我的sql重写为ansi sql。如何在Oracle中将下面的sql更改为ansi sql

select * 
from TEST r
start with r.childid=@CHILDID 
connect by prior r.PARENTID=r.childid and r.recordstatus=1

ANSI SQL等价物将是递归公共表表达式:

with recursive tree as (
   select * 
   from test
   where childid = .... --<< this is the START WITH part
   union all
   select child.* 
   from test child
     join tree parent ON child.parentid = parent.childid and child.recordstatus = 1  --<< this is the CONNECT BY part
) 
select *
from tree
如果您还想将recordstatus=1条件应用于递归开始,那么我不是100%

Oracle不符合此处的标准,并且不允许使用递归关键字

因此,您需要从上面的查询中删除递归,对于SQL Server也是如此

有关Oracle中称为子查询因子分解的递归公共表表达式的更多详细信息,请参阅手册:


@CHILDID不是有效的PL/SQL变量引用。您在何处以及如何运行此语句?您确定您使用的是Oracle RDBMS而不是SQL Server。我使用的是Oracle RDBMS您是否希望使用ISO/ANSI定义的ANSI SQL,或者您是否正在迁移到特定的dbms,例如MS SQL Server?注意:如果OP正在移动到SQL Server,如@for参数可能暗示的那样,然后SQL Server不支持这种语法,但支持这种想法,它只要求省略递归关键字。@hvd:Penguen特别要求ANSI SQL,递归关键字是标准要求的。我知道,我并不是说你的回答对于OP实际提出的问题是错误的。但是,我怀疑OP问错了问题。它会导致缺少关键字错误。在下面画一棵树。我猜递归treeC:\ProgramFilesx86\plsqldeveloper\plsqldev.exe有问题