111 - Lenguaje de control de flujo (if)


Existen palabras especiales que pertenecen al lenguaje de control de flujo que controlan la ejecución de las sentencias, los bloques de sentencias y procedimientos almacenados.

Tales palabras son: begin... end, goto, if... else, return, waitfor, while, break y continue.

- "begin... end" encierran un bloque de sentencias para que sean tratados como unidad.

- "if... else": testean una condición; se emplean cuando un bloque de sentencias debe ser ejecutado si una condición se cumple y si no se cumple, se debe ejecutar otro bloque de sentencias diferente.

- "while": ejecuta repetidamente una instrucción siempre que la condición sea verdadera.

- "break" y "continue": controlan la operación de las instrucciones incluidas en el bucle "while".

Veamos un ejemplo. Tenemos nuestra tabla "libros"; queremos mostrar todos los títulos de los cuales no hay libros disponibles (cantidad=0), si no hay, mostrar un mensaje indicando tal situación:

 if exists (select *from libros where cantidad=0)
  (select titulo from libros where cantidad=0)
 else
  select 'No hay libros sin stock';

SQL Server ejecuta la sentencia (en este caso, una subconsulta) luego del "if" si la condición es verdadera; si es falsa, ejecuta la sentencia del "else" (si existe).

Podemos emplear "if...else" en actualizaciones. Por ejemplo, queremos hacer un descuento en el precio, del 10% a todos los libros de una determinada editorial; si no hay, mostrar un mensaje:

 if exists (select *from libros where editorial='Emece')
 begin
  update libros set precio=precio-(precio*0.1) where editorial='Emece'
  select 'libros actualizados'
 end
 else
  select 'no hay registros actualizados';

Note que si la condición es verdadera, se deben ejecutar 2 sentencias. Por lo tanto, se deben encerrar en un bloque "begin...end".

En el siguiente ejemplo eliminamos los libros cuya cantidad es cero; si no hay, mostramos un mensaje:

 if exists (select *from libros where cantidad=0)
  delete from libros where cantidad=0
 else
  select 'No hay registros eliminados;


Retornar