duda/problema con query y funcion

From: Roberto Rodríguez Pino <rodpin(at)gmail(dot)com>
To: "pgsql-es-ayuda(at)postgresql(dot)org" <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: duda/problema con query y funcion
Date: 2008-09-22 22:19:31
Message-ID: 1222121971.11250.9.camel@pitufo
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Hola a todos!
El otro día preguntaba acerca de un problema que tenia con una función y
una query y no he logrado solucionarlo. En este correo va más acotado el
problema y la query en cuestión mucho más simplificado (cuando escribí
el correo anterior estaba algo angustiado :-S y no fui muy claro).
Tengo la siguiente query:

SELECT articulo.idarticulo, costoultimo.costoultimo
FROM articulo
LEFT OUTER JOIN costo USING (idarticulo)
LEFT OUTER JOIN (select costo.idarticulo, costoultimo from
costo,(select max(idcosto) as idcosto,idarticulo,max (fecha) from costo
where fecha<='25-08-2008' group by idarticulo) as fechacosto where
fechacosto.idcosto = costo.idcosto) as costoultimo USING (idarticulo)
where
(costo.flag = false and costo.fecha<='25-08-2008' and costo.idproveedor
is NULL) or (costo.flag=true and costo.fecha<='25-08-2008') or
(costo.flag = false and costo.fecha<='25-08-2008')
group by articulo.idarticulo, costoultimo.costoultimo
order by idarticulo

La cual da como resultado lo siguiente:

idarticulo | costoultimo
----------------+-------------
AGLDES222222 | 222
AGLDESBLA3 | 4500
AGLDESDESDES | 2
AGLDESDESDESE | 1
AGLDESDESDESS | 1
AGLTRUCRU2 | 7000
AGLTRUENCH23 | 11980
PINBAR11 | 11000
PINBARQWERTY | 20000
PINBARRR | 54342
PINOLESINTAZUL | 34553
QUICUASSSSSS | 11

resultado que espero y está correcto con mis expectativas.
Al usar esta misma query en una función, obtengo resultados distintos y
eso es lo que no entiendo ni logro ver donde esta el problema.
En el ejemplo de la funcion lo unico que hago es asignar el resultado de
la query anterior e imprimir los resultados, sin hacer ninguna
modificación.
La función en cuestión es:

CREATE OR REPLACE FUNCTION buscandoError(fecha date)
RETURNS void AS
$BODY$
DECLARE
inv_temp record;
BEGIN
DELETE FROM inventariototal;
FOR inv_temp IN
(SELECT articulo.idarticulo, costoultimo.costoultimo
FROM articulo
LEFT OUTER JOIN costo USING (idarticulo)
LEFT OUTER JOIN (select costo.idarticulo, costoultimo from
costo,(select max(idcosto) as idcosto,idarticulo,max (fecha) from costo
where fecha<=$1 group by idarticulo) as fechacosto where
fechacosto.idcosto = costo.idcosto) as costoultimo USING (idarticulo)
where
(costo.flag = false and costo.fecha<=$1 and costo.idproveedor is NULL)
or (costo.flag=true and costo.fecha<=$1) or (costo.flag = false and
costo.fecha<=$1)
group by articulo.idarticulo, articulo.descripcion,
costoultimo.costoultimo
order by idarticulo)
LOOP
raise notice 'Valor: % | %',inv_temp.idarticulo,inv_temp.costoultimo;
END LOOP;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;

El resultado del raise notice es:
NOTICE: Valor: AGLDES222222 | 222
NOTICE: Valor: AGLDESBLA3 | 3456
NOTICE: Valor: AGLDESDESDES | 2
NOTICE: Valor: AGLDESDESDESE | 1
NOTICE: Valor: AGLDESDESDESS | 1
NOTICE: Valor: AGLTRUCRU2 | 7000
NOTICE: Valor: AGLTRUENCH23 | 11980
NOTICE: Valor: PINBAR11 | 3245
NOTICE: Valor: PINBARQWERTY | 20000
NOTICE: Valor: PINBARRR | 54342
NOTICE: Valor: PINOLESINTAZUL | 34553
NOTICE: Valor: QUICUASSSSSS | 11

Luego si comparamos algunos valores, como por ejemplo para PINBAR11 en
la query tenemos como resultado 11000 y en la función 3245.
Si bien el valor 3245 existe en la base de datos, no corresponde a los
criterios que estoy ocupando y muestra de ello es el resultado de la
ejecución de la query de manera sola.
¿Donde está el problema? No lo logro ver :-(
Alguien me pega una mano por favor.
Agradecido de antemano.
Saludos!
Roberto
--
visita mi weblog!
http://trasto.hopto.org/weblog
softwarelibre(at)diinf
http://softwarelibre.diinf.usach.cl

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Manu 2008-09-22 23:17:00 Hay informacion del API C...
Previous Message Jaime Casanova 2008-09-22 18:29:57 Nuevas versiones menores liberadas