SQL-эквивалент ANSI будет рекурсивным общее табличное выражение:
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
Я не 100%, если вы хотите применить условие recordstatus = 1
к началу рекурсии.
Oracle не соответствует стандарту здесь, и вы не можете использовать recursive
ключевое слово.
Так что вам нужно удалитьrecursive
из запроса выше (то же верно и для SQL Server)
Более подробную информацию о рекурсивных общих табличных выражений (так называемые «подзапрос факторинга» в Oracle) можно найти в руководство:
https://docs.oracle.com/database/121/SQLRF/statements_10002.htm#SQLRF55268
'@ CHILDID' не является допустимым PL/SQL ссылка на переменную. Где и как вы выполняете это утверждение? –
Вы уверены, что используете Oracle RDBMS, а не SQL Server. –
Я использую Oracle RDBMS – Penguen