-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathclientes.sql
139 lines (130 loc) · 3.92 KB
/
clientes.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
-- ---------------------------------
-- PROCEDIMIENTOS PARA ClienteS --
-- ---------------------------------
DROP PROCEDURE IF EXISTS AltaCliente;
DELIMITER //
CREATE PROCEDURE AltaCliente
(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 indescuentoID 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 Clientes
(ClienteID, descuentoID)
VALUES (@@identity, indescuentoID);
SET exito = @@identity;
END IF;
END IF;
COMMIT;
END//
DELIMITER ;
DROP PROCEDURE IF EXISTS BajaCliente;
DELIMITER //
CREATE PROCEDURE BajaCliente (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 ClienteID
FROM Personas INNER JOIN Clientes on Personas.personaID = Clientes.ClienteID
WHERE documento = indocumento) THEN
SELECT ClienteID INTO id
FROM Personas INNER JOIN Clientes on Personas.personaID = Clientes.ClienteID
WHERE documento = indocumento;
DELETE FROM Personas WHERE personaID = id;
DELETE FROM Clientes WHERE ClienteID = id;
SET exito = 1;
ELSE
SET exito = -2;
ROLLBACK;
END IF;
COMMIT;
END//
DELIMITER ;
DROP PROCEDURE IF EXISTS ModificarCliente;
DELIMITER //
CREATE PROCEDURE ModificarCliente
(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 indescuentoID 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 ClienteID
FROM Personas INNER JOIN Clientes on Personas.personaID = Clientes.ClienteID
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 Clientes SET descuentoID=indescuentoID
WHERE ClienteID = 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 ListarClientes;
DELIMITER //
CREATE PROCEDURE ListarClientes()
BEGIN
SELECT Personas.*, Clientes.descuentoID
FROM Personas RIGHT JOIN Clientes on Personas.personaID = Clientes.ClienteID;
END//
DELIMITER ;