- --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;