problema con variable y nombre de columna en funcion

From: Miguel <mmiranda(at)123(dot)com(dot)sv>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: problema con variable y nombre de columna en funcion
Date: 2005-10-24 14:55:09
Message-ID: 435CF5CD.4060307@123.com.sv
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

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
idhorario int; --idhorario para calculo de tarifa
[.. 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?

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Erik Cubillos 2005-10-24 14:59:49 RE: No conecta a un Windows 2003 server
Previous Message Dario 2005-10-24 14:51:24 RE: No conecta a un Windows 2003 server