Les docs en ligne suggèrent pas:
http://download-east.oracle.com/docs/cd/B19306_01/appdev.102/b14261/subprograms.htm#i2884
Chaque appel récursif crée une nouvelle instance de tous les éléments déclarés dans le subprogram, y compris les paramètres, les variables , curseurs et exceptions. De même, de nouvelles instances des instructions SQL sont créées à chaque niveau dans la descente récursive.
Et:
Au moins un chemin doit conduire à une condition de terminaison . Dans le cas contraire, le récursion continuerait jusqu'à ce que PL/SQL à court de mémoire et augmente la STORAGE_ERROR d'exception prédéfinie .
Si l'optimisation des appels de queue était disponible, il ne serait pas à court de stockage (bien qu'il pourrait frapper un certain délai d'attente si vous laissez courir trop longtemps.)
Vous pouvez être en mesure de voir expérimentalement ce c'est le cas: écrivez une fonction récursive qui se termine par un appel de fin à lui-même, et observez l'utilisation de la mémoire du processus Oracle lorsque vous l'appelez, ou voyez le message d'erreur que vous obtenez. Voyez si vous pouvez le faire pendre indéfiniment sans utiliser de mémoire croissante.
J'ai codé simple factoriel et l'exécuter sur un Oracle XE en cours d'exécution sur mon poste de travail a épuisé sa mémoire virtuelle, il semble que vous aviez raison. Merci beaucoup. BTW, est-il possible d'obtenir n'importe quel type d'assembleur d'Oracle? – Samuel
Je suppose que PL/SQL est largement interprété. –
PL/SQL peut être interprété ou compilé dans des versions plus récentes. Si vous voulez vraiment obtenir un niveau bas, vous pouvez essayer de programmer en PRO * C. –