You are on page 1of 8

SERVICIO NACIONAL DE APRENDIZAJE

DESARROLLO DE SISTEMAS DE INFORMACIN

INTRODUCCION A LA PROGRAMACIN
Variables locales
Una variable es un objeto que puede tomar un valor. Se pueden utilizar
variables locales para introducir datos en una sentencia SQL. En T-SQL, se
pueden crear variables locales para uso temporal, mientras se ejecutan un
bloque de sentencias SQL. Una vez la variable es declarada, Una sentencia SQL
puede establecer un valor para la variable. La siguiente sentencia en el bloque
puede recuperar el valor de la variable, y mostrar el resultado.
El nombre de una variable local debe tener como prefijo el smbolo @.
Sintaxis:
DECLARE @nombre_variable DATA_TYPE
Por ejemplo para declarar una variable que contendr 4 caracteres, el comando
podra ser como sigue:
DECLARE @area Char(4)
Se puede utilizar la sentencia SET, o la sentencia SELECT para asignar un valor
a una variable declarada.
Sintaxis:
SET @nombre_variable = valor
value
Ej:

DECLARE @area Char(4)


SET @area = SUR2

DECLARE @area Char(4)


SET @area = SUR2
SELECT * FROM clientes
WHERE codigo_area = @area
de un Query.

SELECT

@nombre_variable

Para asignar un valor a la variable

Para usar la variable dentro

ESTRUCTURAS DE CONTROL DE FLUJO


SQL Server provee la construccin de programas que le permitan actuar de
forma selectiva sobre un grupo de sentencias DML. Para realizar estas tareas,
las estructuras de control de flujo usa tcnicas como el ciclo, o condicionales.
Estas tcnicas son similares a las encontradas en lenguajes de programacin
tales como Visual Basic o C++.
Cuando usted ejecuta un programa, las sentencias son ejecutadas
secuencialmente. Para controlar la ejecucin del flujo del programa se usan las
sentencias de control.
Ing. Yaqueline Chavarro

SERVICIO NACIONAL DE APRENDIZAJE


DESARROLLO DE SISTEMAS DE INFORMACIN

TS-SQL permite controlar el flujo de ejecucin y almacenar procedimientos, a


continuacin se revisarn las principales estructuras:

BEGIN END:

Se utilizan para marcar el comienzo y fin


de un grupo de sentencias T-SQL para ser
ejecutadas como un simple bloque o
unidad.

RETURN:

Se puede utilizar en cualquier punto para


salir de un bloque T-SQL
o de un
procedimiento
almacenado.
Las
instrucciones despus del RETURN, no se
ejecutan.

GOTO:

Se utiliza para cambiar el flujo de ejecucin


a una ubicacin especificada (label). Las
sentencias despus del GOTO son
saltadas. Se pueden
utilizar mltiples
saltos.

WHILE:

Se pueden ejecutar una sentencia o un


bloque de sentencias basados en una
condicin. Las sentencias son ejecutadas
repetidamente mientras que la condicin
especificada sea verdadera. Se utiliza
CONTINUE y BREAK para controlar la
ejecucin de la sentencias.

IF ELSE:

Se pueden ejecutar una sentencia o un


bloque de sentencias basados en una
condicin. Las sentencias son ejecutadas

Ing. Yaqueline Chavarro

Sintaxis:
BEGIN
{
sentencia | bloque de sentencias
}

Sintaxis:
RETURN [expresin entera]
La expresin entera especifica un valor
entero que se retorna. Por defecto,
todos los procedimientos almacenados
del sistema retornan un zero o nonzero para indicar que la ejecucin fue
exitosa o no.
Sintaxis:
GOTO etiqueta
El nombre de la etiqueta debe seguir
las reglas de los nombres de
identificadores.
procedimientos
almacenados del sistema retornan un
zero o non-zero para indicar que la
ejecucin fue exitosa o no.
Sintaxis:
WHILE condicin
{ Sentencias | bloque de sentencias}
[BREAK]
{ Sentencias | bloque de sentencias}
[CONTINUE]
break: rompe el ciclo
inmediatamente externo.
Continue: Reinicia el loop.

al

bloque

Sintaxis:
IF condicin
{ Sentencias | bloque de sentencias}
ELSE
{ Sentencias | bloque de sentencias}

SERVICIO NACIONAL DE APRENDIZAJE


DESARROLLO DE SISTEMAS DE INFORMACIN

si la condicin se cumple, en caso


