В онлайн-документах не рекомендуется:
http://download -east.oracle.com / Docs / кд / B19306_01 / appdev.102 / b14261 / subprograms.htm # i2884
Каждый рекурсивный вызов создает новый
экземпляр любых предметов, заявленных в
подпрограмма, включая параметры,
переменные, курсоры и исключения.
Аналогично, новые экземпляры SQL
заявления создаются на каждом уровне
в рекурсивном спуске.
И
Как минимум один путь должен привести к
Завершающее условие. В противном случае
рекурсия будет продолжаться до PL / SQL
не хватает памяти и поднимает
предопределенное исключение STORAGE_ERROR.
Если бы была доступна оптимизация хвостового вызова, она не исчерпала бы память (хотя она могла бы истечь некоторое время, если вы позволили бы ей работать слишком долго.)
Возможно, вы сможете экспериментально увидеть, что она делает: написать рекурсивную функцию, которая завершается завершающим вызовом, и наблюдать за использованием памяти процессом Oracle при его вызове, или посмотреть, какое сообщение об ошибке вы получаете. Посмотрим, сможешь ли ты заставить его висеть бесконечно, не увеличивая память.