¿PL / SQL realiza la optimización de llamadas de cola?
-
22-07-2019 - |
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.
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.