Procedimiento PL/SQL
Publicado por jose (7 intervenciones) el 15/04/2017 12:16:29
Hola, tengo que crear un procedimiento que reciba como parámetro el nombre de una localidad y muestre por pantalla un listado con el código, nombre y salario de los comerciales que trabajan en esa localidad.
Yo he hecho esto:
Y lo invoco de la siguiente manera:
El problema es que me muestra tanto la oficina de jerez como la de marbella, estaria muy agradecido si alguien me pudiese ayudar.
El script es:
Yo he hecho esto:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
create or replace PROCEDURE nom_loc(loc OFICINAS.LOCALIDAD%TYPE)
AS
CURSOR o_loc IS
SELECT CODIGO, DIRECCION, LOCALIDAD, PROVINCIA
FROM OFICINAS;
d_codigo oficinas.codigo%TYPE;
d_direccion oficinas.direccion%TYPE;
d_localidad oficinas.localidad%TYPE;
d_provincia oficinas.provincia%TYPE;
BEGIN
OPEN o_loc;
FETCH o_loc into d_codigo, d_direccion, d_localidad, d_provincia;
WHILE o_loc%FOUND LOOP
DBMS_OUTPUT.PUT_LINE(d_codigo||' ' ||d_direccion||' '||d_localidad||' '||d_provincia);
FETCH o_loc into d_codigo, d_direccion, d_localidad, d_provincia;
END LOOP;
CLOSE o_loc;
END nom_loc;
Y lo invoco de la siguiente manera:
1
2
3
4
5
6
7
8
9
10
DECLARE
LOC VARCHAR2(50);
BEGIN
LOC := 'Marbella';
NOM_LOC(
LOC => LOC
);
--rollback;
END;
El problema es que me muestra tanto la oficina de jerez como la de marbella, estaria muy agradecido si alguien me pudiese ayudar.
El script es:
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
create table Oficinas (
codigo varchar2(3) primary key,
direccion varchar2(50) not null,
localidad varchar2(50) not null,
provincia varchar2(20)
);
create table Vehiculos (
matricula varchar2(7) primary key,
marca varchar2(20) not null,
modelo varchar2(20),
nKilometros number(8) not null,
fRevision date
);
create table Comerciales (
codigo varchar2(3) primary key,
nombre varchar2(30) not null,
salario number(6,2) not null,
hijos number(2) not null,
fNacimiento date not null,
codOficina varchar2(3),
vehiculoAsig varchar2(7),
constraint com_ofi_fk foreign key (codOficina) references Oficinas(codigo) on delete cascade,
constraint com_veh_fk foreign key (vehiculoAsig) references Vehiculos(matricula) on delete cascade
);
create table Productos (
referencia varchar2(6) primary key,
nombre varchar2(20) not null,
descripcion varchar2(100),
precio number(6,2) not null,
descuento number(2,0) not null
);
create table Vender (
codComercial varchar2(3),
refProducto varchar2(6),
cantidad number(6),
fecha date,
primary key (codComercial, refProducto, fecha),
constraint ven_co_fk foreign key (codComercial) references Comerciales(codigo) on delete cascade,
constraint ven_ref_fk foreign key (refProducto) references Productos(referencia) on delete cascade
);
insert into Oficinas values ('101','Avda. Carlos III, 23' ,'Aguadulce','Almería');
insert into Oficinas values ('202','Avda Servero Ochoa, 33' ,'Marbella','Málaga');
insert into Oficinas values ('303','Avda. de Arcos, 43' ,'Jerez de la Frontera','Cádiz');
insert into Oficinas values ('404','Avda. de Lisboa, 53' ,'Andújar','Jaén');
insert into Vehiculos values ('0101BCD', 'Peugeot', '206', 110022, TO_DATE('2011/12/24', 'YYYY/MM/DD'));
insert into Vehiculos values ('0202CBD', 'Opel', 'Corsa', 80999, TO_DATE('2011/12/12', 'YYYY/MM/DD'));
insert into Vehiculos values ('0303DFD', 'Toyota', 'Auris', 101200, TO_DATE('2010/02/01', 'YYYY/MM/DD'));
insert into Vehiculos values ('0404FDF', 'Toyota', 'Corolla', 58230, TO_DATE('2011/11/20', 'YYYY/MM/DD'));
insert into Vehiculos values ('0505GHG', 'Renault', 'Laguna', 12234, TO_DATE('2012/12/04', 'YYYY/MM/DD'));
insert into Vehiculos values ('0606DFD', 'Renault', 'Clio', 148023, TO_DATE('2010/12/01', 'YYYY/MM/DD'));
insert into Vehiculos values ('0707BDF', 'Renault', 'Clio', 133012,TO_DATE('2010/10/15', 'YYYY/MM/DD'));
insert into Vehiculos values ('0808GGH', 'Seat', 'Ibiza', 45023, TO_DATE('2011/10/13', 'YYYY/MM/DD'));
insert into Vehiculos values ('0909DDL', 'Seat', 'Leon', 99283,TO_DATE('2010/03/20', 'YYYY/MM/DD'));
insert into Comerciales values ('111','Pedro Alonso Jiménez',1200.50,0, TO_DATE('1960/02/01', 'YYYY/MM/DD'),'101','0101BCD');
insert into Comerciales values ('222','Julia Pérez Arribas',1305.75,1,TO_DATE('1971/12/11', 'YYYY/MM/DD'),'101','0202CBD');
insert into Comerciales values ('333','Juan Lozano Gómez',1080.25,3,TO_DATE('1975/08/21', 'YYYY/MM/DD'),'202','0303DFD');
insert into Comerciales values ('444','Sandra Molina Sánchez',1120.00,2,TO_DATE('1969/05/09', 'YYYY/MM/DD'),'303','0404FDF');
insert into Comerciales values ('555','Salvador Beltrán Jiménez',975.50,0,TO_DATE('1980/10/11', 'YYYY/MM/DD'),'303','0505GHG');
insert into Comerciales values ('666','Beatriz Martín Gutiérrez',1175.00,1,TO_DATE('1970/11/06', 'YYYY/MM/DD'),'404','0606DFD');
insert into Comerciales values ('777','Eduardo Martínez Puig',1100.50,2,TO_DATE('1967/01/16', 'YYYY/MM/DD'),'101','0707BDF');
insert into Comerciales values ('888','Juan Antonio Ochando Serrano',1000.50,0,TO_DATE('1982/03/03', 'YYYY/MM/DD'),'202','0808GGH');
insert into Comerciales values ('999','Marina Pérez Blanco',1070.20,3,TO_DATE('1972/07/21', 'YYYY/MM/DD'),'303','0909DDL');
insert into Productos values ('AC0001', 'Abrigo Caballero', 'Piel Color Marrón', 120.50, 15);
insert into Productos values ('AS0001', 'Abrigo Señora', 'Piel Color Marrón', 110.75, 25);
insert into Productos values ('CC0001', 'Camisa Caballero', 'Cuadros', 35.99, 10);
insert into Productos values ('PC0001', 'Pantalón Caballero', 'Vaquero', 34.90, 35);
insert into Productos values ('PC0002', 'Pantalón Caballero', 'Pana', 25.90, 0);
insert into Productos values ('AC0002', 'Abrigo Caballero', 'Piel Color Negro', 120.50, 15);
insert into Productos values ('CC0002', 'Camisa Caballero', 'Lisa Color Blanco', 35.99, 10);
insert into Productos values ('CC0003', 'Camisa Caballero', 'Lisa Color Azul', 35.99, 10);
insert into Productos values ('AS0002', 'Abrigo Señora', 'Piel Color Negro', 120.75, 15);
insert into Productos values ('AS0003', 'Abrigo Señora', 'Ante Color Marrón', 90.95, 35);
insert into Productos values ('PS0001', 'Pantalón Señora', 'Vaquero', 30.90, 30);
insert into Productos values ('PS0002', 'Pantalón Señora', 'Lino', 39.90, 40);
insert into Vender values ('111','PC0001',24,TO_DATE('2011/10/10', 'YYYY/MM/DD'));
insert into Vender values ('111','PC0002',48,TO_DATE('2011/03/22', 'YYYY/MM/DD'));
insert into Vender values ('111','CC0001',20,TO_DATE('2011/09/01', 'YYYY/MM/DD'));
insert into Vender values ('111','AS0001',12,TO_DATE('2011/10/03', 'YYYY/MM/DD'));
insert into Vender values ('222','AS0001',34,TO_DATE('2011/01/22', 'YYYY/MM/DD'));
insert into Vender values ('222','AC0001',60,TO_DATE('2011/09/06', 'YYYY/MM/DD'));
insert into Vender values ('222','AS0002',21,TO_DATE('2011/11/10', 'YYYY/MM/DD'));
insert into Vender values ('333','AC0001',15,TO_DATE('2011/02/18', 'YYYY/MM/DD'));
insert into Vender values ('333','AC0002',80,TO_DATE('2011/02/09', 'YYYY/MM/DD'));
insert into Vender values ('333','AC0002',12,TO_DATE('2011/02/23', 'YYYY/MM/DD'));
insert into Vender values ('333','CC0003',45,TO_DATE('2011/06/17', 'YYYY/MM/DD'));
insert into Vender values ('333','CC0003',10,TO_DATE('2011/06/09', 'YYYY/MM/DD'));
insert into Vender values ('444','CC0001',75,TO_DATE('2011/06/08', 'YYYY/MM/DD'));
insert into Vender values ('444','PC0001',60,TO_DATE('2011/01/19', 'YYYY/MM/DD'));
insert into Vender values ('555','PC0002',35,TO_DATE('2011/02/02', 'YYYY/MM/DD'));
insert into Vender values ('555','PS0001',23,TO_DATE('2011/02/28', 'YYYY/MM/DD'));
insert into Vender values ('555','CC0002',67,TO_DATE('2011/05/25', 'YYYY/MM/DD'));
insert into Vender values ('666','CC0002',21,TO_DATE('2011/05/11', 'YYYY/MM/DD'));
insert into Vender values ('666','AS0003',23,TO_DATE('2011/04/16', 'YYYY/MM/DD'));
insert into Vender values ('666','CC0001',33,TO_DATE('2011/04/18', 'YYYY/MM/DD'));
insert into Vender values ('666','CC0001',50,TO_DATE('2011/03/11', 'YYYY/MM/DD'));
insert into Vender values ('666','CC0002',78,TO_DATE('2011/03/02', 'YYYY/MM/DD'));
insert into Vender values ('777','AC0002',39,TO_DATE('2011/03/07', 'YYYY/MM/DD'));
insert into Vender values ('777','AS0003',18,TO_DATE('2011/05/11', 'YYYY/MM/DD'));
insert into Vender values ('888','AS0002',55,TO_DATE('2011/03/19', 'YYYY/MM/DD'));
insert into Vender values ('888','PC0001',78,TO_DATE('2011/06/20', 'YYYY/MM/DD'));
insert into Vender values ('888','PS0002',33,TO_DATE('2011/04/10', 'YYYY/MM/DD'));
insert into Vender values ('888','PC0002',76,TO_DATE('2011/02/01', 'YYYY/MM/DD'));
insert into Vender values ('888','CC0003',50,TO_DATE('2011/01/30', 'YYYY/MM/DD'));
insert into Vender values ('999','AS0003',60,TO_DATE('2011/01/30', 'YYYY/MM/DD'));
insert into Vender values ('999','AC0002',47,TO_DATE('2011/03/31', 'YYYY/MM/DD'));
insert into Vender values ('999','PC0001',80,TO_DATE('2011/03/22', 'YYYY/MM/DD'));
Valora esta pregunta
0