martes, 7 de noviembre de 2006

SQL - Crear un procedimiento almacenado

En el presente articulo veremos como crear tres tipos de procedimientos almacenados:
  1. Procedimento sin parametros.
  2. Procedimiento con parámetros de entrada.
  3. Procedimiento con parámetros de entrada y de salida. 

Nota: Los procedimientos almacenados definidos por el usuario son creados en la base de datos actual.
Procedimiento sin parámetros.

/* --------------------------------------------------------------------------------
   Autor: Mario Alberto Sanchez Gamboa
   Fecha:
   Descripcion: Procedimiento que realiza la suma de dos numeros y regresa
   el resultado mediante el uso de la sentencia SELECT.
      **Emplea declaracion de variables.
      **Asigacion de valores a variables.
      **Uso de ISNULL.- Remplaza el nulo por el valor especificado.
      **Uso de CAST.- Convierte explicitamente una expresion de un tipo de dato a otro.
      **Concatenacion de cadenas.
   -------------------------------------------------------------------------------- */
CREATE PROCEDURE spSumaSinParametros
AS
   --Declaracion de variables
   DECLARE @Numero1 FLOAT,
      @Numero2 FLOAT,
      @Resultado FLOAT,
      @Operacion NVARCHAR(25)


   --Asignacion de valores iniciales
   SET @Numero1 = 5.55
   SET @Numero2 = 15


   --Operacion.
   --Nota: Se puede hacer uso de SELECT y/o SET para la asignacion de valores a las variables.
   SELECT @Resultado = ISNULL(@Numero1, 0) + ISNULL(@Numero2, 0)
   SET @Operacion = CAST(@Numero1 AS VARCHAR) + ' + ' + CAST(@Numero2 AS VARCHAR) + ' = ' + CAST(@Resultado AS VARCHAR)


   --Realizar un select con el resultado de la operacion.
   SELECT @Numero1 AS Numero1, @Numero2 AS Numero2, @Resultado AS Resultado, @Operacion AS Operacion

GO
Para ejecutar el procedimiento almacenado empleamos la siguiente sentencia:

   EXECUTE spSumaSinParametros

Resultado:

Numero1 Numero2 Resultado Operacion
-------------------- ---------- --------------------- --------------------
5.5499999999999998 15.0 20.550000000000001 5.55 + 15 = 20.55

(1 row(s) affected)
Procedimiento con parámetros de entrada.

/* --------------------------------------------------------------------------------
   Autor: Mario Alberto Sanchez Gamboa
   Fecha:
   Descripcion: Procedimiento que realiza la suma de dos numeros
      los cuales recibe mediante parametros de entrada
      y regresa el resultado mediante el uso de la sentencia SELECT.
      **Emplea declaracion de variables.
      **Asigacion de valores a variables.
      **Uso de ISNULL.- Remplaza el nulo por el valor especificado.
      **Uso de CAST.- Convierte explicitamente una expresion de un tipo de dato a otro.
      **Concatenacion de cadenas.
   -------------------------------------------------------------------------------- */
CREATE PROCEDURE spSumaConParametros
      @Numero1 FLOAT,
      @Numero2 FLOAT
AS
   --Declaracion de variables
   DECLARE
      @Resultado FLOAT,
      @Operacion NVARCHAR(25)


   --Operacion.
   --Nota: Se puede hacer uso de SELECT y/o SET para la asignacion de valores a las variables.
   SELECT @Resultado = ISNULL(@Numero1, 0) + ISNULL(@Numero2, 0)
   SET @Operacion = CAST(@Numero1 AS VARCHAR) + ' + ' + CAST(@Numero2 AS VARCHAR) + ' = ' + CAST(@Resultado AS VARCHAR)


   --Realizar un select con el resultado de la operacion.
   SELECT @Numero1 AS Numero1, @Numero2 AS Numero2, @Resultado AS Resultado, @Operacion AS Operacion
GO
Para ejecutar el procedimiento almacenado empleamos la siguiente sentencia:

   EXECUTE spSumaConParametros 5.55, 15

