From: | "Jaime Casanova" <systemguards(at)gmail(dot)com> |
---|---|
To: | "eduardo cabrera" <ecabreraf(at)gmail(dot)com> |
Cc: | pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Re: comportamiento extraño |
Date: | 2007-07-22 16:00:17 |
Message-ID: | c2d9e70e0707220900y522d96c1lfc4da9afa811bcab@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
On 7/22/07, eduardo cabrera <ecabreraf(at)gmail(dot)com> wrote:
> tengo la siguiente funcion
>
> CREATE FUNCTION stock_docu ( BIGINT, BIGINT, TIMESTAMP, TIMESTAMP) RETURNS
> NUMERIC AS '
> DECLARE
> articulo_id ALIAS FOR $1;
> sucursal_id ALIAS FOR $2;
> fecha_i ALIAS FOR $3;
> fecha_t ALIAS FOR $4;
> foo NUMERIC = 0;
> parcial NUMERIC;
> tabla guiadespacho_detalle%ROWTYPE;
> BEGIN
> parcial := 0;
> FOR tabla IN
> SELECT idguiadespacho, cantidad, idarticulo
> FROM guiadespacho_detalle
> WHERE idarticulo = articulo_id
> AND idguiadespacho IN ( SELECT id
> FROM guiadespacho
> WHERE numguiadespacho != ''''
> AND numguiadespacho is not null
> AND estado = ''t''
> AND idsucursal = sucursal_id
> )
> LOOP
> RAISE NOTICE '' - c% | p% | s% %'', tabla.cantidad, parcial, foo,
> tabla.idarticulo;
> foo := foo + 1;
> parcial := CAST(parcial AS NUMERIC) + CAST(tabla.idarticulo AS NUMERIC);
> RAISE NOTICE '' - c% | p% | s%'', tabla.cantidad, parcial, foo;
> RAISE NOTICE '' - - -'';
> END LOOP;
> return foo;
> END;
> ' LANGUAGE 'plpgsql';
>
>
> eso esta bien y todo lo RARO es que la cantidad queda almacenada en
> tabla.idarticulo y si cambio el orden o quito argumentos en el "SELECT
> idguiadespacho, cantidad, idarticulo" se comporta distinto (nunca como
> quiero)
>
que campos tiene la tabla guiadespacho_detalle? porque el record tabla
fue declarado como de tipo guiadespacho_detalle%ROWTYPE, pero en el
select no te arriesgas a hacer un "SELECT *" sino que pones los
nombres de los campos. Si la tabla tiene mas de 3 campos probablemente
estas poniendo esos en los sitios incorrectos, eso quiza explique
porque dices que funciona distinto si sacas los dos primeros campos
del select.
intenta usando "select *" o declarando la variable tabla como record
--
Atentamente,
Jaime Casanova
"Programming today is a race between software engineers striving to
build bigger and better idiot-proof programs and the universe trying
to produce bigger and better idiots.
So far, the universe is winning."
Richard Cook
From | Date | Subject | |
---|---|---|---|
Next Message | Gabriel Hermes Colina Zambra | 2007-07-22 17:29:57 | Re: Cuestion con CaseSensitive |
Previous Message | Alvaro Herrera | 2007-07-22 15:34:00 | Re: ajuste de postgres |