Онлайновые документы свидетельствуют: не
http://download-east.oracle.com/docs/cd/B19306_01/appdev.102/b14261/subprograms.htm#i2884
Каждый рекурсивный вызов создает новый экземпляр любых предметов, объявленных в подпрограмме, включая параметры, переменные, курсоры и исключения. Аналогично, новые экземпляры SQL-операторов создаются на каждом уровне в рекурсивном спуске.
И:
По крайней мере один путь должен привести к состоянию завершающего. В противном случае рекурсия будет продолжаться до тех пор, пока PL/SQL не исчерпает память и создает предопределенное исключение STORAGE_ERROR.
Если оптимизация хвост вызов был доступен, он не будет работать из хранения (хотя это может ударить некоторый тайм-аут, если вы позволите ему работать слишком долго.)
Вы можете быть в состоянии увидеть, что экспериментально он: записывает рекурсивную функцию, которая заканчивается хвостовым вызовом для себя, и наблюдает за использованием памяти процесса Oracle, когда вы его вызываете, или посмотрите, какое сообщение об ошибке вы получите. Посмотрите, можете ли вы заставить его вешать бесконечно без увеличения объема памяти.
Я закодировал простой факториал и выполнил его на Oracle XE, работающем на моей рабочей станции, исчерпал свою виртуальную память, поэтому кажется, что вы были правы. Большое спасибо. BTW, можно ли получить какой-либо ассемблер из Oracle? – Samuel
Я бы предположил, что PL/SQL в значительной степени интерпретируется. –
PL/SQL может быть интерпретирован или скомпилирован в более новых версиях. Если вы действительно хотите получить низкий уровень, вы можете попробовать программировать в PRO * C. –