Resultado:

Numero1 Numero2 Resultado Operacion
-------------------- ---------- --------------------- --------------------
5.5499999999999998 15.0 20.550000000000001 5.55 + 15 = 20.55

(1 row(s) affected)
Procedimiento con parámetros de entrada y salida.

/* --------------------------------------------------------------------------------
   Autor: Mario Alberto Sanchez Gamboa
   Fecha:
   Descripcion: Procedimiento que realiza la suma de dos numeros y regresa
      el resultado mediante el uso un parametro de salida y una sentencia SELECT.
      El valor son recibidos con parametros de entrada, y el resultado es regresado
      mediante un parametro de salida, asi como de una sentencia SELECT.
      **Emplea declaracion de variables.
      **Asigacion de valores a variables.
      **Uso de ISNULL.- Remplaza el nulo por el valor especificado.
      **Uso de CAST.- Convierte explicitamente una expresion de un tipo de dato a otro.
      **Concatenacion de cadenas.
   -------------------------------------------------------------------------------- */
CREATE PROCEDURE spSumaConParametroDeSalida
      @Numero1 FLOAT,
      @Numero2 FLOAT,
      @Resultado FLOAT OUTPUT

AS
   --Declaracion de variables
   DECLARE @Operacion NVARCHAR(25)


   --Operacion.
   --Nota: Se puede hacer uso de SELECT y/o SET para la asignacion de valores a las variables.
   SELECT @Resultado = ISNULL(@Numero1, 0) + ISNULL(@Numero2, 0)
   SET @Operacion = CAST(@Numero1 AS VARCHAR) + ' + ' + CAST(@Numero2 AS VARCHAR) + ' = ' + CAST(@Resultado AS VARCHAR)


   --Realizar un select con el resultado de la operacion.
   SELECT @Numero1 AS Numero1, @Numero2 AS Numero2, @Operacion AS Operacion
GO
Para ejecutar el procedimiento almacenado empleamos la siguiente sentencia:

   DECLARE @ParamResultado FLOAT    DECLARE @EjecucionParametro INT    EXECUTE @EjecucionParametro = spSumaConParametroDeSalida 5.55, 15, @ParamResultado OUTPUT    SELECT @ParamResultado AS Resultado, @EjecucionParametro AS EjecucionParametro

Resultado:

Numero1 Numero2 Resultado Operacion
-------------------- ---------- --------------------- --------------------
5.5499999999999998 15.0 20.550000000000001 5.55 + 15 = 20.55

(1 row(s) affected)

Resultado EjecucionParametro
--------------------- --------------------
20.550000000000001 0

(1 row(s) affected)
Si se desea comprobar la existencia de un procediento se puede hacer uso de las siguientes sentencias.

--Verificamos si el procedimiento que vamos a crear existe en la base de datos,
--en caso de que exista se procede a eliminar dicho procedimiento.
IF EXISTS (SELECT name FROM sysobjects WHERE name = 'spSumaSinParametros' AND type = 'P')
   DROP PROCEDURE spSumaSinParametros
GO
En este ejemplo verificamos si ya existe el procedimiento spSumaSinParametros, en caso de que exista se procede a eliminarlo.

59 comentarios:

