Carrera
Profesional
Técnica
BASE DE DATOS
UNIDAD 4
Docentes del Curso
Logro de la Unidad
Al término de la cuarta unidad, el estudiante recupera información
eficazmente de una tabla de la base de datos implementando
procedimientos almacenados sin y con parámetros de entrada
Temas a desarrollar
• Tema 9: Introducción a la programación en SQL
SERVER 2014
4.1.1. Declaración de variables locales
4.1.2. Procedimientos almacenados con una tabla.
4.1.3. Procedimientos almacenados con uno y dos parámetros de entrada.
4.1.4. Procedimientos almacenados de mantenimiento de datos (INSERT,
UPDATE y DELETE)
2
Programación en SQL SERVER 2014
3
Programación en SQL SERVER 2014
¿Qué es Transact SQL?
Transact SQL es el lenguaje de programación que
proporciona SQL para ampliar la forma de obtener la
información, por ejemplo se definen variables locales, se
estructuran sentencias de control de flujo como if y case y
el control de repeticiones con while.
4
Programación en SQL SERVER 2014
¿Transact SQL?
Transact SQL proporciona palabras clave especiales
llamadas lenguaje de control de flujo que permiten
controlar el flujo de ejecución de las instrucciones.
El lenguaje de control de flujo se puede utilizar en
instrucciones sencillas, lotes, procedimientos almacenados
y disparadores.
5
Programación en SQL SERVER 2014
¿Qué es una variable?
Una variable es un espacio de memoria a la que se asigna un
determinado valor. Este valor puede cambiar durante el lote o el
procedimiento almacenado donde se utiliza la variable:
SQL SERVER
Proporciana
2 tipos de variables
6
Programación en SQL SERVER 2014
¿Qué tener en cuenta de las variables ?
• Las variables locales se declaran, nombran y escriben
mediante la palabra clave DECLARE, y reciben un valor
inicial mediante una instrucción SELECT o SET.
• Los nombres de las variables locales deben empezar con el
símbolo “@”.
• A cada variable local se le debe asignar un tipo de dato
definido por el usuario.
7
Programación en SQL SERVER 2014
Declarando de una variable
DECLARE @VARIABLE TIPO_DATOS.
Asignando valores a las variables
SET @VARIABLE = VALOR O SENTENCIA
SELECT @VARIABLE = VALOR O SENTENCIA
8
Programación en SQL SERVER 2014
9
Ejemplo 01:
Declarar la variable edad de tipo entero, asignarle un valor y
mostrarlo mediante la sentencia SELECT
declare @edad int Otra Forma:
set @edad = 18 declare @edad int=18
select @edad select @edad
Nota: Se puede declarar y asignar en una misma línea; si necesita
realizar más declaraciones y asignaciones será cuestión de separarlos por
comas
declare @edad int = 10
print @edad
10
Ejemplo 01:
Si la impresión está acompañada de un texto representativo del valor se
debe tener en cuenta que los valores sean de tipo Char o Varchar, de otra
manera tendríamos que aplicar la sentencia CAST o CONVERT.
CAST(VARIABLE O VALOR AS TIPO_DATOS)
CONVERT(TIPO_DATOS, VARIABLE O VALOR)
declare @edad int = 18
select 'El numero es: '+CAST(@edad as varchar(10))
11
Ejemplo 02:
Script que permita calcular el promedio de un determinado alumno, el
cual cuenta con cuatro notas y estas son de tipo entero:
DECLARE @NOMBRE VARCHAR (30) ='JUAN PEREZ' , @N1 INT = 10,
@N2 INT = 16, @N3 INT = 15,
@N4 INT =20, @PROM DECIMAL (5, 2)
SET @PROM = (@N1 + @N2 + @N3 + @N4)/4.0
SELECT @NOMBRE AS ALUMNO, @PROM AS PROMEDIO
12
Ejemplo 03:
Declarar 3 variables las cuales serán: codcli, nombre y dirección,
asignarle a codcli el código de un cliente de la tabla cliente y a partir
del código asignado buscar su nombre y dirección. Mostrar su código,
nombre y dirección. Utilizar la Base de Datos VENTAS2017
DECLARE
@CODCLI CHAR(6)='CLI003',
@NOMBRE VARCHAR(30),
@DIRECCION VARCHAR (80)
--Obteniendo el nombre del cliente a partir del código
SELECT @NOMBRE=NOMBRES FROM CLIENTE WHERE ID_CLIENTE=@CODCLI
--Obteniendo la dirección del cliente a partir del código
SELECT @DIRECCION=DIRECCION FROM CLIENTE WHERE ID_CLIENTE= @CODCLI
--Mostrando las columnas solicitadas
SELECT @CODCLI AS CODIGO, @NOMBRE AS NOMBRE, @DIRECCION AS DIRECCION
GO
13
Programación en SQL SERVER 2014
PROCEDIMIENTOS
ALMACENADOS
14
PROCEDIMIENTO ALMACENADO
Los procedimientos almacenados son grupos formados por
instrucciones SQL y el lenguaje de control de flujo.
Cuando se ejecuta un procedimiento, se prepara un plan de
ejecución para que la subsiguiente ejecución sea muy rápida.
15
CARACTERÍSTICAS DE UN
PROCEDIMIENTO ALMACENADO
1. Se almacenan en la propia Base de Datos y constituyen un objeto más
dentro de ésta.
2. Tienden a mejorar el rendimiento de los sistemas producto a que reducen
en intercambio entre cliente y servidor.
3. Los procedimientos almacenados son reutilizables, de manera que
los usuarios mediante la aplicación cliente no necesitan relanzar los
comandos individuales, sino que pueden llamar el procedimiento para
ejecutarlo en el servidor tantas veces como sea necesario.
16
¿QUÉ PUEDEN INCLUIR LOS
PROCEDIMIENTOS ALMACENADOS?
• Incluir parámetros
• Llamar a otros procedimientos
• Devolver un valor de estado a un procedimiento de llamada o lote para indicar
el éxito o el fracaso del mismo y la razón de dicho fallo.
• Devolver valores de parámetros a un procedimiento de llamada o lote
• Ejecutarse en SQL Server remotos
17
Sintaxis para crear un
procedimiento Almacenado
PRIMERA FORMA: SEGUNDA FORMA:
CREATE PROCEDURE NOMBRE CREATE PROCEDURE NOMBRE
AS AS
SENTENCIAS BEGIN
GO SENTENCIAS
END
GO
TERCERA FORMA:
IF OBJECT_ID('SP_LISTA') IS NOT NULL
DROP PROCEDURE NOMBRE
GO
CREATE PROCEDURE NOMBRE
AS
SENTENCIA
GO
18
Sintaxis para ejecutar un
procedimiento Almacenado
¿Cómo se ejecuta un P.A.?
EXECUTE Nombre del procedimiento
NOTA: Se puede colocar las cuatro primeras letras:
EXEC Nombre del procedimiento
Si necesitamos visualizar el bloque de sentencias que compone
el procedimiento almacenado puede usar la siguiente sentencia:
EXEC SP_HELPTEXT 'NOMBRE DEL PROCEDIMIENTO‘
19
Programación en SQL SERVER 2014
20
Ejemplo 01:
Crear un procedimiento almacenado que permita listar todos los registros de la
tabla clientes. Utilizar Base de Datos VENTAS2017
21
Modificación de un procedimiento
almacenado
La modificación de un procedimiento almacenado permite realizar alguna
modificación dentro del bloque de sentencias que la compone. Pero tenga
en cuenta que si valida el procedimiento almacenado ya no será
necesario modificarlo, solo ejecutar la creación del procedimiento con su
respectiva sentencia de validación.
ALTER PROC Nombre
As
sentencias
Go
22
Ejemplo 02:
Modificar el procedimiento almacenado sp_listar_clientes de tal forma
que solo muestre el código del cliente, nombre del cliente y email del
cliente.
--Modificando el procedimiento almacenado
alter proc sp_listar_clientes
As
select c.id_cliente as codigo, c.nombres as nombre,
c.email as correo
from cliente c
Go
--Ejecutando el procedimiento
Execute sp_listar_clientes
Go
23
Eliminación de un procedimiento almacenado
La eliminación del procedimiento almacenado es considerada como la
inhabilitación y eliminación del objeto de tipo procedimiento almacenado.
DROP PROC Nombre
Ejemplo 03:
Eliminar el procedimiento almacenado sp_listar_clientes
DROP PROC sp_listar_clientes
GO
24
¿Como Visualizar todos los procedimientos
almacenados creados en una Base de Datos?
SELECT ROUTINE_NAME FROM
INFORMATION_SCHEMA. ROUTINES
WHERE ROUTINE_TYPE =
'PROCEDURE'
ORDER BY ROUTINE_NAME
GO
25
Procedimientos Almacenados
con Parámetros de Entrada
Los parámetros cumplen una función importante ya que por medio de
ellas enviaremos valores al procedimiento, es así que las sentencias
implementadas dentro del procedimiento usaran a dichos parámetros
como una variable local.
CREATE PROCEDURE NOMBRE (@PARAMETRO1 TIPO, @PARAMETRO2 TIPO)
AS
SENTENCIAS
GO
Otra forma de implementar el
Procedimiento almacenado es:
CREATE PROCEDURE NOMBRE Formato de ejecución del p.a.:
@PARAMETRO1 TIPO,
@PARAMETRO2 TIPO
EXEC NOMBRE 'VALOR1' , 'VALOR2'
AS
SENTENCIAS
GO
26
¿Cómo usar parámetros?
Ejemplo 04:
Crear un procedimiento almacenado de nombre sp_listarClientesCod el
cual permitirá recibir el código de un cliente y listará todos los datos del
cliente ingresado.
Ejecutando el procedimiento
almacenado con parámetro.
EXECUTE sp_listarClienteCod ‘CLI003'
GO
27
Estructura condicional IF…ELSE
La estructura condicional IF permite evaluar una expresión booleana
(resultado SI - NO), y ejecutar las operaciones contenidas en el bloque
formado por BEGIN ……….END
IF ( CONDICION )
BEGIN
Sentencias verdaderas
END
ELSE
BEGIN
Sentencias falsas
END
28
Ejemplo 05:
Crear un procedimiento almacenado que reciba como parámetro una categoría del
producto. El procedimiento verificara si la categoría existe. Si existe lo mostrará, si no
existe mostrará el mensaje “No existe la categoría ingresado”
29
Estructura condicional múltiple CASE
Evalúa una lista de condiciones y devuelve una de las varias expresiones de
resultado posibles. La expresión CASE tiene dos formatos:
- CASE simple, el cual compara una expresión con un conjunto de expresiones
sencillas para determinar el resultado.
- CASE buscada, evalúa un conjunto de expresiones booleanas para determinar el
resultado.
--SIMPLE
CASE COLUMNA
WHEN 'ALTERNATIVA1' THEN 'VALOR RESULTANTE 1'
WHEN 'ALTERNATIVA2' THEN 'VALOR RESULTANTE 2'
ELSE 'VALOR RESULTANTE POR DEFECTO'
END
--BUSCADA
CASE
WHEN CONDICION1 THEN 'VALOR RESULTANTE 1'
WHEN CONDICION2 THEN 'VALOR RESULTANTE 2'
ELSE 'VALOR RESULTANTE POR DEFECTO'
END
30
Ejemplo 06:
Crear un procedimiento almacenado que permite mostrar el estado de boleta
teniendo en cuenta los siguientes casos:
CASO ‘AC’, mostrar “ACTIVO”,
CASO ‘AN’, mostrar ‘ANULADO’
CASO ‘PE’, mostrar ‘PENDIENTE’
31
Estructura repetitiva WHILE
Establece una condición para la ejecución repetida de una instrucción o
bloque de instrucciones SQL. Las instrucciones se ejecutan
repetidamente siempre que la condición especificada sea verdadera. Se
puede controlar la ejecución de instrucciones en el bucle WHILE con las
palabras clave BREAK y CONTINUE
WHILE CONDICION
BEGIN
SENTENCIAS | BREAK | CONTINUE
END
GO
32
Ejemplo 07:
Imprimir los primeros 20 números naturales enteros, indicando si el
numero es par o impar
DECLARE @can int
SET @can = 0
WHILE (@can < 20)
BEGIN
SET @can = @can + 1
IF (@can % 2 = 0)
PRINT CAST(@can as varchar) +' NÚMERO PAR'
ELSE
PRINT CAST(@can as varchar) + ' NÚMERO IMPAR'
END
GO
33
Procedimientos almacenados de mantenimiento de
datos (INSERT, UPDATE y DELETE)
Usando la tabla CLIENTE que se encuentra dentro de la base de datos
VENTAS2017 empezaremos a implementar los procedimientos de
mantenimiento de inserción, actualización y eliminación.
34
INSERT IF OBJECT_ID ('SP_REGISTRAR_CLIENTE' )
IS NOT NULL
BEGIN
Crear un procedimiento DROP PROCEDURE SP_REGISTRAR_CLIENTE
almacenado que permita END
registrar datos a la tabla GO
CLIENTE. CREATE PROCEDURE SP_REGISTRAR_CLIENTE
@IDCLI CHAR (6),
Asignar de nombre @NOMBRES VARCHAR (25),
sp_registrar_cliente. @APELL VARCHAR (25),
@DIRECC VARCHAR (60),
Además, debe validar la @TELEF CHAR (9),
existencia del @MAIL VARCHAR (35),
procedimiento @IDDIST CHAR(4)
almacenado. AS
BEGIN
INSERT INTO CLIENTE VALUES (@IDCLI,
@NOMBRES, @APELL, @DIRECC,
@TELEF, @MAIL, @IDDIST)
END
GO
35
Ejecutando el procedimiento almacenado
Vamos a comprobar ingresando los datos respectivos
a cada parámetro de entrada:
EXECUTE SP_REGISTRAR_CLIENTE 'CLI012' , 'PEDRO
MANUEL' , 'RIVERA GUTIERREZ', 'AV. LOS AIRES #
2177' , '953817277' , '
[email protected]' ,'D002'
GO
Ahora vamos a mostrar el dato insertado mediante un
procedimiento almacenado a la tabla CLIENTE:
SELECT * FROM CLIENTE WHERE
ID_CLIENTE='CLI012'
GO
36
IF OBJECT_ID ('SP_ACTUALIZAR_CLIENTE' )
UPDATE IS NOT NULL
BEGIN
DROP PROCEDURE SP_ACTUALIZAR_CLIENTE
Crear un procedimiento END
almacenado que permita GO
actualizar todos los datos de CREATE PROCEDURE SP_ACTUALIZAR_CLIENTE
la tabla CLIENTES. @IDCLI CHAR (6),
@NOMBRES VARCHAR (25),
Asignar de nombre @APELL VARCHAR (25),
sp_actualizar_cliente. @DIRECC VARCHAR (60),
@TELEF CHAR (9),
Además, debe validar la @MAIL VARCHAR (35),
existencia del procedimiento @IDDIST CHAR (4)
almacenado. La actualización AS
se realizará mediante su BEGIN
código. UPDATE CLIENTE SET NOMBRES=@NOMBRES,
APELLIDOS=@APELL, DIRECCION=@DIRECC,
FONO=@TELEF, EMAIL=@MAIL,
ID_DISTRITO=@IDDIST
WHERE ID_CLIENTE=@IDCLI
END
GO
37
Ejecutando el procedimiento almacenado
Vamos a comprobar modificando su dirección y teléfono del CLIENTE
CLI012 . Los demás datos se mantienen igual.:
EXECUTE SP_ACTUALIZAR_CLIENTE 'CLI012' , 'PEDRO MANUEL' ,
'RIVERA GUTIERREZ', 'JR. BERNARDO ALCEDO 240' , '999887765' ,
'
[email protected]','D002'
GO
Ahora vamos a mostrar el dato modificado mediante un procedimiento
almacenado a la tabla CLIENTE:
SELECT * FROM CLIENTE WHERE ID_CLIENTE='CLI012'
GO
38
DELETE
Crear un procedimiento IF OBJECT_ID ('SP_ELIMINAR_CLIENTE' )
almacenado que permita IS NOT NULL
eliminar los datos de un BEGIN
cliente de la tabla CLIENTES. DROP PROCEDURE SP_ELIMINAR_CLIENTE
END
Asignar de nombre GO
sp_eliminar_cliente. CREATE PROCEDURE SP_ELIMINAR_CLIENTE
@IDCLI CHAR (6)
Además, debe validar la AS
existencia del procedimiento BEGIN
almacenado. DELETE FROM CLIENTE WHERE
ID_CLIENTE=@IDCLI
END
GO
39
Ejecutando el procedimiento almacenado
Vamos a comprobar eliminando el CLIENTE CLI012.
EXECUTE SP_ELIMINAR_CLIENTE 'CLI012'
GO
Ahora vamos a mostrar todos los registros de la tabla CLIENTE:
SELECT * FROM CLIENTE
40
HAGA UNA PAUSA (REFLEXIÓN)
Para que reflexionen y
entiendan la importancia de
los temas tratados y el
mejoramiento de su propio
proceso de aprendizaje.
FIN DEL TEMA 9
41
CIERRE
Considere los puntos más confusos, planteando las siguientes interrogantes:
1. ¿Cuál fue el tema más confuso sobre el que hablamos hoy en el aula?
2. ¿Qué preguntas tiene aún sobre el tema de hoy?
3. ¿Qué ejemplos usamos que no tuvieron sentido?
Considere una minuta, planteando las siguientes interrogantes:
1. ¿Cuál fue el tema más importante sobre el que hablamos hoy en el aula?
2. ¿Cuáles fueron los ejemplos más útiles?
3. ¿Cuáles fueron las preguntas más útiles?
4. ¿Cuáles fueron los temas clave discutidos hoy en clase?
Autoaprendizaje, del estudiante
42
CIERRE
REFERENCIAS DE LOS TEMAS
• ENLACES
1. https://www.ecured.cu/Procedimientos_almacenados
2. https://es.wikipedia.org/wiki/Procedimiento_almacenado
• VIDEOS
1. https://www.youtube.com/watch?v=tpjmONtsXKI
2. https://www.youtube.com/watch?v=zZoTuz-qMco
3. https://www.youtube.com/watch?v=DrFdkcYE0tw
4. https://www.youtube.com/watch?v=4hRwJt8BACQ
• MANUAL DEL CURSO
Es obligatorio utilizar durante todo el proceso del curso.
43
SEDE MIRAFLORES SEDE INDEPENDENCIA SEDE BREÑA SEDE TRUJILLO
Calle Diez Canseco Cdra 2 / Pasaje Tello Av. Carlos Izaguirre 233 Av. Brasil 714 – 792 Calle Borgoño 361
Miraflores – Lima Independencia – Lima (CC La Rambla – Piso 3) Trujillo
Teléfono: 633-5555 Teléfono: 633-5555 Breña – Lima Teléfono: (044) 60-2000
Teléfono: 633-5555
SEDE SAN JUAN DE LURIGANCHO SEDE SAN MIGUEL SEDE BELLAVISTA SEDE AREQUIPA
Av. Próceres de la Independencia 3023-3043 Av. Federico Gallese 847 Av. Mariscal Oscar R. Benvides 3866 – 4070 Av. Porongoche 500
San Juan de Lurigancho – Lima San Miguel – Lima (CC Mall Aventura Plaza) (CC Mall Aventura Plaza)
Teléfono: 633-5555 Teléfono: 632-4900 Bellavista – Callao Paucarpata - Arequipa
Teléfono: 633-5555 Teléfono: (054) 60-3535
www.cibertec.edu.pe