Его немного сложно, проверьте, работает ли он для вас
select a.id,if(a.parent = 0,@varw:=concat(a.id,','),@varw:=concat(a.id,',',@varw)) as list from (select * from recursivejoin order by if(parent=0,id,parent) asc) a left join recursivejoin b on (a.id = b.parent),(select @varw:='') as c having list like '%19,%';
Ссылка на скрипт SQL http://www.sqlfiddle.com/#!2/e3cdf/2
Замените имя поля и таблицы соответствующим образом.
Пожалуйста, попробуйте изменить имя вашего параметра IN
, чтобы он не конфликтовал с именами столбцов:
FUNCTION Check_rec(pn IN VARCHAR2) RETURN NUMBER IS v_count NUMBER;
BEGIN
SELECT COUNT(PartnerNumber) INTO v_count
FROM BusinessPartner
WHERE PartnerNumber = pn AND code IS NOT NULL;
RETURN v_count;
END;
Я не знаю правил, которые Oracle будет использовать для разрешения вашей текущей ситуации, но даже если бы это можно было заставить работать, вероятно, было бы лучше просто избежать этого.