Anónimo dijo...
Este blog ha sido eliminado por un administrador de blog.
Anónimo dijo...
Este blog ha sido eliminado por un administrador de blog.
Anónimo dijo...
Este blog ha sido eliminado por un administrador de blog.
Anónimo dijo...
Este blog ha sido eliminado por un administrador de blog.
Anónimo dijo...
Este blog ha sido eliminado por un administrador de blog.
Anónimo dijo...
Este blog ha sido eliminado por un administrador de blog.
Anónimo dijo...
Este blog ha sido eliminado por un administrador de blog.
Anónimo dijo...
Este blog ha sido eliminado por un administrador de blog.
Anónimo dijo...
Este blog ha sido eliminado por un administrador de blog.
Anónimo dijo...
Este blog ha sido eliminado por un administrador de blog.
Anónimo dijo...
Este blog ha sido eliminado por un administrador de blog.
Anónimo dijo...
Este blog ha sido eliminado por un administrador de blog.
Anónimo dijo...
Este blog ha sido eliminado por un administrador de blog.
Anónimo dijo...
Este blog ha sido eliminado por un administrador de blog.
Anónimo dijo...
Este blog ha sido eliminado por un administrador de blog.
Anónimo dijo...
Este blog ha sido eliminado por un administrador de blog.
Anónimo dijo...
Este blog ha sido eliminado por un administrador de blog.
Anónimo dijo...
Este blog ha sido eliminado por un administrador de blog.
Anónimo dijo...
Este blog ha sido eliminado por un administrador de blog.
Anónimo dijo...
Este blog ha sido eliminado por un administrador de blog.
Anónimo dijo...
Este blog ha sido eliminado por un administrador de blog.
Anónimo dijo...
Este blog ha sido eliminado por un administrador de blog.
Anónimo dijo...
Este blog ha sido eliminado por un administrador de blog.
Anónimo dijo...
Este blog ha sido eliminado por un administrador de blog.
Anónimo dijo...
Este blog ha sido eliminado por un administrador de blog.
Anónimo dijo...
Este blog ha sido eliminado por un administrador de blog.
Anónimo dijo...
Este blog ha sido eliminado por un administrador de blog.
Anónimo dijo...
Este blog ha sido eliminado por un administrador de blog.
Anónimo dijo...
Este blog ha sido eliminado por un administrador de blog.
Anónimo dijo...
Este blog ha sido eliminado por un administrador de blog.
Anónimo dijo...
Este blog ha sido eliminado por un administrador de blog.
Anónimo dijo...
Este blog ha sido eliminado por un administrador de blog.
Anónimo dijo...
Este blog ha sido eliminado por un administrador de blog.
Anónimo dijo...
Este blog ha sido eliminado por un administrador de blog.
Anónimo dijo...
Este blog ha sido eliminado por un administrador de blog.
Anónimo dijo...
Este blog ha sido eliminado por un administrador de blog.
Anónimo dijo...
Este blog ha sido eliminado por un administrador de blog.
Anónimo dijo...
Este blog ha sido eliminado por un administrador de blog.
Anónimo dijo...
Este blog ha sido eliminado por un administrador de blog.
Anónimo dijo...
Este blog ha sido eliminado por un administrador de blog.
Anónimo dijo...
Este blog ha sido eliminado por un administrador de blog.
Anónimo dijo...
Este blog ha sido eliminado por un administrador de blog.
Anónimo dijo...
Este blog ha sido eliminado por un administrador de blog.
Anónimo dijo...
Este blog ha sido eliminado por un administrador de blog.
Anónimo dijo...
Este blog ha sido eliminado por un administrador de blog.
Anónimo dijo...
Este blog ha sido eliminado por un administrador de blog.
Anónimo dijo...
Este blog ha sido eliminado por un administrador de blog.
Anónimo dijo...
Este blog ha sido eliminado por un administrador de blog.
Anónimo dijo...
Este blog ha sido eliminado por un administrador de blog.
Anónimo dijo...
Este blog ha sido eliminado por un administrador de blog.
Anónimo dijo...
Este blog ha sido eliminado por un administrador de blog.
Anónimo dijo...
Este blog ha sido eliminado por un administrador de blog.
Anónimo dijo...
Este blog ha sido eliminado por un administrador de blog.
Anónimo dijo...
Este blog ha sido eliminado por un administrador de blog.
Anónimo dijo...
Este blog ha sido eliminado por un administrador de blog.
Anónimo dijo...
Este blog ha sido eliminado por un administrador de blog.
Anónimo dijo...
Este blog ha sido eliminado por un administrador de blog.
Anónimo dijo...
Este blog ha sido eliminado por un administrador de blog.
Anónimo dijo...
Este blog ha sido eliminado por un administrador de blog.