Skip site navigation (1) Skip section navigation (2)

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 (view raw or flat)
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

pgsql-es-ayuda by date

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

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group