Sie sind auf Seite 1von 58

Implementacin de

Procedimientos Almacenados

Objetivos:

Describir cmo se procesa un procedimiento almacenado.


Crear, ejecutar, modificar y quitar un procedimiento almacenado.
Crear procedimientos almacenados que acepten parmetros.
Ejecutar procedimientos almacenados extendidos.
Crear mensajes personalizados de error.

Temas:
Introduccin a los procedimientos almacenados.
Creacin, ejecucin, modificacin y eliminacin de procedimientos
almacenados.
Utilizacin de parmetros en los procedimientos almacenados.

Ejecucin de procedimientos almacenados extendidos.


Control de mensajes de error.
Consideraciones acerca del rendimiento.

Niveles de gravedad de los mensajes de error


Los mensajes con nivel de gravedad 10 son informativos e indican problemas debidos a
errores en la informacin que se ha escrito. Los niveles de gravedad entre 11 y 16 son
generados por el usuario y pueden ser corregidos por ste.
Los niveles de gravedad entre 17 y 25 indican errores de software o hardware. Cuando
se produzcan problemas que generan errores con niveles de gravedad 17 o superior

Deber informar al administrador del sistema. El administrador del sistema debe


resolver estos errores y hacer el seguimiento de su frecuencia. Cuando se produce un
error del nivel 17, 18 o 19, puede continuar trabajando, aunque es posible que no pueda
ejecutar alguna instruccin determinada.
El cliente puede obtener una entrada de la tabla sysmessages o generar un mensaje
dinmicamente con una gravedad definida por el usuario y con informacin acerca del
estado. Una vez definido, el mensaje se devuelve al cliente como un mensaje de error
del servidor.

Implementacin de
desencadenadores
Objetivos:

Describir cmo se procesa un desencadenador.


Crear, ejecutar, modificar y quitar un desencadenador.
Crear procedimientos almacenados que acepten parmetros.
Describir como funcionan diferentes desencadenadores.
Evaluar las consideraciones de rendimiento que afectan al uso de
desencadenadores.

Temas:

Introduccin a los desencadenadores.


Definicin de los desencadenadores.
Funcionamiento de los desencadenadores.
.Ejemplo de los desencadenadores.
Consideraciones acerca del rendimiento.

Laboratorio N 01
Objetivos: Creacin, modificacin, eliminacin y ejecucin de Procedimientos
almacenados en Microsoft SQL Server.

Crear una carpeta en la unidad C:\ CPIII-PROCALM en la cual se guardara el archivo


sql.
/*--------Procedimientos almacenados del sistema --------*/
--activa la bd
use northwind
--activa
la bd
northwindde bd del servidor
--devuelve
la cantidad
use
northwind
sp_databases
go
go
--insertar
registro
--devuelveunlos
archivos de datos y de registro
insert
into
categories
sp_helpfile
(categoryname,[description])
go
values('Mariscos','Langostinos')
--devuelve el espacio de almacenamiento de una bd
go
sp_spaceused @updateusage = 'TRUE'
--recupera
los datos de la tabla categories
go
select
*
from
--devuelve el categories
espacio de almacenamiento de una tabla
go
sp_spaceused 'categories'
--establece
la opcion de la bd de sin conexin
go
USE
mastertodos los objetos de usuario y de sistema
--devuelve
EXEC
sp_dboption 'northwind', 'offline', 'TRUE'
sp_tables
go
go
--verificar
--Visualiza las tablas de usuario de la bd northwind
use
northwind
EXEC
sp_tables '%', dbo, northwind, "'TABLE'" --"'SYSTEM TABLE'"
go
--devuelve la estructura de la tabla
--restablece
opcion de la bd con conexin
sp_columns la
categories
USE
go master
EXEC
sp_dboption
'FALSE'
--establece
la opcion'northwind',
de la bd de 'offline',
solo lectura
--verificar
USE master
use
northwind
EXEC
sp_dboption 'northwind', 'read only', 'TRUE'
go
go
--deveulve
todos
los procedimientosa almacenados
--activa la bd
northwind
sp_stored_procedures
use northwind
go
go
--devuelve
las datos
tabla que
este procedimiento almacenado
--recupera los
de lautiliza
tabla categories
sp_depends
select * from'CustOrderHist'
categories
go
go
--devuelve
--insertar uninformacin
registro del procedimiento almacenado
sp_help
'CustOrderHist'
insert into categories
go
(categoryname,[description])
--devuelve
el transact-sql del prodimiento almacenado
values('Mariscos','Langostinos')
EXEC
sp_helptext 'CustOrderHist'
go
go
--restablece la opcion de la bd de solo lectura - escritura
/*--------Procedimientos
almacenados Extendidos --------*/
USE master
--activa
la base de datos
principal'read only', 'false'
EXEC sp_dboption
'northwind',
use
master
go
go
--visualiza archivos de una unidad
EXEC master..xp_cmdshell 'dir C:\'
--visualiza directorios
exec master..xp_dirtree 'C:\'
go
--busca archivos que previe hacido creado
exec master..xp_fileexist 'c:\prueba1.txt'
go
--devuelve el nombre de lservidor
exec master..xp_getnetname
go

