Un saludo al foro, este es mi primer post y pues espero ser lo suficientemente claro.
Tengo un procedimiento almacenado (En firebird 1.5) el cual me crea un ciclo de horas, las cuales uso en diferentes consultas y en otros procedimientos, al realizar un "select" sobre este obtengo algo como esto:
Parámetros horaini = '7:00', horafin ='8:00', intervalo = 2 (el valor de intervalo se multiplica por 5) y los demás parámetros son null
Código SQL
[-] Select HoraSalida from P_ObtenerHoras('7:00','8:00',2,Null,Null)
Código:
HoraSalida
7:00 a.m.
7:10 a.m.
7:20 a.m.
7:30 a.m.
7:40 a.m.
7:50 a.m.
8:00 a.m.
y tengo una tabla llamada TUnidades y contiene 4 campos los cuales son FFecha, FHora, FNumeroUnidad, FNombre, al hacer un "select" obtengo algo como esto:
Query_TUnidades:
Código SQL
[-]select Fhora from TUnidades where FFecha = cast('now' as date) and FNumeroUnidad = 1
Código:
Ffecha
7:10 a.m.
7:30 a.m.
7:50 a.m.
8:00 a.m.
ahora... quiero filtrar los resultados del procedimiento cruzandolo con la tabla, y que solo me muestre los valores que no estén en el resultado del query realizado en la tabla es decir los siguientes valores:
Código SQL
[-]Select HoraSalida from P_ObtenerHoras('7:00','8:00',2,Null,Null) Where HoraSalida <> Query_TUnidades
Código:
HoraSalida
7:00 a.m.
7:20 a.m.
7:40 a.m.
a continuación mando el codigo del procedimiento almacenado.
Código SQL
[-]SET TERM ^^ ;
CREATE PROCEDURE P_OBTENERHORAS (
HORA_INI Time,
HORA_FIN Time,
INTERVALO Integer,
PARADAINI Time,
PARADAFIN Time)
returns (HORASALIDA Time)
AS
begin
HORASALIDA= HORA_INI;
SUSPEND;
INTERVALO = INTERVALO * 300;
WHILE(HORASALIDA< HORA_FIN ) DO
BEGIN
if (((paradaini-(2*intervalo)) < HORASALIDA) and ((paradafin-300) > HORASALIDA)) then
HORASALIDA= paradafin;
else
HORASALIDA=HORASALIDA+ INTERVALO;
SUSPEND;
END
end
^^
SET TERM ; ^^