Si aprendes a crear parámetros por defecto en tus PL-SQL Procedures en Oracle podrás solucionar algún tipo de problema que ocurra en un procedimiento en particular sin afectar a los demás procesos que también lo están ocupando, es decir, si para solucionar un problema necesitas agregar un nuevo parámetro a un Procedure que está siendo ocupado por otros procesos, debes modificar también los otros procesos que ocupan el Procedure para agregar el nuevo parámetro, pero si creas un parámetro por defecto no necesitas hacer esos cambios en tus PL-SQL Procedures en Oracle.
En los PL-SQL Procedures en Oracle los parámetros por defecto solo se pueden definir como parámetros de entrada y se deben colocar al final de la lista de parámetros. Revisemos un ejemplo para que entiendas mejor como se deben usar los parámetros por defecto en tus PL-SQL Procedures en Oracle.
Ejemplo #1: Supone que tienes un procedimiento almacenado al que le debes agregar un nuevo parámetro que solo será enviado desde un lugar, pero el procedimiento está siendo ocupado también por otros procesos. Veamos primero la forma tradicional y luego usando el parámetro por defecto:
Procedimiento original.
/* PL-SQL Procedures en Oracle */
Procedure Prc_Validar_Empleado( pin_id_empleado in number,
pin_rut in number,
pst_nombre in varchar2
) Is
Begin
< Validar los datos del empleado … >
End Prc_Validar_Empleado;
El procedimiento original prc_validar_empleado contiene 3 parámetros de entrada.
Agregar parámetro de forma tradicional.
/* PL-SQL Procedures en Oracle */
Procedure Prc_Validar_Empleado( pin_id_empleado in number,
pin_rut in number,
pst_nombre in varchar2,
pin_edad in number
) Is
Begin
< Validar los datos del empleado … >
End Prc_Validar_Empleado;
Se agrega el cuarto parámetro pin_edad de forma tradicional.
Primera llamada tradicional del procedimiento.
/* PL-SQL Procedures en Oracle */
Procedure prc_ingreso_emp(pin_rut in number) is
lin_edad number:= 30;
Begin
Prc_Validar_Empleado(lin_id_empleado,pin_rut,lst_nombre,lin_edad);
End prc_ingreso_emp;
En la primera llamada se agrega el nuevo parámetro lin_edad al procedimiento prc_validar_empleado.
Segunda llamada tradicional del procedimiento.
/* PL-SQL Procedures en Oracle */
Procedure prc_modificar_emp(pin_rut in number) is
lin_edad number:= 0;
Begin
Prc_Validar_Empleado(lin_id_empleado,pin_rut,lst_nombre,lin_edad);
End prc_modificar_emp;
En la segunda llamada el nuevo parámetro lin_edad se envía con el valor cero al procedimiento prc_validar_empleado, si no se envía el parámetro el proceso no se compila.
TÚ REPORTE: “Cómo Construir un SELECT Eficiente en ORACLE en Solo 7 Pasos”
Agregar parámetro con valor por defecto.
/* PL-SQL Procedures en Oracle */
Procedure Prc_Validar_Empleado( pin_id_empleado in number,
pin_rut in number,
pst_nombre in varchar2,
pin_edad in number default 0
) Is
Begin
< Validar los datos del empleado … >
End Prc_Validar_Empleado;
Se agrega el parámetro pin_edad con el valor cero por defecto.
Primera llamada del procedimiento con parámetro por defecto.
/* PL-SQL Procedures en Oracle */
Procedure prc_ingreso_emp(pin_rut in number) is
lin_edad number:= 30;
begin
Prc_Validar_Empleado(lin_id_empleado,pin_rut,lst_nombre,lin_edad);
End prc_ingreso_emp;
En la primera llamada se envía el parámetro lin_edad con el valor 30.
Segunda llamada del procedimiento con parámetro por defecto.
/* PL-SQL Procedures en Oracle */
Procedure prc_modificar_emp(pin_rut in number) is
Begin
Prc_Validar_Empleado(lin_id_empleado,pin_rut,lst_nombre);
End prc_modificar_emp;
En la segunda llamada no es necesario enviar el parámetro lin_edad, ya que si no se envía el procedimiento asume cero como valor por defecto. De esta forma modificas solo la llamada al procedimiento que debe enviar el parámetro y no todas las llamadas que existan en tus PL-SQL Procedures en Oracle.
Te propongo que pruebes de inmediato este ejemplo en tu Base de Datos con tus propios PL-SQL Procedures en Oracle y PL-SQL Function en Oracle, para que comiences a ejercitar la mano y aprendas a dominar esta nueva técnica en tus PL-SQL Packages en Oracle.
Estoy muy interesado en conocer tu opinión y/o comentario sobre este artículo, también cuéntame sobre qué es lo que quieres saber de PL-SQL Procedures en Oracle y/o dime cuál es tu principal frustración a la hora de trabajar con PL-SQL Procedures en Oracle. Estaré muy atento respondiendo tus preguntas y/o comentarios, gracias.
Saludos
Roberto Vicencio – Escritor del Reporte:
“Cómo Construir un SELECT Eficiente en ORACLE en Solo 7 Pasos”
buenos dias, he realizado un script, y ahora necesitaria volcar su resultado a una planilla excel, de que manera podria hacerlo, donde puedo obtener informacion acerca de este tipo de manejos.Con el comando utl_file, me da un error de privilegios.
Hola Ariel, gracias por comunicarte, la forma de hacerlo es usando el utl_file, si tienes problemas de privilegios debes hablar con tu DBA para que le de permisos a tu usuario para que pueda accesar la carpeta que estas usando.
PD: Ya te inscribiste para para mi Seminario de próximo sábado 30, sobre “Cómo Implementar Paso a Paso un SELECT de Múltiples Tablas”, si aun no lo has hecho puedes entrar desde aqui:
Seminario “Select de Múltiples Tablas”
Saludos
Roberto Vicencio – Para Tu Éxito con Oracle.
Hola Admin. Soy begginer en Oracle. Actualmente debo analizar un paquete que incluye el uso de PL-SQL Procedures en Oracle. Dentro del paquete veo el siguiente statement ¨PROCEDURE name;¨ Mi confusión viene con la palabra PROCEDURE.. Estoy creando un nuevo Stored Procedure? qué significa o hace? Leyendo tu post (el único serio que he encontrado), entiendo que se trata de una palabra reservada utilizada para llamar un procedimiento que imagino ya debió estar creado, el cual puede recibir valores por medio de los parámetros por defecto… Pero es todo. Si puedes aclararme, sería feliz.! Gracias de antemano.
Hola Raquel, gracias por comunicarte, estas en lo correcto la palabra reservada Procedure identifica los procedimientos almacenados que están creados en la Base de Datos, para crear un procedimiento nuevo usas create procedure nombre_procedure(parametros);, para ejecutar un procedure usas nombre_procedure(parametros);.
PD: Ya pudiste ver mi libro reporte sobre ‘Cómo Crear un SELECT Eficiente en ORACLE en Solo 7 Pasos’, si aun no lo tienes en tus manos puedes obtenerlo gratis desde aquí: https://dominatuspackagesen0racle.com/
Saludos
Roberto Vicencio – Para Tu Éxito con Oracle.
Tengo un Package con un SP que debe tener quedar parametrizado por default, este SP tiene además una variable output [p_errormsg in out varchar2]. He agregado la especificación en cabecera y cuerpo del package, pero me esta dando error, mi consulta es si en el Package existe diferencia con el SP y si la variable de salida puede estar provocando el error. Saludos y gracias por compartir!