Pregunta

Soy bastante nuevo en el lenguaje y me preguntaba si las llamadas de cola se optimizaron. En otro idioma, podría examinar el código de máquina o una representación intermedia y calcularlo por mí mismo, pero no tengo idea de cómo hacerlo en PL / SQL.

Gracias de antemano.

¿Fue útil?

Solución

Los documentos en línea sugieren que no:

http: // download -east.oracle.com/docs/cd/B19306_01/appdev.102/b14261/subprograms.htm#i2884

  

Cada llamada recursiva crea un nuevo   instancia de cualquier artículo declarado en el   subprograma, incluidos los parámetros,   variables, cursores y excepciones.   Asimismo, nuevas instancias de SQL   las declaraciones se crean en cada nivel   en el descenso recursivo.

Y:

  

Al menos un camino debe conducir a un   Condición de terminación. De lo contrario, el   la recursión continuaría hasta PL / SQL   se queda sin memoria y levanta el   excepción predefinida STORAGE_ERROR.

Si la optimización de la llamada de cola estuviera disponible, no se quedaría sin almacenamiento (aunque podría alcanzar un tiempo de espera si lo deja correr durante demasiado tiempo).

Es posible que pueda ver experimentalmente lo que hace: escriba una función recursiva que termine con una llamada a sí mismo y observe el uso de memoria del proceso de Oracle cuando lo llame, o vea qué mensaje de error obtiene. Vea si puede lograr que se cuelgue indefinidamente sin usar memoria creciente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top