Crear un procedimiento (Procedure) en PL/SQL Oracle



Un procedimiento es un bloque de código que se almacena en la base de datos, y puede ser utilizado en cualquier momento para realizar un proceso específico, los procedimientos no retornan valores.

Sentencia básica:

Create or replace procedure nombre_procedimiento (variable1 ­[out in] tipo_variable) is
   --Definición de variables y cursores
Begin --Inicio del procedimiento
   --Cuerpo del procedimiento
End nombre_procedimiento; --Fin del procedimiento

En un procedimiento se pueden ejecutar varias sentencias SQL como insertar, consultar, eliminar o actualizar, los procedimientos no pueden retornar valores, pero pueden generar una salida por medio de una variable declarada como out  create procedure prueba (fecha out date).

Los procedimientos pueden ser llamados por  otros procedimientos, funciones, paquetes o bloques anónimos, los procedimientos  pueden contener más de una variable de entrada (in), de salida (out) o ambas (out in).

Ejemplo: Se necesita crear un procedimiento que pase los datos de los clientes por fechas, a la tabla clientes_old, los datos pasados deben ser eliminados de la tabla clientes.

--Creación del procedimiento
Create or replace procedure traspaso_de_clientes(fecha_inicio in date, fecha_fin in date) is
  
  Cursor cur_clientes is --Declaración del cursor
  Select *
    from clientes
  where fecha  between fecha_inicio  and fecha_fin;

Begin --Inicio del procedimiento

  For clien in cur_clientes loop --Inicia el ciclo loop
    Insert into clientes_old values (clien); --Inserta los datos en la tabla clientes
  End loop; --Fin del ciclo loop

  Delete clientes where fecha  between fecha_inicio  and fecha_fin;--Elimina los clientes traspasados

End traspaso_de_clientes; --Fin del procedimiento

 ------------------------------------------------------------------------------------

--Utilizando un bloque anónimo para llamar el procedimiento.

Begin –Inicio del bloque anónimo

  traspaso_de_clientes(‘01/01/2016’,’31/12/2016’); --Llamado al procedimiento 

End; --Fin del bloque anónimo

No hay comentarios:

Publicar un comentario