Recientemente vi esta imagen que al principio me hizo reír mucho pero que realmente no es la mejor manera de depurar una aplicación.

Hoy les mostraré como depurar una aplicación que ejecuta una función de la base de datos utilizando SQL Developer.

 

Para el ejemplo utilizaré:

- Una aplicación de APEX (versión 5.1.1.00.08) con acceso al esquema HR y que ejecute la función HR.TESTING_DEBUG.

- SQL Developer (versión 4.0.2.15)

- Credenciales de los usuarios SYS y HR

- Función HR.TESTING_DEBUG.

 

Para iniciar necesitamos otorgar los siguientes privilegios, los cuales se deben ejecutar con un usuario con privilegios de DBA (Por ejemplo, SYSTEM):

GRANT DEBUG CONNECT SESSION TO HR;

GRANT DEBUG ON HR.TESTING_DEBUG to PUBLIC; 

 

Crear una conexión con el esquema HR desde SQL Developer, dar clic sobre la conexión creada y seleccionar "Remote Debug".

Asignar los parámetros por defecto para el puerto y tiempo de espera. En la dirección local usar la dirección IP donde se esta ejecutando SQL Developer.

                                                                                                                                                        

 

En APEX, ir a Taller de SQL -> Comandos SQL y ejecutar:

begin

dbms_debug_jdwp.connect_tcp('192.168.0.3',4000);

end;

* Reemplazar 192.168.0.3 por su dirección local.

 

En SQL Developer, con el esquema HR buscar la función, compilarla para debug y definir los puntos de corte (breakpoints):

Ejecutar la aplicación activando la opción Debug en la barra del desarrollador:

Esto nos mostrará la depuración en SQL Developer por cada uno de los puntos de corte que se definieron previamente. Esto nos permite visualizar el valor de cada variable y parámetro utilizados en la función de una manera mas rápida y efectiva.

La aplicación de APEX quedará en espera mientras se esta ejecutando la depuración y al terminar podremos ver el resultado de la ejecución de la función.