--activa la bd pubs
use pubs
--ejecuta una consulta con parametro definido
declare @level tinyint
set @level = 35
select * from pubs.dbo.employee where job_lvl = @level
/*
Ejecuta una instruccin o proceso por lotes de Transact-SQL
que puede utilizarse muchas veces
*/
go
execute sp_executesql
N'select * from pubs.dbo.employee where job_lvl = @level',
N'@level tinyint',
@level = 35
go
/*--------Procedimientos almacenados de usuario --------*/
--Activa la base de datos ventas
USE VENTAS
GO
--VISUALIZA LOS SP EXISTENS DE SISTEMA Y DE USUARIO
sp_stored_procedures
GO
--1
--RECUPERA LA CANTIDAD DE REGISTROS
CREATE PROCEDURE CANTREGCATE --CANTIDAD DE REGISTROS
AS
SELECT count(*)FROM categoria
GO
--EJECUCION DEL PROCEDIMIENTO ALMACENADO
SP_CANTREGCATE
GO
--MODIFICACION
ALTER PROC CANTREGCATE
AS
SELECT count(*) AS 'CantRegCategia'
FROM categoria
GO
--VISUALIZA EL CONTEXTO DEL SP
sp_helptext CANTREGCATE
GO
--EJECUCION DEL PROCEDIMIENTO ALMACENADO
CANTREGCATE
--ELIMINACION
DROP PROC CANTREGCATE
GO

--2
/*
MUESTRA LOS DATOS DE LOS CLIENTES QUE SE LES
A EMITIDO FACTURAS.
*/
CREATE PROCEDURE FACTURAS_EMPLEADO
AS
SELECT F.idfactura,C.nombres,F.idempleado,
F.fecha,F.tpago
FROM Facturas as F
INNER JOIN Clientes as C
ON F.idcliente = C.idcliente
GO
--EJECUCION 1 DEL PROCEDIMIENTO ALMACENADO
FACTURAS_EMPLEADO
GO
--EJECUCION 2 DEL PROCEDIMIENTO ALMACENADO
EXEC FACTURAS_EMPLEADO
GO
--3
/*
MUESTRA LOS DATOS DE LOS CLIENTES QUE SE LES
A EMITIDO FACTURAS Y DE LOS EMPLEADOS
QUE GENERARON DICHA FACTURA.
*/
CREATE PROCEDURE FACTURAS_CLIENTES
AS
SELECT F.idfactura,C.nombres as 'Nombre del Cliente',
E.nombre as 'Nombre del Empleado',F.fecha,F.tpago
FROM Facturas as F
INNER JOIN Clientes as C
ON F.idcliente = C.idcliente
INNER JOIN Empleado as E
ON F.idempleado = E.idempleado
ORDER BY F.idfactura
GO
--EJECUCION 1 DEL PROCEDIMIENTO ALMACENADO
FACTURAS_CLIENTES
GO
--EJECUCION 2 DEL PROCEDIMIENTO ALMACENADO
EXEC FACTURAS_CLIENTES
GO
--4
/*
MUESTRA LOS CLIENTES A QUIENES SE LES
EMITIO FACTURAS Y AQUIENES NO.
*/

