Re: problema con variable y nombre de columna en funcion

From: Julio Rivero <jcrmlima(at)gmail(dot)com>
To: Miguel <mmiranda(at)123(dot)com(dot)sv>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: problema con variable y nombre de columna en funcion
Date: 2005-10-24 17:11:11
Message-ID: d34a12b60510241011w6441804ane11c0af3bc802110@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Existe el tipo de dato int???...
no deberia ser int2, int4 o en todo caso int8 dependiendo del tamaño
longitud de la variable...

On 10/24/05, Miguel <mmiranda(at)123(dot)com(dot)sv> wrote:
>
> Saludos listeros, tengo un extraño problema con el nombre de una
> variable que uso dentro de una funcion y una columna de una tabla que
> utilizo dentro de la misma funcion, el tema es que la variable se llama
> igual que la columna y por alguna razon postgres interpreta como error
> cuando quiero utilizar esa columna en un inner join, anexo extracto del
> codigo:
>
>
> CREATE OR REPLACE FUNCTION get_credit_time("varchar", "varchar",
> "varchar", "varchar")
> RETURNS credit_time AS
> $BODY$
> DECLARE
> -- parametros recibidos
> pin ALIAS FOR $1;
> ani ALIAS FOR $2;
> dni ALIAS FOR $3;
> h323confid ALIAS FOR $4;
>
> /**
> * variables para el funcionamiento
> * de la funcion
> */
>
> r credit_time%rowtype; --esta variable se utilizara para devolver la
> informacion
> -- idplan int; --idplan del pin, ESTA ES LA VARIABLE PROBLEMATICA

idplan int2;

-- idhorario int; --idhorario para calculo de tarifa

idhorario int2;

[.. mas variables ...blablabla...]
>
> BEGIN
>
> --obtenemos el idplan del pin
>
> SELECT INTO idplan pines.idplan -- AQUI SE USA POR PRIMERA VEZ
> FROM pines
> WHERE pines.pin = pin;
>
> IF NOT FOUND THEN
> r.cod_retorno := 103; --pin sin plan
> r.credit_time := 0;
> RETURN r;
> END IF;
>
> --obtenemos banderas de redondear cobro
> --y si este plan tiene promocion llamada gratis
>
> SELECT INTO redondear, llamada_gratis
> pl.redondear, pl.llamada_gratis
> FROM planes pl
> WHERE pl.idplan = idplan;
>
> IF redondear IS NULL THEN -- significa que no devolvio nada
> r.cod_retorno := 104; --plan no configurado
> r.credit_time := 0; --llamada no permitida
> RETURN r;
> END IF;
>
> --averiguar banda origen
> SELECT INTO idbanda_origen b.idbanda
> FROM bandas b
> INNER JOIN bandas_detalle bd USING (idplan,idbanda) -- AQUI ES DONDE
> POSTGRES SE CONFUNDE
> WHERE b.idplan = idplan
> AND CAST(RPAD(ani, 20, 0) AS numeric(20,0))
> BETWEEN bd.inicio_serie AND bd.fin_serie
> ORDER BY bd.fin_serie - bd.inicio_serie
> LIMIT 1;
>
> IF NOT FOUND THEN
> r.cod_retorno := 9; --plan no configurado para esta banda origen,
> r.credit_time := 0; --llamada no permitida
> RETURN r;
> END IF;
>
>
> al correrlo me devuelve el siguiente error:
> radius(# 'americatel');
> ERROR: syntax error at or near "$1" at character 70
> QUERY: SELECT b.idbanda FROM bandas b INNER JOIN bandas_detalle bd
> USING ( $1 ,idbanda) WHERE b.idplan = $2 AND CAST(RPAD( $3 , 20, 0) AS
> numeric(20,0)) BETWEEN bd.inicio_serie AND bd.fin_serie ORDER BY
> bd.fin_serie - bd.inicio_serie LIMIT 1
> CONTEXT: PL/pgSQL function "get_credit_time" line 56 at select into
> variables
> LINE 1: ...ROM bandas b INNER JOIN bandas_detalle bd USING ( $1 ,idband...
>
> ^
>
>
> Como ven en el using me señala el problema, sera porque la variable
> idplan se llama igual que la columna de la tabla que enlace en el join ?
> comentarios?
>
> ---------------------------(fin del mensaje)---------------------------
> TIP 9: el optimizador ignorará el uso de recorridos de índice si los
> tipos de datos de las columnas no coinciden
>

--
Saludos

Att,
Julio Rivero
Movil: 98817321

"Aprende a convivir contigo mismo"

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Miguel 2005-10-24 17:27:54 Re: problema con variable y nombre de columna en funcion
Previous Message Víctor Pérez Juárez 2005-10-24 17:06:17 Capacidad de PostgreSQL en alto volumen de transacciones