-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathempleados.sql
140 lines (132 loc) · 4.15 KB
/
empleados.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
-- ---------------------------------
-- PROCEDIMIENTOS PARA EMPLEADOS --
-- ---------------------------------
DROP PROCEDURE IF EXISTS AltaEmpleado;
DELIMITER //
CREATE PROCEDURE AltaEmpleado
(IN innombre VARCHAR(30),
IN indocumento VARCHAR(15),
IN infecha_de_nacimiento DATE,
IN incomentarios VARCHAR(100),
IN intelefono VARCHAR(15),
IN inusuario VARCHAR(10),
IN incontrasena VARCHAR(10),
IN inhabilitado BOOL,
IN invencimiento_carnet_de_salud DATE,
IN insueldo DOUBLE,
OUT exito INT)
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION, SQLWARNING
BEGIN
SET exito = -1; -- es el error si falla y se dejo sin cambios
ROLLBACK;
END;
START TRANSACTION;
IF EXISTS (SELECT * FROM Personas WHERE documento = indocumento) THEN
SET exito = -4; -- ya existe el documento
ROLLBACK;
ELSE
IF EXISTS (SELECT * FROM Personas WHERE usuario = inusuario) THEN
SET exito = -5; -- ya existe el usuario
ROLLBACK;
ELSE
INSERT INTO Personas
(nombre, documento, fecha_de_nacimiento, comentarios, telefono, usuario, contrasena, habilitado)
VALUES (innombre, indocumento, infecha_de_nacimiento,incomentarios, intelefono, inusuario, incontrasena, inhabilitado);
INSERT INTO Empleados
(empleadoID, vencimiento_carnet_de_salud,sueldo)
VALUES (@@identity, invencimiento_carnet_de_salud,insueldo);
SET exito = @@identity;
END IF;
END IF;
COMMIT;
END//
DELIMITER ;
DROP PROCEDURE IF EXISTS BajaEmpleado;
DELIMITER //
CREATE PROCEDURE BajaEmpleado (IN indocumento VARCHAR(15), OUT exito INT)
BEGIN
DECLARE id VARCHAR(10) DEFAULT NULL;
DECLARE EXIT HANDLER FOR SQLEXCEPTION, SQLWARNING
BEGIN
SET exito = -1; -- es el error si falla y se dejo sin cambios
ROLLBACK;
END;
START TRANSACTION;
IF EXISTS (SELECT empleadoID
FROM Personas INNER JOIN Empleados on Personas.personaID = Empleados.empleadoID
WHERE documento = indocumento) THEN
SELECT empleadoID INTO id
FROM Personas INNER JOIN Empleados on Personas.personaID = Empleados.empleadoID
WHERE documento = indocumento;
DELETE FROM Personas WHERE personaID = id;
DELETE FROM Empleados WHERE empleadoID = id;
SET exito = 1;
ELSE
SET exito = -2;
ROLLBACK;
END IF;
COMMIT;
END//
DELIMITER ;
DROP PROCEDURE IF EXISTS ModificarEmpleado;
DELIMITER //
CREATE PROCEDURE ModificarEmpleado
(IN inpersonaID INT,
IN innombre VARCHAR(30),
IN indocumento VARCHAR(15),
IN infecha_de_nacimiento DATE,
IN incomentarios VARCHAR(100),
IN intelefono VARCHAR(15),
IN inusuario VARCHAR(10),
IN incontrasena VARCHAR(10),
IN inhabilitado BOOL,
IN invencimiento_carnet_de_salud DATE,
IN insueldo DOUBLE,
OUT exito INT)
BEGIN
DECLARE cu INT DEFAULT 0;
DECLARE cd INT DEFAULT 0;
DECLARE EXIT HANDLER FOR SQLEXCEPTION, SQLWARNING
BEGIN
SET exito = -1; -- es el error si falla y se dejo sin cambios
ROLLBACK;
END;
START TRANSACTION;
IF EXISTS (SELECT EmpleadoID
FROM Personas INNER JOIN Empleados on Personas.personaID = Empleados.EmpleadoID
WHERE personaID = inpersonaID) THEN
SELECT COUNT(*) INTO cu FROM Personas WHERE usuario=inusuario AND NOT personaID = inpersonaID;
SELECT COUNT(*) INTO cd FROM Personas WHERE documento = indocumento AND NOT personaID = inpersonaID;
IF cu <> 0 THEN -- ya existe el usuario
SET exito = -6;
ROLLBACK;
ELSE
IF cd <> 0 THEN -- ya existe el documento
SET exito = -7;
ROLLBACK;
ELSE
UPDATE Empleados SET vencimiento_carnet_de_salud=invencimiento_carnet_de_salud, sueldo=insueldo
WHERE EmpleadoID = inpersonaID;
UPDATE Personas SET
nombre=innombre, fecha_de_nacimiento=infecha_de_nacimiento,
comentarios=incomentarios, telefono=intelefono, documento=indocumento, usuario=inusuario, contrasena=incontrasena, habilitado=inhabilitado
WHERE personaID = inpersonaID;
SET exito = 1;
END IF;
END IF;
ELSE
SET exito = -4;
ROLLBACK;
END IF;
COMMIT;
END//
DELIMITER ;
DROP PROCEDURE IF EXISTS ListarEmpleados;
DELIMITER //
CREATE PROCEDURE ListarEmpleados()
BEGIN
SELECT Personas.*, Empleados.vencimiento_carnet_de_salud, Empleados.sueldo
FROM Personas RIGHT JOIN Empleados on Personas.personaID = Empleados.empleadoID;
END//
DELIMITER ;