Нет необходимости конвертировать в VARCHAR2 для вашей числовой модели (хотя, как указывалось другими, вы можете добиться лучших и стабильных результатов с помощью явного смоделированного столбца parent_id).
Чтобы получить все строки с прямым или косвенным родителем используют этот запрос
select par.codes parent_codes, cld.codes, cld.rate
from a par
join a cld
on par.codes < cld.codes and
par.codes = trunc(cld.codes / power(10,ceil(log(10,cld.CODES)) - ceil(log(10,par.CODES))))
PARENT_CODES CODES RATE
------------ ---------- ----------
123 12334 ,33
Обратите внимание, что ceil(log(10,cld.CODES))
- это число цифр в коде. Вы вычисляете разницу в количестве цифр между дочерним кодом и родительским кодом и получаете power
из 10.
Это дает, например, 100 для 12345
и 123
.
Результат используется для разделения дочернего кода, и вся часть деления (после trunc
) сравнивается с родительским кодом. Если они совпадают, у дочернего кода есть родитель.
Вы также можете рассмотреть этот расчет как технико-экономическое обоснование вашей модели