Unidad 9. Programación en TRANSACT SQL (V)


9.5. Instrucciones de control de flujo

Disponemos de diferentes elementos para el control de flujo, como pueden ser RETURN, IF... ELSE, WHILE, BREAK, CONTINUE, GO TO, EXECUTE, etc. En los siguientes apartados aprenderemos cómo utilizarlos.

9.6. IF…   ELSE

Proporciona una ejecución condicional, permite ejecutar o no ciertas instrucciones dependiendo de si se cumple o no una determinada condición.


    IF condicion 

       {  sentencia_sql | bloque_sql } 

    [ ELSE 

       {  sentencia_sql | bloque_sql } ] 

Si la condición se cumple (da como resultado TRUE) se ejecuta la instrucción SQL o bloque de instrucciones que aparecen a continuación de la condición, si la condición no se cumple se ejecutan las sentencias que aparecen después de la palabra ELSE. El bloque ELSE es opcional.

Ejemplo: Si nos queremos guardar en una consulta todos los ejemplos para probarlos en cualquier momento, es conveniente antes de los  CREATE PROCEDURE colocar un DROP PROCEDURE para que la instrucción CREATE no dé error si el procedimiento ya existe, pero la primera vez la instrucción DROP PROC nos dará error porque el procedimiento todavía no existe, así que lo mejor es ejecutar el DROP sólo si el procedimiento existe, utilizando la función object_id(‘nombre_de_objeto’,’tipo de objeto’) que nos devuelve el id del objeto y NULL si el objeto no existe.


    IF object_id('trabajadores', 'P') IS NOT NULL

            DROP  PROCEDURE trabajadores;

      GO

      CREATE PROC trabajadores….  

Otro ejemplo. Ahora queremos el procedimiento y si no existe se mandará un mensaje "el procedimiento no existe":


    IF object_id('trabajadores', 'P') IS NOT NULL

      BEGIN

             PRINT 'Borramos el procedimiento' 

             DROP  PROC trabajadores

      END

      ELSE PRINT 'El procedimiento ya  existe'  

Cuando queremos definir un bloque de instrucciones utilizamos los delimitadores BEGIN..END

Se pueden anidar varias sentencias IF hasta el límite que permita la memoria.

9.7. WHILE – BREAK- CONTINUE

Esta instrucción permite definir un bucle que repite una sentencia o bloque de sentencias mientras se cumpla una determinada condición.


    WHILE condicion 

           { sentencia_sql | bloque_sql } 

           |  BREAK  

           |  CONTINUE   

Podemos anidar bucles, colocar un bucle WHILE dentro de otro
BREAK Produce la salida del bucle WHILE más interno. La instrucción BREAK interna sale al siguiente bucle más externo. Todas las instrucciones que se encuentren después del final del bucle interno se ejecutan primero y después se reinicia el siguiente bucle más externo.
CONTINUE Hace que se reinicie el bucle WHILE y omite las instrucciones que haya después de la palabra clave CONTINUE.

Por ejemplo, tenemos los siguientes bucles anidados:


    WHILE condicion1                -- Bucle 1

    Instrucciones_1_1

    WHILE  condicion2              -- Bucle 2

         Intrucciones2_1

         If  condicion3 BREAK

         Instrucciones2_2

         IF  condicion4 CONTINUE

         Instrucciones2_3

    Instrucciones1_2 

Las instrucciones se ejecutarían en este orden:
Preguntamos por condicion1:
  Si condicion1 se cumple:
           Se ejecuta el bloque Instrucciones1_1
           Preguntamos por condicon2:
           Si se cumple condicion2:
                     Se ejecuta el bloque de instrucciones Instrucciones_2_1.
                     Si condición3 se cumple:
                              Salimos del bucle 2,
                              Se ejecuta el bloque Instrucciones1_2
                              Y se vuelve a preguntar por condicion1.
                     Si condición3 no se cumple:
                              Se ejecuta el bloque instrucciones2_2
                              Si se cumple condicion4:
                                       Saltamos el bloque Instrucciones2_3
                                       Y se vuelve a preguntar por condicion2
                              Si no se cumple condicion4:
                                       Se ejecuta el bloque Instrucciones2_3
                                       Y se vuelve a preguntar por condicion2
           Si condicion2 no se cumple:
                     Se ejecuta el bloque Instrucciones 1_2
                     Se vuelve a preguntar por condicion1
  Si condicion1 no se cumple:
           Hemos terminado

Febrero-2010
Pág. 9.5

Atrás  Inicio  Adelante



.