--UNIDAD 4 CREATE DATABASE BANCO USE BANCO CREATE TABLE CLIENTE ( id_cliente INT not null, nombre VARCHAR(30) not null, telefono VARCHAR(12), PRIMARY KEY(id_cliente) ) CREATE TABLE CUENTA ( id_cuenta INT not null, monto INT, cve_cliente INT not null, PRIMARY KEY(id_cuenta), FOREIGN KEY(cve_cliente) REFERENCES CLIENTE(id_cliente) ) --Agrega una restricción Check para validar que el monto de la cuenta sea mayor a Cero. ALTER TABLE CUENTA IADD CONSTRAINT CK_CUENTA_monto check (monto>=0); INSERT INTO CLIENTE(id_cliente,nombre,telefono) values (1,'PEDRO LARES','99999'), (2,'AGAPITO BUELNA','99999'), (3,'EMILIO LOPEZ','999999'), (4,'CAMILO SUAREZ','999999') INSERT INTO CUENTA(id_cuenta,monto,cve_cliente) values (100,1000,1), (200,1000,2), (300,1000,3), (400,1000,4) --visualizar las tablas SELECT * FROM CLIENTE SELECT * FROM CUENTA --Transaccion Exitosa BEGIN TRANSACTION DEPOSITO UPDATE CUENTA SET monto=monto+10000 WHERE cve_cliente=1 --Visualizar la tabla CUENTA para checar el monto del cliente 1 COMMIT TRANSACTION DEPOSITO /*CHECAMOS*/ SELECT * FROM CUENTA --Transaccion Rechazada BEGIN TRANSACTION RETIRO UPDATE CUENTA SET MONTO=MONTO-10000 WHERE cve_cliente=1 -Visualizar la tabla CUENTA para checar el monto del cliente 1 ROLLBACK TRANSACTION RETIRO /*CHECAMOS*/ SELECT * FROM CUENTA --Transaccion Con Save Point BEGIN TRANSACTION NUEVA UPDATE CLIENTE SET nombre='PANFILO' where id_cliente=1 SAVE TRANSACTION MARCA UPDATE CLIENTE SET nombre='MARIA' where id_cliente=2 UPDATE CLIENTE SET nombre='GRACIELA' where id_cliente=3 ROLLBACK TRANSACTION MARCA COMMIT TRANSACTION NUEVA /*CHECAMOS*/ SELECT * FROM CLIENTE /*RETOMAMOS EL EJEMPLO DEL VIDEO, CON UN NUMERO DE CONTROL EXISTENTE*/ --Transaccion Alta Fracaso en CLIENTE BEGIN TRANSACTION ALTA_FRACASO SAVE TRANSACTION SAVE_ALTA_FRA INSERT INTO CLIENTE (id_cliente,nombre) VALUES (1,'LUISA') IF(@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION SAVE_ALTA_FRA PRINT('ERROR FALLASTE, YA EXISTE ESTE CLIENTE....!!!') END ELSE BEGIN COMMIT TRANSACTION ALTA_FRACASO PRINT('BIEN, EXITO.....!!!') END /*CHECAMOS*/ SELECT * FROM CLIENTE --Transaccion Alta Exitosa en CLIENTE BEGIN TRANSACTION ALTA_EXITO SAVE TRANSACTION SAVE_ALTA_EX INSERT INTO CLIENTE (id_cliente,nombre) VALUES (5,'LUISA') IF(@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION SAVE_ALTA_EX PRINT('ERROR FALLASTE, YA EXISTE ESTE CLIENTE....!!!') END ELSE BEGIN COMMIT TRANSACTION ALTA_EXITO PRINT('BIEN, EXITO.....!!!') END /*CHECAMOS*/ SELECT * FROM CLIENTE --RETIRO2 CON MENSAJE DE ERROR BEGIN TRANSACTION RETIRO2 SAVE TRANSACTION SAVE_RETIRO2 UPDATE CUENTA SET monto=monto-1000 WHERE cve_cliente=1 --Visualizar la tabla CUENTA para checar el monto del cliente 1 IF(@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION SAVE_RETIRO2 PRINT('ERROR SALDO INSUFICIENTE....!!!') END ELSE BEGIN COMMIT TRANSACTION RETIRO2 PRINT('RETIRO EXITOSO.....!!!') END /*CHECAMOS*/ SELECT * FROM CUENTA -- RETIRO3 CON MENSAJE DE ERROR BEGIN TRANSACTION RETIRO3 SAVE TRANSACTION SAVE_RETIRO3 UPDATE CUENTA SET monto=monto-3000 WHERE cve_cliente=2 --Visualizar la tabla CUENTA para checar el monto del cliente 1 IF(@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION SAVE_RETIRO3 PRINT('ERROR SALDO INSUFICIENTE....!!!') END ELSE BEGIN COMMIT TRANSACTION RETIRO3 PRINT('RETIRO EXITOSO.....!!!') END /*CHECAMOS*/ SELECT * FROM CUENTA --UNIDAD 5 /* FUNCION PARA PASAR A MAYUSCULA UNA PALABRA*/ CREATE FUNCTION DBO.MAYUSCULA (@PALABRA VARCHAR(45)) RETURNS VARCHAR(45) AS BEGIN SET @PALABRA=UPPER(@PALABRA) RETURN @PALABRA END --Ejecutar la función.- PRINT DBO.MAYUSCULA('maria lopez') --PROCEDURE CREATE PROCEDURE WSP_LISTA_ALUMNOS AS SELECT CONTROL AS CONTROL,NOMBRE_ALUMNO+' '+APELLIDO_PATERNO+' '+APELLIDO_MATERNO AS NOMBRE_ALUMNO, CORREO_ELECTRONICO FROM ALUMNO --EJECUTAR.- EXEC WSP_LISTA_ALUMNOS --OTRO CREATE PROCEDURE WSP_FECHANACIMIENTO @F1 DATETIME AS BEGIN SELECT * FROM ALUMNO WHERE FECHA_NACIMIENTO = @F1 END --EJECUTAR.- EXECUTE WSP_FECHANACIMIENTO @F1='19-11-1993' GO --OTRO CREATE PROCEDURE WSP_ENTIDAD_FEDERATIVA @entidad float AS SELECT * FROM ALUMNO WHERE entidad_procedencia = @entidad GO EJECUTAR.- EXEC WSP_ENTIDAD_FEDERATIVA @entidad=26 GO --TRIGGERS CREATE TRIGGER NOMBRE_TRIGGER ON [TABLE | VIEW ] FOR | AFTER |INSTEAD OF [ INSERT ][ , ][ UPDATE ][ ,] [ DELETE ] AS BEGIN SENTENCIA_SQL END /* FOR | AFTER: AFTER específica que el desencadenador DML sólo se activa cuando todas las operaciones especificadas en la instrucción SQL desencadenadora se han ejecutado correctamente. Además, todas las acciones referenciales en cascada y comprobaciones de restricciones deben ser correctas para que este desencadenador se ejecute. AFTER es el valor predeterminado cuando solo se especifica la palabra FOR. Los desencadenarores AFTER no se pueden definir en las vistas. INSTEAD OF: Especifica que se ejecuta el desencadenador DML en vez de la instrucción SQL desencadenadora, por lo que se suplantan las acciones de las instrucciones desencadenadoras. INSTEAD OF no se puede especificar para desencadenadores DDL. Como máximo, se puede definir un desencadenador*/ --d).-DESACTIVAR UN TRIGGER ALTER TRIGGER nombreTrigger DISABLE;