miércoles, 8 de julio de 2015

Receta T-SQL No. 2-7: Interrumpir la Ejecución de un Procedimiento Almacenado

Índice

0. Introducción
1. Problema
2. Solución
2.1 Solución no. 1: Interrupción sin valor de retorno
2.2 Solución no. 2: Interrupción con valor de retorno
3. Discuión de la Solución
4. Práctica: Código T-SQL
5. Conclusiones
6. Glosario
7. Literatura & Enlaces

0. Introducción

En más de una oportunidad podríamos requerir interrumpir la ejecución de un procedimiento almacenado o batch T-SQL, por ejemplo cuando se cumplan determinadas condiciones . Veremos que la sentencia RETURN es crucial para esta tarea.

1. Problema

Requerimos de un método para la interrupción de la ejecución de un procedimiento almacenado o un batch de T-SQL.

2. Soluciones

2.1 Solución no. 1: Interrupción sin valor de retorno

En T-SQL podemos escribir una sentencia IF junto con la evaluación de un predicado. Dependiendo del valor de verdad de esta evaluación, podemos interrumpir la ejecución de las sentencias T-SQL restantes sin un valor de retorno (a razón que no puede ser requerido por la lógica que estemos implementando), o continuar normalmente con el resto del flujo ejecución de sentencias.

2.2 Solución no. 2: Interrupción con código de retorno

Podemos interrumpir la ejecución de sentencias T-SQL especificando un valor de retorno frente a la sentencia RETURN. (El valor de retorno depende específicamente de los detalles de la logíca de implementación.)

3. Discusión de la Solución

Contamos con la sentencia RETURN [2] para la interrupción de una consulta T-SQL o procedimiento almcenado (este tema lo ahondaremos más adelante). Su sintaxis de uso es la siguiente:

RETURN [ integer_expression ]

Notemos aquí que la expresión integer_expression es opcional (para el caso de la solución no. 1).

4. Práctica: Código C#

4.1 Solución no. 1

En este primer ejemplo (adaptado de [1]) escribimos una sentencia IF que evalua la no existencia de un producto con el color lightblue.


En las líneas 1-4 evaluamos si un producto no existe con la siguiente sentencia SELECT:

SELECT ProductID
FROM Production.Product
WHERE Color = 'lightblue')


Un producto con este color no existe en la tabla Product. (Se ha especificado este valor con clara intención.)

Cuando ejecutamos esta sentencia en Microsoft SQL Server Management Studio:


Command(s) completed successfully.

4.2 Solución No. 2

Aunque no hemos estudiado aún los procedimientos almacenados, procederemos a crear el siguiente ejemplo para demostrar el uso de RETURN con valor de retorno.

En las líneas 1-9 creamos el procedimiento almacenado ReporteLightBlue. A diferencia de la solución anterior, en este caso RETURN retorna un valor de retorno, 0, para indicar que ningún producto de color lightblue fue encontrado en la base datos.


Una vez creemos el procedimiento almacenado, declaramos la variable entera @ValorResultado, y sobre esta variable almacenamos el valor devuelto después de la ejecución de ReporteLightBlue. Finalmente, en la línea 14 usamos la sentencia PRINT para imprimir el valor de @ValorResultado:

0

5. Conclusiones

Hemos estudiado la sentencia RETURN para interrumpir la ejecución de un grupo de sentencias T-SQL y de un procedimiento almacenado. Vimos que es posible usar dos versiones de RETURN: sin valor de retorno (solución no. 1) y con valor de retorno (solución no. 2).


La siguiente receta T-SQL estará orientada al uso de la sentencia GOTO para realizar saltos a determinadas ubicaciones etiquetadas sentencias T-SQL.

6. Glosario

  • Batch
  • Procedimiento
  • Sentencia
  • Valor de retorno

7. Literatura & Enlaces

[1]: SQL Server 2012 T-SQL Recipes - A Problem-Solucion Approach by Jason Brimhall, David Dye, Jonathan Gennick, Andy Roberts, and Wayne Sheffield. Copyright 2012 Jason Brimhall, David Dye, Jonathan Gennick, Andy Roberts, and Wayne Sheffield, 978-1-4302-4200-0.
[2]: RETURN (Transact-SQL) - https://msdn.microsoft.com/en-us/library/ms174998.aspx
[3]: Procedimiento almacenado - Wikipedia, la enciclopedia libre - https://es.wikipedia.org/wiki/Procedimiento_almacenado


M

No hay comentarios:

Publicar un comentario

Envíe sus comentarios, dudas, sugerencias, críticas. Gracias.