Ver Mensaje Individual
  #1  
Antiguo 13-08-2013
mjjj mjjj is offline
Miembro
 
Registrado: mar 2007
Posts: 652
Reputación: 18
mjjj Va por buen camino
Procedimiento con condiciones dinamicas

Estimados, utilizo Firebird 2.5, y tengo el siguiente procedimiento almacenado llamado inventario_resumen, con la variable de entrada bodegas de tipo varchar:

Código SQL [-]
begin

for select id_item, i_s.nombre, i_s.id_clasificacion from insumos_servicios I_S
INNER JOIN clasificaciones c on c.id_clasificacion = i_s.id_clasificacion
where que_es = 'T' AND estructura = 0 into :id_item, :nombre, :id_clasificacion do
begin
execute statement
'select coalesce(sum(cantidad * precio)/sum(iif(cantidad = 0,1,cantidad)),0),
coalesce(sum(cantidad),0) from inventario
where id_item ='||:id_item||' and id_bodega in '||(:bodegas)
into recio_medio, :cantidad_ingreso;


execute statement
'select coalesce(avg(precio),0), coalesce(sum(cantidad),0) from inventario_egreso
where id_item ='||:id_item||' and id_bodega in '||(:bodegas)
into recio_egreso, :cantidad_egreso;

suspend;
end
end

el cual lo llamo se la siguiente forma:

Código SQL [-]
select id_item, nombre, cantidad_ingreso - cantidad_egreso saldo, precio_medio,
(cantidad_ingreso - cantidad_egreso) * precio_medio subtotal from inventario_resumen (:bodegas)
where cantidad_ingreso > cantidad_egreso

donde bodegas tienes el formato por ejemplo: (1,2,5), que serian los id de las bodegas a consultar.
EL problema es que la condiciones de busqueda las hago al resultado de la consulta al agregarle por ejemplo estas lineas a la llamada del procedimiento.

Código SQL [-]
and id_clasificacion =:id_clasificacion
and nombre like :nombre

... pero de igual forma el procedimiento recorre cada uno de los registros de la tabla "insumos_servicios"

He pensado en agregar mas variables de entraqda al procedimiento, tal que las condiciones se realicen directamente a la consulta original y así evitar tener que procesar todos los registros de la tabla "insumos_servicios"
Hasta aquí todo va bien, pero surge un problema, que ocurre si el usuario desea listar todos los registros, las nuevas condiciones no podría sacarlas del query original, y estaría obligado siempre tener alguna condicioin, ya que no podria, por ejemplo, quitar la linea del procedimiento

Código SQL [-]
and nombre like :nombre

Espero se entienda y me puedan ayudar a resolver esto.
Gracias
Responder Con Cita