PLS-00123: program too large (Diana nodes)

Tengo una duda que no he conseguido resolver,

Tengo un fichero .sql que contiene un bloque begin – end, a grandes rasgos tiene esto:

Declare
[ Variables….. ]
Begin
[ Sentencias con Insert, Delete y Update sobre tablas creadas en una Base Datos Oracle 11]
End

Al ejecutar desde sqlplus dicho fichero, @fichero.sql, me devuelve el siguiente error:

PLS-00123: program too large (Diana nodes)

Lo he solucionado partiendo el script en varios bloques begin…. End, en lugar de tenerlo todo en un solo bloque, pero me gustaría saber
El motivo del error, es por el tamaño del fichero, por algún parámetro específico de ORACLE…. ¿?

A ver si alguien me lo soluciona.

3

3 respuestas

Respuesta
1

Pueden ser varios problemas causados por la configuración de Oracle, desde un timeout hasta un máximo de tamaño del código. Te recomiendo buscar el fichero de inicialización/parametrización de arranque de la BBDD y ver variables relacionadas y cambiarlas a tu interés.

La solución concreta la tienes aquí:

https://docs.oracle.com/cd/B19306_01/appdev.102/b14261/limits.htm 

Respuesta
1

Echa un vistazo a esto:

http://stackoverflow.com/questions/4956670/pls-00123-program-too-large-diana-nodes-while-trying-to-compile-a-package 

Básicamente nos dice que 64kb es el tamaño máximo para un bloque. Si lo ejecutas en modo debug el tamaño máximo es menor.

Respuesta
1

Si es limitante del lenguaje base de PL/SQL, tal como mencionas que lo solucionaste es lo correcto, este link lo explica mejor:

http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/limits.htm#LNPLS018 

tiene que haber algo más, ese mismo script lanzado de la misma forma en 2 bases de datos distintas ambas con Oracle 11, en una no da problemas y en la otra da el error del Diana Nodes, por eso sospecho que el problema pueda estar relacionado con algún parámetro específico de configuración de la BD o de la versión de sqlplus donde ejecuto el script, no sé..., hasta puede que tenga que ver el SO de la máquina donde esté montada la BD.

Se me ocurre que pudiera ser el nivel de DEBUG que tiene definida cada Base, al estar habilitado el parámetro de debug de PL/SQL internamente utiliza mayor tamaño para validar el script a ejecutar, lo que pudiera estar generando el error en una si y en la otra no, verifica los siguientes parámetros en ambas bases PLSQL_DEBUG o el PLSQL_OPTIMIZE_LEVEL

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas