Paquete oracle

Hola, por favor una ayuda. Existe alguna instrucción que permita modificar solo una función que esta dentro de un paquete ORACLE, por ejemplo el pkg_Operaciones contiene las funciones SUMAR Y RESTAR. Y necesito modificar solo Restar, ¿Cómo puedo hacerlo? Gracias

1 respuesta

Respuesta
1
No entiendo el porque no quieres modificar el paquete si esté tiene incluida una nueva función o procedimiento y que e incluso puede usar variables globales del paquete.
Si lo dices, porque al modificarlo, crees que tienes que borrarlo, y con ello pierdes las dependencias, o se descompilan otros 'package, es / funciones o procedimientos que lo usan, no es así.
Simplemente modifícalo y haz :
Create or replace ...
Y luego :
ALTER PACKAGE my_package COMPILE;
ALTER PACKAGE my_package COMPILE BODY;
Si crees que algun objeto se ha quedado en estado de 'INVALID' Verificalo con :
SELECT owner,
object_type,
object_name,
status
FROM dba_objects
WHERE status = 'INVALID'
AND object_type in ('PACKAGE', 'PACKAGE BODY', 'FUNCTION', 'PROCEDURE', 'TRIGGER', 'VIEW')
ORDER BY owner, object_type, object_name;
Si detectas alguno, puedes utilizar esta misma sentencia para hacerte un 'script' dinámico donde haga 'ALTER ...'.
O si tienes un usuario con ciertos privilegios ... puedes utilizar :
EXEC UTL_RECOMP.recomp_serial('');
o
EXEC UTL_RECOMP.recomp_parallel(, '');
Un Saludo
NOTA : Piensa que por definición un 'PACKAGE' es eso mismo, un paquete de funciones y procedimientos. Y en principio no se puede realizar lo que pides. Sino que debes de aplicarlo a todo conjuntamnete.
Gracias por responder.. el problema que tengo es que el paquete tiene muchas funciones y 3 personas deben hacer modificaciones en algunas de ellas (las funciones que sean de su propiedad). Por organización se desea tener un único paquete pero resulta complicado la administaración de este, no exite una instrucción como por ejemplo.. replace my_package. function?
De nuevo muchas gracias.
NO. No existe en las versiones que conozco, y además como el propio nombre indica : 'PAQUETE' (Grupo de Procedimientos y funciones).
Tal vez lo que necesitarías es una herramienta de versionado. Donde puedes crear 'ramas' -una por cada programador que toque las funciones- y luego fusionarlas en una versión determinada. Para ello, lo normal es utilizar actualmente una herramienta de versionado llamada 'Subversion'. Y si trabajáis en entorno Windows, os recomiendo 'Tortoise' (Tortuga') que es un plug-in que queda en el navegador o explorador de ficheros.
Si no ... divide y vencerás ...
Crea el paquete o 'package' y define las funciones de cada uno en sus package concretos.
Asi creas un package generico que lo único que hace es de capa para llamar a las funciones unitarias o compuestas en 'packages' de los diversos propietarios.
Espero que entienda la idea. Sobre todo está última. (Si buscas un 'performance' bueno en exceso, esta solución de 'capa' disminuye un poco el rendimiento, pero apenas has de notarlo).
Ej. :
Package_principal (PK_P) : compuesto por F1, F2 y F3.
Imaginemos que a los responsables les decimos que sus funciones las tengan en el package USU1. F1, USU2. F2 i USU3. F3.
El Packages principal seria este :
PK_P que tiene la función F1 y que eso lo llama a USU1. F1, la función F2 que solo llama a USU2.F2, ..., etc.
¿Entiendes?
También se podría hacer con usuarios propietarios y concesión de roles ... pero sería más complicado de administrar.
Un Saludo
NOTA : Ademas, si es una única package, es ... ¿las funciones que dices que pertenecen a distintos responsables no utilizan variables globales del packages? ¿Al igual que la definición de cada una de sus especificaciones?

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas