· 8 years ago · May 27, 2018, 06:10 PM
1DROP TRIGGER IF EXISTS tr_borrado_cliente;
2DELIMITER /
3CREATE TRIGGER tr_borrado_cliente BEFORE DELETE ON cliente
4FOR EACH ROW
5BEGIN
6declare v_numDirecciones int;
7declare v_numPedidos int;
8select count(*) into v_numDirecciones from dir_cliente where dir_cliente.codcli=OLD.codcli;
9delete dir_cliente from dir_cliente where dir_cliente.codcli=OLD.codcli;
10delete tfno_cliente from tfno_cliente where tfno_cliente.codcli=OLD.codcli;
11select count(codcli) into v_numPedidos from pedido where codcli=OLD.codcli;
12delete pedido,lineaspedido from pedido,lineaspedido where pedido.codcli=OLD.codcli and lineaspedido.codpedido=pedido.codpedido;
13if(OLD.tipo='farmacia') then
14insert into hist_clientes (codcli, num_cuenta, nif, titular, nombre, apellidos, denominacion, tipo, codzona, numborrado, numdirecciones, numpedidos) VALUES(OLD.codcli, OLD.num_cuenta, OLD.nif, OLD.titular, OLD.nombre, OLD.apellidos, OLD.denominacion, OLD.tipo, OLD.codzona,fn_maxNumBorrado(),v_numDirecciones,v_numPedidos);
15else
16insert into hist_clientes (codcli, num_cuenta, nif, titular, nombre, apellidos, denominacion, tipo, codzona, numborrado, numdirecciones, numpedidos) VALUES(OLD.codcli, OLD.num_cuenta, OLD.nif, OLD.titular, OLD.nombre, OLD.apellidos, OLD.denominacion, OLD.tipo, OLD.codzona,fn_maxNumBorrado(),0,0);
17end if;
18END
19/
20DELIMITER ;
21
22
23
24DELIMITER /
25DROP PROCEDURE IF EXISTS pr_mostrarClientes
26/
27CREATE PROCEDURE pr_mostrarClientes(IN p_codcli int)
28BEGIN
29DECLARE v_fin INTEGER DEFAULT 0;
30DECLARE v_pedido varchar(500) DEFAULT '';
31DECLARE v_cont INTEGER DEFAULT 1;
32DECLARE c_pedido CURSOR FOR SELECT concat('PEDIDO: ',codpedido, ' FECHA: ', fecha,' ESTADO: ', estado,' IMPORTE: ', importeTotal) FROM pedido where codcli=p_codcli;
33DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_fin = 1;
34DECLARE EXIT HANDLER FOR SQLEXCEPTION select 'error de ejecucion';
35drop table if exists temp;
36create table temp(
37orden int,
38tipo varchar(500));
39OPEN c_pedido;
40inicio_c_pedido: LOOP
41FETCH c_pedido INTO v_pedido;
42IF v_fin = 1 THEN
43LEAVE inicio_c_pedido;
44END IF;
45insert into temp VALUES (v_cont,v_pedido);
46set v_cont=v_cont+1;
47END LOOP inicio_c_pedido;
48CLOSE c_pedido;
49select * from temp order by v_cont;
50drop table temp;
51END
52/
53DELIMITER ;
54call pr_mostrarClientes(1);