CREATE PROCEDURE CLIENTES_FACTURAS


AS
SELECT C.idcliente,C.nombres,F.idfactura,F.fecha
FROM Clientes as C LEFT OUTER JOIN
Facturas AS F
ON C.idcliente=F.idcliente
ORDER BY C.idcliente
GO
--EJECUCION 1 DEL PROCEDIMIENTO ALMACENADO
CLIENTES_FACTURAS
GO
--EJECUCION 2 DEL PROCEDIMIENTO ALMACENADO
EXEC CLIENTES_FACTURAS
GO
--5
/*
MUESTRA TODOS LOS EMPLEADOS QUE REALIZARON
Y NO REALIZARON VENTAS.
*/
CREATE PROCEDURE FACTURAS_EMPLEADOTODOS
AS
SELECT F.idfactura, F.idcliente,
F.fecha, E.nombre, F.total
FROM Facturas AS F RIGHT OUTER JOIN
Empleado AS E ON F.idempleado = E.idempleado
ORDER BY F.idfactura
GO
--EJECUCION 1 DEL PROCEDIMIENTO ALMACENADO
FACTURAS_EMPLEADOTODOS
GO
--EJECUCION 2 DEL PROCEDIMIENTO ALMACENADO
EXEC FACTURAS_EMPLEADOTODOS
GO
--6
/*
MUESTRA LOS DATOS DE LAS TABLAS UNIDAS
*/
CREATE PROCEDURE ARTICULO_CATEGORIA
AS
SELECT A.IDARTICULO,C.NOMBRE
FROM ARTICULOS AS A FULL OUTER JOIN
CATEGORIA AS C
ON A.IDCATEGORIA=C.IDCATEGORIA
GO
--EJECUCION 1 DEL PROCEDIMIENTO ALMACENADO
ARTICULO_CATEGORIA
GO
--EJECUCION 2 DEL PROCEDIMIENTO ALMACENADO
EXEC ARTICULO_CATEGORIA

GO
/*--EJECUCION CON PARAMETROS DE ENTRADA
Y VALORES PREDETERMINADOS
*/
--7
/*
Escriba una sentencia sql que presente cuantas
unidades existen por cada categoria.
*/
CREATE PROCEDURE EXISTENCIACATEGORIAS
@P_IDCATEGORIA CHAR(6)='IMP001'
AS
SELECT A.idcategoria,SUM(A.STOCK)
FROM ARTICULOS AS A INNER JOIN CATEGORIA AS C
ON A.IDCATEGORIA=C.IDCATEGORIA
GROUP BY A.idcategoria
HAVING A.IDCATEGORIA=@P_IDCATEGORIA
GO
--EJECUCION 1 DEL PROCEDIMIENTO ALMACENADO
EXISTENCIACATEGORIAS
GO
--EJECUCION 2 DEL PROCEDIMIENTO ALMACENADO
EXEC EXISTENCIACATEGORIAS
GO
--8
/*
Escriba una sentencia sql que presente cuantas
unidades existen por cada categoria y que son
mayores a 30.
*/
CREATE PROCEDURE EXISTENCIACATEGORIASSTOCK
@P_sctock int
AS
SELECT A.idcategoria,SUM(A.STOCK)
FROM ARTICULOS AS A INNER JOIN CATEGORIA AS C
ON A.IDCATEGORIA=C.IDCATEGORIA
GROUP BY A.idcategoria
HAVING SUM(A.STOCK) > @P_sctock
GO
--EJECUCION 1 DEL PROCEDIMIENTO ALMACENADO
EXISTENCIACATEGORIASSTOCK 30
GO
--EJECUCION 2 DEL PROCEDIMIENTO ALMACENADO
EXEC EXISTENCIACATEGORIASSTOCK 30
GO
--9
/*
PROC ALM, PERMITE REALIZAR UNA EDICION DE DATOS
EN LA TABLA CATEGORIAS
*/

