Re: Error 42601 al crear una funcion

From: Alvaro Herrera <alvherre(at)commandprompt(dot)com>
To: Jairo Sánchez <jairosll(at)gmail(dot)com>
Cc: "pgsql-es-ayuda(at)postgresql(dot)org" <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Error 42601 al crear una funcion
Date: 2007-03-12 19:25:44
Message-ID: 20070312192544.GA7700@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Jairo Sánchez escribió:

> Bueno, no se por que pero el error es generado por la declaración de
> los dos parámetros $1 y $8
> por que se los quite y puse el nombre del parámetro dentro de la
> sentencias y funciono.

El problema es el siguiente. Primero que nada observa el mensaje de
error que obtengo yo. Lo que hice fue tomar tu funcion y ponerla en un
archivo /tmp/foo, luego agregar los CREATE TABLE necesarios para las
tablas que mencionas en la funcion. Luego ejecuto el archivo:

alvherre=# \i /tmp/foo
BEGIN
CREATE TABLE
CREATE TABLE
psql:/tmp/foo:75: ERROR: error de sintaxis en o cerca de «$1»
LINEA 1: ...rios (codentadm,tipid,numid,tipusu,tipafi,codocu, $1 ,unieda...
^
CONSULTA: INSERT INTO usuarios (codentadm,tipid,numid,tipusu,tipafi,codocu, $1 ,uniedad,sexo,coddep,codmun,zona,trimanio) VALUES ('$2','$3','$4','$5','$6','$7','$8','$9','$10','$11','$12','$13','$14')
CONTEXTO: SQL statement in PL/PgSQL function "cargausu" near line 36
ROLLBACK

Observa la linea "CONSULTA:" del mensaje de error, dice

"codocu, $1 ,unieda"

que ciertamente no es lo que esta en la funcion. Esta dice, en esa
parte:

codocu,edad,uniedad

Por lo tanto se puede inferir que el problema es que esta tomando ese
nombre de columna que le pasas al INSERT como si fuera la variable que
declaraste al principio.

La moraleja de esta historia: en PL/pgSQL, nunca declares variables que
se llamen igual que las columnas de tus tablas. Aca podrias cambiar
esta funcion poniendo "_edad ALIAS FOR $8" en el DECLARE, y no tendrias
el problema.

Eso es todo.

--
Alvaro Herrera http://www.CommandPrompt.com/
PostgreSQL Replication, Consulting, Custom Development, 24x7 support

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2007-03-12 19:34:23 Re: TRUNCATE y tiempos
Previous Message Mario A Wojcik 2007-03-12 19:20:21 Re: Mono. Postgresql y VB OT