Los parámetros en los programas PL/SQL en modo
IN pasan por referencia, en cambio, los parámetros en modo
OUT o
IN OUT pasan por "valor", es decir, se hace una copia completa de la(s) variable(s)al hacer la llamada (runtime del PL/SQL). Esto implica tiempo y recursos, sobre todo cuando un programa pasa una estructura "pesada" y es llamado muchas veces. En la mayoría de los casos esto se puede mejorar usando
NOCOPY. Para mostrar esto, podemos usar una colección (arreglo en otros lenguajes) de registros y declarar una variable que será pasada como parámetro de entrada/salida (IN OUT) y tomar los tiempos de ejecución sin y con
NOCOPY
PROCEDURE parametros_x_valor (
p_productos IN OUT productos_ct
);
PROCEDURE parametros_x_referencia (
p_productos IN OUT NOCOPY productos_ct
);
Ver ejemplo:
nocopy.sql
El resultado en tiempo es:
Carga de colección con:100000 regs:Tiempo:0 segundos.
Tiempo Parámetro x Valor:Tiempo:29 segundos.
Tiempo Parámetro x Referencia:Tiempo:6 segundos.
Observación: Si un programa recibe variables por referencia y termina con error por una excepción, los valores modificados persisten en el procedimiento que efectuó la llamada y esto puede producir problemas colaterales si el proceso continúa.
No hay comentarios:
Publicar un comentario