-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPaquete.sql
More file actions
166 lines (141 loc) · 4.75 KB
/
Copy pathPaquete.sql
File metadata and controls
166 lines (141 loc) · 4.75 KB
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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
CREATE OR REPLACE PACKAGE PK1 IS
PROCEDURE xLis (xfamilia IN Articulos.cArtFml%TYPE);
END;
CREATE OR REPLACE PACKAGE BODY PK1 IS
/* PROCEDIMIENTO INSERTAR CENTRO */
PROCEDURE insertar_centro(
p_nombre in centros.nombre%type,
p_provincia in CENTROS.PROVINCIA%type
)
IS
v_nombre CENTROS.NOMBRE%type;
e_found exception;
BEGIN
select nombre
into v_nombre
from centros
where nombre=p_nombre;
if sql%found
then
raise e_found;
end if;
EXCEPTION
when e_found then
DBMS_OUTPUT.PUT_LINE('El centro que intenta insertar ya existe');
when no_data_found then
insert into centros (nombre, provincia) values (p_nombre, p_provincia);
END;
DECLARE
v_nombre CENTROS.NOMBRE%type:='centro1';
BEGIN
insertar_centro(v_nombre,'gipuzkoa');
DBMS_OUTPUT.PUT_LINE(v_nombre);
END;
/* PROCEDIMIENTO VISUALIZAR LISTA CENTRO */
PROCEDURE visualizar_lista_centro
IS
cursor c1 is
select *
from centros;
v_reg c1%rowtype;
BEGIN
open c1;
fetch c1 into v_reg;
while c1%found loop
DBMS_OUTPUT.PUT_LINE(v_reg.id || ' ' || v_reg.nombre || ' ' || v_reg.calle || ' ' || v_reg.numero || ' ' || v_reg.cp || ' ' || v_reg.ciudad || ' ' || v_reg.provincia || ' ' || v_reg.telefono);
fetch c1 into v_reg;
end loop;
close c1;
END visualizar_lista_centro;
execute visualizar_lista_centro;
select * from centros;
--BORRAR CENTRO Y TRANSFERIR LOS TRABAJADORES A OTRO CENTRO
PROCEDURE borrar_centro(
v_fuente IN CENTROS.ID%TYPE, v_destino IN CENTROS.ID%TYPE
)AS
E_FALLO_FUENTE EXCEPTION;
E_FALLO_DESTINO EXCEPTION;
E_FALLO_TRANSFERIR EXCEPTION;
V_TEMP CENTROS.ID%TYPE;
BEGIN
SELECT ID INTO V_TEMP FROM CENTROS WHERE ID = v_fuente;
IF SQL%NOTFOUND THEN
RAISE E_FALLO_FUENTE;
ELSE
SELECT ID into V_TEMP FROM CENTROS WHERE ID = v_destino;
IF SQL%NOTFOUND THEN
RAISE E_FALLO_DESTINO;
ELSE
UPDATE TRABAJADOR SET IDCENTRO=v_destino WHERE IDCENTRO = v_fuente;
IF SQL%NOTFOUND THEN
RAISE E_FALLO_TRANSFERIR;
END IF;
END IF;
END IF;
EXCEPTION
WHEN E_FALLO_FUENTE THEN
RAISE_APPLICATION_ERROR(-20111,'No se ha encontrado el centro a borrar.');
WHEN E_FALLO_DESTINO THEN
RAISE_APPLICATION_ERROR(-20111,'No se ha encontrado el centro de destino.');
when E_FALLO_TRANSFERIR THEN
RAISE_APPLICATION_ERROR(-20112,'Error al transferir los trabajadores.');
END;
desc centros;
--CAMBIAR PROVINCIA
PROCEDURE cambiar_provincia(
p_idCentro NUMBER,
p_provincia VARCHAR2)
IS
e_idCentro_inexistente EXCEPTION;
-- BLOQUE PRINCIPAL
BEGIN
-- BLOQUE Para comprobar CENTRO repetido(Puede disparar NO_DATA_FOUND)
DECLARE
v_idCentro centro.idCentro%TYPE;
-- e_idCentro_inexistente se propaga;
BEGIN
SELECT idCentro INTO v_idCentro FROM centro
WHERE idCentro = p_idCentro);
-- Enviamos al bloque principal la excepción definida por nosotros e_idCentro_inexistente
IF SQL%NOTFOUND THEN
RAISE e_idCentro_inexistente;
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN
--Si se dispara esta excepción hay error, ese p_idCentro no es correcto
RAISE_APPLICATION_ERROR ('-20002','Error: '||sqlerrm);
WHEN TOO_MANY_ROWS THEN
NULL;
END;
-- Fin del bloque de comprobación de id_Centro inexistente
-- Inserta Centro
UPDATE centro SET provincia = p_provincia WHERE centro.idCentro = p_idCentro
-- Comprobar
IF SQL%FOUND
THEN
COMMIT;
END IF;
EXCEPTION
WHEN e_idCentro_inexistente THEN
RAISE_APPLICATION_ERROR ('-20001','Err. id de Centro inexistente');
WHEN OTHERS THEN
RAISE_APPLICATION_ERROR ('-20003','Error: '||sqlerrm);
END cambiar_provincia;
--BUSCAR CENTRO POR NOMBRE
FUNCTION buscar_centro_por_nombre
(v_nCentro IN CENTROS.NOMBRE%TYPE)
return NUMBER
IS
v_idCentro CENTROS.IDCENTRO%TYPE;
E_CENTRO_ERRONEO EXCEPTION;
BEGIN
SELECT IDCENTRO INTO v_idCentro FROM CENTRO WHERE UPPER(NOMBRE) LIKE UPPER(V_NCENTRO);
IF SQL%NOTFOUND THEN
RAISE E_CENTRO_ERRONEO;
END IF;
RETURN v_idCentro;
EXCEPTION
WHEN E_CENTRO_ERRONEO THEN
RAISE_APPLICATION_ERROR(-20111,'No se ha encontrado el centro.');
END buscar_centro_por_nombre;
END;