Procedimientos Almacenados
-- Base de datos que usarás
USE VENTASCIB
GO
-- Procedimiento Almacenado: SP que muestra la lista de productos
ALTER PROCEDURE sp_ejemplo1
AS
SELECT * FROM TB_PRODUCTO WHERE PRE_PRO >= 40
GO
EXEC sp_ejemplo1
GO
EXEC sp_helptext sp_ejemplo1;
DROP PROCEDURE sp_ejemplo1;
-- Procedimiento Almacenado: SP que muestra los CONTACTOS que inician con A
CREATE PROCEDURE sp_ejemplo2
AS
SELECT * FROM TB_CLIENTE WHERE CONTACTO LIKE 'a%'
GO
EXEC sp_ejemplo2
GO
-- Procedimiento Almacenado: SP que muestra los CONTACTOS que terminan con A
CREATE PROCEDURE sp_ejemplo3
AS
SELECT * FROM TB_CLIENTE WHERE CONTACTO LIKE '%a'
GO
EXEC sp_ejemplo3
GO
-- Modificación del SP: ahora muestra los contactos que contienen "an"
ALTER PROCEDURE sp_ejemplo3
AS
SELECT * FROM TB_CLIENTE WHERE CONTACTO LIKE '%an%'
GO
EXEC sp_ejemplo3
GO
-- Procedimiento Almacenado: SP que muestra los contactos que inician con las vocales
CREATE PROCEDURE sp_ejemplo4
AS
SELECT * FROM TB_CLIENTE WHERE CONTACTO LIKE '[a,e,i,o,u]%'
GO
EXEC sp_ejemplo4;
GO
-- Procedimiento Almacenado: SP que muestra los contactos que NO inician con las vocales
CREATE PROCEDURE sp_ejemplo5
AS
SELECT * FROM TB_CLIENTE WHERE CONTACTO NOT LIKE '[a,e,i,o,u]%'
GO
EXEC sp_ejemplo5;
GO
-- Procedimiento Almacenado: SP que muestra el nombre de contactos con su distrito
CREATE PROCEDURE sp_ejemplo6
AS
SELECT c.CONTACTO, d.NOM_DIS FROM TB_CLIENTE c
INNER JOIN TB_DISTRITO d ON c.COD_DIS = d.COD_DIS
GO
EXEC sp_ejemplo6
GO
-- Procedimiento Almacenado: SP que muestra productos según el precio ingresado por el cliente
CREATE PROCEDURE SP_EJEMPLO7 (@PRECIO MONEY)
AS
SELECT * FROM TB_PRODUCTO WHERE PRE_PRO >= @PRECIO
GO
EXEC SP_EJEMPLO7 200
GO
-- Procedimiento Almacenado: SP que muestra los vendedores según su tipo
CREATE PROCEDURE SP_MostrarTipo(@tipo VARCHAR(MAX))
AS
SELECT * FROM TB_VENDEDOR WHERE TIP_VEN = @tipo
GO
EXEC SP_MostrarTipo 100
GO
-- Modificación del SP SP_EJEMPLO7 para mostrar mensaje si no se encuentra el precio
ALTER PROCEDURE SP_EJEMPLO7 (@PRECIO MONEY)
AS
IF EXISTS (SELECT * FROM TB_PRODUCTO WHERE PRE_PRO >= @PRECIO)
SELECT * FROM TB_PRODUCTO WHERE PRE_PRO >= @PRECIO
ELSE
PRINT 'Precio no considerado'
GO
EXEC SP_EJEMPLO7 200
GO
-- Procedimiento Almacenado: SP que muestra los clientes según el distrito ingresado
CREATE PROCEDURE SP_BuscarClienteDistrito(@Distrito VARCHAR(MAX))
AS
IF EXISTS (SELECT c.* FROM TB_CLIENTE c INNER JOIN TB_DISTRITO d ON c.COD_DIS = d.COD_DIS WHERE d.NOM_DIS = @Distrito)
SELECT c.* FROM TB_CLIENTE c INNER JOIN TB_DISTRITO d ON c.COD_DIS = d.COD_DIS WHERE d.NOM_DIS = @Distrito
ELSE
PRINT 'No hay cliente o distrito Incorrecto'
GO
EXEC SP_BuscarClienteDistrito 'dddd'
GO
-- Procedimiento Almacenado: SP que muestra productos según precio y stock
CREATE PROCEDURE SP_PrecioXStock(@Precio MONEY, @Stock INT)
AS
SELECT * FROM TB_PRODUCTO WHERE PRE_PRO > @Precio AND STK_ACT > @Stock
GO
EXEC SP_PrecioXStock 20, 30
GO
-- Procedimiento Almacenado: SP para registrar libros
CREATE TABLE libro(cod CHAR(3) PRIMARY KEY, nom VARCHAR(MAX))
GO
INSERT INTO libro VALUES (1, 'Java'), (2, 'Php')
GO
SELECT * FROM libro;
-- Procedimiento Almacenado: SP para insertar un libro
CREATE PROCEDURE sp_libro(@cod CHAR(3), @nom VARCHAR(MAX))
AS
INSERT INTO libro VALUES (@cod, @nom)
GO
EXEC sp_libro 3, 'Inglés';
SELECT * FROM libro;
-- Procedimiento Almacenado: SP para actualizar el nombre de un libro
CREATE PROCEDURE sp_cambiolibro(@nom VARCHAR(MAX), @cod VARCHAR(MAX))
AS
UPDATE libro SET nom = @nom WHERE cod = @cod
GO
EXEC sp_cambiolibro 'Harry P', 2;
-- Borrar y truncar un registro
DELETE FROM libro WHERE cod = 2;
TRUNCATE TABLE libro
GO
-- Manejo de Excepciones
BEGIN TRY
DELETE FROM TB_DISTRITO WHERE COD_DIS = 'D01';
END TRY
BEGIN CATCH
PRINT 'NO SE PUEDE POR LA RELACIÓN'
END CATCH
-- Manejo de errores con TRY CATCH y verificación de errores
BEGIN TRY
DECLARE @NUM1 INT = 20
DECLARE @NUM2 INT = 0
DECLARE @TOTAL INT = (@NUM1 / @NUM2)
PRINT @TOTAL
END TRY
BEGIN CATCH
SELECT ERROR_MESSAGE(), ERROR_LINE(), ERROR_NUMBER(), ERROR_STATE(), ERROR_SEVERITY()
END CATCH
GO
-- Generar un error y manejarlo
BEGIN TRY
INSERT INTO TB_FACTURA VALUES ('FA099', GETDATE(), 'C999', GETDATE(), 3, 'V10', 0)
END TRY
BEGIN CATCH
IF @@ERROR != 0
SELECT ERROR_MESSAGE(), ERROR_LINE(), ERROR_NUMBER(), ERROR_STATE(), ERROR_SEVERITY()
END CATCH
GO
-- Procedimiento Almacenado: SP para mostrar la cantidad de productos por código de factura
ALTER PROCEDURE SP_FACTURA (@FAC CHAR(5))
AS
SELECT SUM(CAN_VEN) AS 'CANT. PROD.', SUM(PRE_VEN * CAN_VEN) AS 'PRECIO TOTAL'
FROM TB_DETALLE_FACTURA
WHERE NUM_FAC = @FAC
GO
EXEC SP_FACTURA 'FA001'Last updated