El paquete está descompilado, quién lo compilará…

Una de las tareas que me gustaría ahorrarme cuando estoy trabajando es tener que recompilar los paquetes que se descompilan cuando compilo algo. Cuando compilas un paquete que está referenciado por otro paquete, este segundo queda inválido. Imaginad en un entorno real en el que puedes tener varias decenas de paquetes con referencias en cascada lo que pasa cuando compilas algo más o menos céntrico. Al principio tenía un script para hacer un “ALTER PACKAGE fulano COMPILE“. El problema es que esto casi es como volver a compilar el paquete, con lo cual hay más descompilaciones en cadena. Más adelante incluí en cada paquete un procedimiento como este:

PROCEDURE Compila IS
BEGIN
  NULL;
END;

Me hice un script que para llamase al procedimiento “Compila()” de cada paquete invalidado. De esta manera Oracle revalida el paquete que sin haya descompilaciones en cadena. Hoy, en mi lector de feeds casi lloro de la emoción al ver un artículo del semidiox Tom titulado Compile procedure automatically — how to avoid cascading invalidations. Qué desilusión me he llevado al leerlo. Lo único que le ha dicho al askeador es que use paquetes en lugar de procedimientos. Tendré que seguir usando mi cutrescript.

Anuncios

3 comentarios en “El paquete está descompilado, quién lo compilará…

  1. Hola Sir Garañon,
    Este problema no nada mas se presenta cuando compilas paquetes/procedimientos, si no que también cuando haces cambios a objetos referenciados por el pkg/prod. Se “supone” que Oracle recompila de manera automática el código a menos que exista un error en alguno de los pkg/procs de la cadena.
    Aunque aquí lo menciona para código nativo, funciona igual para el no nativo.

    “Recompilation is automatic with invalidated PL/SQL modules. For example, if an object on which a natively compiled PL/SQL subprogram depends changes, the subprogram is invalidated. The next time the same subprogram is called, the database recompiles the subprogram automatically.”
    http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14261/tuning.htm#sthref2283
    http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:3786863562434

Los comentarios están cerrados.