contrario se ejecutan las sentencias
especificadas despus del ELSE.
CASE:
Permite retornar un valor basado en de
sentencias basados en una condicin. Las
sentencias son ejecutadas si la condicin
se cumple, en caso contrario se ejecutan
las sentencias especificadas despus del
ELSE.
WAITFOR :
Se puede especificar un tiempo, intervalo
de tiempo, o evento que genera la
ejecucin de un bloque de sentencias,
procedimiento almacenado o transaccin.

No hay limites en el uso de IF anidados

Sintaxis:
CASE
WHEN condicin THEN expresiones
[
WHEN
condicin2
THEN
expresiones]
[ ELSE]]
END
Sintaxis:
WAITFOR {
tiempo

DELAY tiempo | TIME

Delay: Detiene el procesamiento el


tiempo especificado.
Time: Especifica en que momento se
ejecuta.

Taller complemetario gua # 4


EJEMPLO1: --USO DE LA OPCION CONTINUE EN UN WHILE

DECLARE @var tinyint

SET @VAR =0

while @var < 10


begin
SET @VAR= @VAR+1
if @var =5
begin
print '5 NO ES UN SIMPLE VALOR '
CONTINUE
end
PRINT 'el valor es '+ CAST(@var AS CHAR(10))
END
Cul es la funcin de CONTINUE dentro del ciclo?_______________

Ing. Yaqueline Chavarro

SERVICIO NACIONAL DE APRENDIZAJE


DESARROLLO DE SISTEMAS DE INFORMACIN

EJEMPLO 2 : --USO DE IF
Usando Northwind
DECLARE @numclie int
set @numclie = ( select count (*)
from customers
where companyname like '%k%')
IF @numclie = 0
PRINT 'No hay registros para esta consulta'
ELSE
PRINT 'Existen ' + cast(@numclie as char(2))+'
clientes con este criterio'

EJEMPLO3 : EJEMPLOS CON CASE

Usando PUBS
1.
Select title_id,title, CASE
WHEN type = 'business' THEN 'NEGOCIOS'
WHEN type = 'mod_cook' OR type = 'trad_cook'
THEN 'COCINA'
WHEN type LIKE '%popular%' THEN 'COMPUTADORES'
WHEN type = 'psychology' THEN 'SICOLOGIA'
END
AS 'TEMATICA'
FROM titles
--*******************************
2.
SELECT stor_id,ord_num, 'forma de pago' =
CASE
when payterms = 'Net 30' THEN 'PAGO A 30 DIAS'
when payterms = 'Net 60' THEN 'PAGO A 60 DIAS'
when payterms = 'ON invoice' THEN 'PAGO CONTRA ENTREGA'
end
from Sales
--*************otra forma de usarlo*********************
3.
SELECT stor_id,ord_num, 'forma de pago' =
CASE payterms
when 'Net 30' THEN 'PAGO A 30 DIAS'
when 'Net 60' THEN 'PAGO A 60 DIAS'
when 'ON invoice' THEN 'PAGO CONTRA ENTREGA'
Ing. Yaqueline Chavarro

SERVICIO NACIONAL DE APRENDIZAJE


DESARROLLO DE SISTEMAS DE INFORMACIN

end
from Sales
EJEMPLO 4 --USO DE WAITFOR

1. En la base de datos PUBS, la tabla Titleauthor existen dos ndices llamados


auidind y titleidind, el siguiente procedimiento toma los ndices de una tabla
y los reconstruye, se puede hacer individual o para todo el grupo de ndices.
--**********************************
GO
CREATE procedure reindexarTitleAuthor
as
dbcc dbreindex ('titleauthor',UPKCL_taind)

Indice de llave primaria

--SI DESEAN REINDEXAN TODOS LOS INDICES DE LA TABLA USAR: -- DBCC


DBREINDEX ('titleauthor', '')
if @@error = 0
print 'REINDEXADO EXITOSO!!!!'
else print 'ERROR REINDEXANDO

grrr'

2. Ahora ejecute el procedimiento en forma inmediata y observe los mensajes


resultantes:
EXEC reindexarTitleAuthor
3. Sin embargo se puede diferir su ejecucin a un momento determinado:
EXECUTE reindexarTitleAuthor

WAITFOR

TIME '11:35'

Qu son lo procedimientos DBCC?_____________


EJEMPLO 5 -Manejo de Return en Procedimientos almacenados

1. Se debe crear una copia de la tabla titles para no alterar su informacin:


select *
into titulosCopia
from titles

Ing. Yaqueline Chavarro

SERVICIO NACIONAL DE APRENDIZAJE


DESARROLLO DE SISTEMAS DE INFORMACIN

2. Ahora asignar una restriccin al campo Royalty para que no acepte valores
superiores a 24 en la comisin
alter table titulosCopia
add Constraint valcomision check (royalty <=24)
3. El procedimiento actualiza permite que se pueda cambiar el porcentaje de
comisin para el libro especificado por cdigo.
CREATE PROCEDURE ACTUALIZA
@codlibro tid, --PARAMETROS
@comision int
AS
UPDATE titulosCopia SET royalty = @comision
WHERE title_id = @codlibro
RETURN --establece fin de procedimiento y devuelve
--un valor que determina si la ejecucin fue o no
--exitosa
4. Visualizar la tabla para conocer su informacin y posteriormente ejecutar el
procedimiento para comprobar, se le introduce un cdigo de libro y un
porcentaje diferente al inicial, la variable @VAR recoge el valor devuelto por el
procedimiento que sera 0 si no hay errores.
-- *********************************
SELECT * FROM titulosCopia
--******************************
DECLARE @VAR INT
EXEC @VAR = ACTUALIZA pc8888,30
IF @VAR <> 0 PRINT 'error en la actualizacin...'
ELSE
PRINT 'ACTUALIZACIN EXITOSA'
EJEMPLO 6 : --manejo de procedimientos almacenados

1. Usando Northwind se crea un procedimiento que cuenta el nmero de ordenes


que se han enviado a una ciudad determinada, se retorna el nmero de rdenes
(filas) que se obtiene en la consulta en una variable de salida.
create procedure ListaOrdenesCiudad
@ciudad VARCHAR(20)='%', --DEFINE UN VALOR POR DEFECTO
--SI NO SE ESPECIFICA NINGUNA CIUDAD
@numfilas int OUTPUT
--VARIABLE DE RETORNO
as
select *

Ing. Yaqueline Chavarro

SERVICIO NACIONAL DE APRENDIZAJE


DESARROLLO DE SISTEMAS DE INFORMACIN

from Orders
where ShipCity LIKE RTRIM(@ciudad)
set @numfilas= @@rowcount
--RETORNA EL NUMERO DE FILAS
DEVUELTAS
2. El procedimiento se puede ejecutar declarando una variable que almacene el
numero devuelto:
DECLARE @nueVar int
EXEC ListaOrdenesCiudad 'C%' ,@nueVar OUTPUT
3. El resultado quedo almacenado y se puede usar ese valor
select 'El nmero de rdenes a esa ciudad es', @nueVar
4. Tambin se puede ejecutar el procedimiento identificando explicitamente los
parmetros ciudad y numfilas:
DECLARE @Numfilas int
EXEC ListaOrdenesCiudad @numfilas =0 , @ciudad='M%'
select 'El nmero de rdenes a esa ciudad es', @numfilas

--EL MISMO EJERCICIO UTILIZANDO RETURN

create procedure ListaOrdenesCiudad2


@Ciudad VARCHAR(20)='%'
@numfilas int OUTPUT
as
select *
from Orders
where Shipcity LIKE RTRIM(@ciudad)
RETURN( @@rowcount)
--RETORNA EL NUMERO DE FILAS DEVUELTAS
Se ejecuta el procedimiento almacenando el valor en la variable FILAS
DECLARE @FILAS int
EXEC @FILAS = ListaOrdenesCiudad2 'C%' --LLAMADA AL
PROCEDIMIENTO
select 'El nmero de registros

Ing. Yaqueline Chavarro

a esa ciudad es', @FILAS

SERVICIO NACIONAL DE APRENDIZAJE


DESARROLLO DE SISTEMAS DE INFORMACIN

EJEMPLO7 : Procedimiento Almacenados extendidos

Se pueden ejecutar comandos del sistema operativo a travs de XP_cmdshell, su


estructura es:
EXEC xp_cmdshell 'comando del S.O. ', no_output

Use master
Declare @datos int
EXEC @datos = xp_cmdshell
' dir *.exe'
If (@datos = 0)
PRINT 'Comando ejecutado con xito'
ELSE
PRINT 'Fallo al ejecutar el comando'
Qu hace el siguiente grupo se sentencias?____________
Use master
Declare @cmd sysname, @var sysname
Set @var = 'dir /p'
Set @cmd = 'echo' + @var + '> dir_salida.txt'
Investigue otros procedimientos extendidos.

Ing. Yaqueline Chavarro

You might also like