create or replace procedure park(lv_dia number,lv_mes number,lv_anio number)
is
cursor cr
is
--Este es el cursor
select * from parkeo
--entrada es el campo de la tabla, (ddmmyyyy) eso es el formato de fecha
where to_char(entrada,'ddmmyyyy') like '%'||(to_char(decode(lv_dia,0,null,
--el decode funciona como que fuera un if, esto me sirbe para el query, ejemplo si la fecha que se manda
--como parametro es 1/1/2012, entonces lo que hace es esto 01/01/2012, podes darte cuenta que le pone
--un cero adelante del dia y del mes, esto lo hice así pq el like no funciona si lo dejo así 1/1/2012
1, '0'||lv_dia,
2, '0'||lv_dia,
4, '0'||lv_dia,
5, '0'||lv_dia,
6, '0'||lv_dia,
7, '0'||lv_dia,
8, '0'||lv_dia,
9, '0'||lv_dia,
lv_dia))
||to_char(decode(lv_mes,0,null,
1, '0'||lv_mes,
2, '0'||lv_mes,
3, '0'||lv_mes,
4, '0'||lv_mes,
5, '0'||lv_mes,
6, '0'||lv_mes,
7, '0'||lv_mes,
8, '0'||lv_mes,
9, '0'||lv_mes,
lv_mes))
||TO_CHAR(lv_anio)||'%');
mreg cr%rowtype;
contador number:= 1;
existencia number:=0;
begin
--vacio la tabla park2, que es donde pongo el conteo
delete PARK2 ;
open cr;
loop fetch cr into mreg;
exit when cr%notfound;
--aqui obtengo la hora de la fecha de entrada
contador:= to_number(to_char(mreg.entrada, 'HH24'));
--aqui digo que si la hora de entrada es menor que la hora de salida, entonces
--que haga el insert o el update, depende del if
--ejemplo: si ya tengo un carro ingresado a de 1:00 - 2:00 (esto es en el campo rango), entonces
hace el update
--sino se va a la parte del insert
--cualquiera de las variantes le agrega uno al contador.
while contador <= to_number(to_char(mreg.salida, 'HH24'))
loop
select count(*) into existencia
from park2
where rango = contador||':00 - '||contador||':59';
if ( existencia = 0 ) then
--insert
insert into PARK2 values (contador||':00 - '||contador||':59',1);
COMMIT;
else
--update
update park2 set cuenta = (select cuenta + 1 from park2
where rango = contador||':00 - '||contador||':59')
where rango = contador||':00 - '||contador||':59';
COMMIT;
end if ;
contador:= contador + 1;
end loop;
end loop;
close cr;
end;
Que tal compañero, aquí te dejo el code para el parqueo! Saludos y suerte en el exa.!