--9
CREATE PROCEDURE MANT_CATE
@pind int,@pidcategoria varchar(6),@pnombre varchar(20)
AS
if @pind=1 --inserta
BEGIN
INSERT INTO Categoria
(Idcategoria,nombre)
VALUES (@pidcategoria,@pnombre)
END
if @pind=2 --Actualiza
BEGIN
UPDATE Categoria
SET nombre=@pnombre
WHERE Idcategoria=@pidcategoria
END
if @pind=3 --Eliminar
BEGIN
DELETE FROM Categoria WHERE nombre=@pnombre
END
GO
--EJECUCION DEL PROCEDIMIENTO ALMACENADO
EXEC MANT_CATE 1,'PAR001','PARLANTES'
GO
--VERIFICAR LOS DATOS
SELECT * FROM CATEGORIA
GO
--10
/*
PARAMETRO DE SALIDA PARA RECUPERAR EL STOCK TOTAL
DE LA TABLA ARTICULOS.
*/
CREATE PROCEDURE ARTICULOSSTOCKTOTAL_PSALIDA
@STOCKTOTAL INT OUTPUT
AS
SELECT SUM(A.STOCK)
FROM ARTICULOS AS A
GO
--EJECUCION DEL PROCEDIMIENTO ALMACENADO
DECLARE @VSTOCKTOTAL INT
EXEC ARTICULOSSTOCKTOTAL_PSALIDA @VSTOCKTOTAL OUTPUT

1-- /*Asigna una comisin a un determinado empleado*/


Guardar el archivo con el siguiente nombre CP-III-PROALMACENADOS
create trigger tI_Facturas
on Facturas for INSERT as
if
update(idempleado)
update Empleado
set Empleado.comiemp=Empleado.comiemp + ((inserted.tpago)* 0.10)
from inserted,Empleado
where
Laboratorio N 02
inserted.idempleado = Empleado.idempleado
GO
Objetivos:
Creacin,
modificacin,
eliminacin
y ejecucin de desencadenadores
2--/*Descuenta
el stock
de un determinado
articulo*/
(triggers)
en
Microsoft
SQL
Server.
create trigger tI_DetallesFact
on DetallesFact for INSERT as
Crear
if una carpeta en la unidad C:\ CPIII-TRIGGER en la cual se guardara el archivo
sql.update(idarticulo)
update Articulos
set Articulos.stock=(Articulos.stock - inserted.cantidad)
from inserted,Articulos
where
inserted.idarticulo = Articulos.idarticulo
GO
3--/*Elimina en cascada los articulos de una determinada categoria*/
create trigger tD_Categoria
on Categoria for DELETE as
delete Articulos
from Articulos,deleted
where
Articulos.idcategoria = deleted.idcategoria
GO
4--/*Actualiza en cascada los articulos de una determinada categoria*/
create trigger tU_Categoria
on Categoria for UPDATE as
if
update(idcategoria)
update Articulos
set
Articulos.idcategoria = inserted.idcategoria
from Articulos,inserted,deleted
where
Articulos.idcategoria = deleted.idcategoria

Guardar el archivo con el siguiente nombre CP-III-DESENCADENADORES.


Nota: Los laboratorios se realizaran utilizando el archivo base de datos ventas.

Das könnte Ihnen auch gefallen