Re: lista de definicion de columna ¿que es?

From: GABRIEL COLINA <colina_movil(at)yahoo(dot)com>
To: jeferson alvarez <jalvarez(at)renova(dot)com(dot)pe>, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: lista de definicion de columna ¿que es?
Date: 2007-02-09 01:08:33
Message-ID: 82705.21011.qm@web34701.mail.mud.yahoo.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Esta es una funcion que me retorna la ficha de un articulo , dada las condiciones de los parametros, lo que es obligatorio es que las columnas del select existan todas en la consulta que esta luego del setof, si agregas una en la funcion debe estar representada en la consulta, si te fijas abajo de este ejemplo te muestro que la view "central"."cficha_articulo" contiene todas las columnas que se incluyen en la funcion,
puede la view tener mas pero no menos, tengeso ejemplos mas simples, pero este me gusta, por que a pesar de tener sum, case,group union order esto lo uso con una tabla de 200000 items de articulos, que tienen transacciones de varios locales y es un balaso
de rapido
y mas con postgres 8.2

un abrazo

CREATE OR REPLACE FUNCTION "central"."fnc_ficha_articulo" (idart text, dfecha date, nlocal integer) RETURNS SETOF "central"."cficha_articulo" AS
$body$
SELECT cmovimientos_stock.id_local, cmovimientos_stock.sucursal, cmovimientos_stock.id_lin,
cmovimientos_stock.documento, cmovimientos_stock.empresa, cmovimientos_stock.serie,
cmovimientos_stock.numero, cmovimientos_stock.fecha, cmovimientos_stock.id_articulo,
cmovimientos_stock.entradas, cmovimientos_stock.salidas, (sum(cmovimientos_stock1.entradas) -
sum(cmovimientos_stock1.salidas)) AS saldos
FROM central.cmovimientos_stock, central.cmovimientos_stock1
WHERE (((cmovimientos_stock.fecha > cmovimientos_stock1.fecha) AND
((cmovimientos_stock.id_articulo)::text = (cmovimientos_stock1.id_articulo)::text)) OR
(((cmovimientos_stock.fecha = cmovimientos_stock1.fecha) AND
((cmovimientos_stock.id_articulo)::text = (cmovimientos_stock1.id_articulo)::text)) AND
(cmovimientos_stock.id_lin >= cmovimientos_stock1.id_lin))) and cmovimientos_stock.id_articulo = $1
and cmovimientos_stock1.id_articulo = $1
and CASE WHEN $3 = 0 THEN cmovimientos_stock.id_local >= $3
ELSE cmovimientos_stock.id_local = $3 END and CASE WHEN $3 = 0 THEN cmovimientos_stock1.id_local >= $3
ELSE cmovimientos_stock1.id_local = $3 END and cmovimientos_stock.fecha >= $2
GROUP BY cmovimientos_stock.id_local, cmovimientos_stock.sucursal, cmovimientos_stock.id_articulo,
cmovimientos_stock.id_lin, cmovimientos_stock.documento, cmovimientos_stock.empresa,
cmovimientos_stock.serie, cmovimientos_stock.numero, cmovimientos_stock.fecha, cmovimientos_stock.entradas,
cmovimientos_stock.salidas, cmovimientos_stock.categoria_empresa
ORDER BY cmovimientos_stock.id_articulo, cmovimientos_stock.fecha, cmovimientos_stock.id_lin;
$body$
LANGUAGE 'sql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;


CREATE OR REPLACE VIEW "central"."cficha_articulo" (
id_local,
sucursal,
id_lin,
documento,
empresa,
serie,
numero,
fecha,
id_articulo,
entradas,
salidas,
saldos)
AS
SELECT cmovimientos_stock.id_local, cmovimientos_stock.sucursal,
cmovimientos_stock.id_lin, cmovimientos_stock.documento,
cmovimientos_stock.empresa, cmovimientos_stock.serie,
cmovimientos_stock.numero, cmovimientos_stock.fecha,
cmovimientos_stock.id_articulo, cmovimientos_stock.entradas,
cmovimientos_stock.salidas, (sum(cmovimientos_stock1.entradas) -
sum(cmovimientos_stock1.salidas)) AS saldos
FROM central.cmovimientos_stock, central.cmovimientos_stock1
WHERE (((cmovimientos_stock.fecha > cmovimientos_stock1.fecha) AND
((cmovimientos_stock.id_articulo)::text =
(cmovimientos_stock1.id_articulo)::text)) OR (((cmovimientos_stock.fecha =
cmovimientos_stock1.fecha) AND ((cmovimientos_stock.id_articulo)::text =
(cmovimientos_stock1.id_articulo)::text)) AND (cmovimientos_stock.id_lin >=
cmovimientos_stock1.id_lin)))
GROUP BY cmovimientos_stock.id_articulo, cmovimientos_stock.fecha,
cmovimientos_stock.id_lin, cmovimientos_stock.id_local,
cmovimientos_stock.sucursal, cmovimientos_stock.documento,
cmovimientos_stock.empresa, cmovimientos_stock.serie,
cmovimientos_stock.numero, cmovimientos_stock.entradas,
cmovimientos_stock.salidas, cmovimientos_stock.categoria_empresa
ORDER BY cmovimientos_stock.id_articulo, cmovimientos_stock.fecha,
cmovimientos_stock.id_lin;

jeferson alvarez <jalvarez(at)renova(dot)com(dot)pe> escribió:
el postgre me devuelve este error:
"ERROR: 42601: se requiere una lista de definición de columnas para
funciones que retornan «record»"

alguien que pudiera darme una pista?

---------------------------(fin del mensaje)---------------------------
TIP 7: no olvides aumentar la configuración del "free space map"

__________________________________________________
Correo Yahoo!
Espacio para todos tus mensajes, antivirus y antispam ¡gratis!
Regístrate ya - http://correo.espanol.yahoo.com/

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message GABRIEL COLINA 2007-02-09 01:17:05 Re: aun con problemas en funcion que retorna un conjunto de registros
Previous Message jeferson alvarez 2007-02-08 23:53:59 aun con problemas en funcion que retorna un conjunto de registros