Re: Error 42601 al crear una funcion

From: Jairo Sánchez <jairosll(at)gmail(dot)com>
To: "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:13:14
Message-ID: 59f843f50703121213g5ab310f4l4d2d749d0d5b915e@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

On 3/12/07, Jairo Sánchez <jairosll(at)gmail(dot)com> wrote:
> ---------- Forwarded message ----------
> From: Jairo Sánchez <jairosll(at)gmail(dot)com>
> Date: Mar 12, 2007 11:42 AM
> Subject: Re: [pgsql-es-ayuda] Error 42601 al crear una funcion
> To: Miguel Bernilla Sánchez <mbernilla(at)sedapal(dot)com(dot)pe>
>
>
> On 3/12/07, Miguel Bernilla Sánchez <mbernilla(at)sedapal(dot)com(dot)pe> wrote:
> >
> >
> > ============
> > Con fecha Lunes, 12 de Marzo de 2007, 10:20:06 a.m., escribió:
> >
> > > Hola todos,
> >
> > > necesito una ayuda para vislumbrar un error de sintaxis el cual no logro ver.
> >
> > > Esta es la funcion que estoy creando:
> > > CREATE FUNCTION cargausu(
> > > tb text,
> > > c1 text,
> > > c2 text,
> > > c3 text,
> > > c4 text,
> > > c5 text,
> > > c6 text,
> > > c7 text,
> > > c8 text,
> > > c9 text,
> > > c10 text,
> > > c11 text,
> > > c12 text,
> > > c13 text,
> > > c14 text,
> > > c16 text,
> > > c17 text,
> > > c18 text,
> > > c19 text,
> > > c20 text
> > > ) RETURNS text AS
> > > $$
> > > DECLARE
> > > tabla ALIAS FOR $1;
> > > edad ALIAS FOR $8;
> > > duplicado RECORD;
> >
> >
> > > BEGIN
> > >
> > > IF tabla == 'US' THEN
> > > SELECT consecutivo,edad INTO duplicado FROM usuarios where
> >
> > Estas seleccionado "consecutivo,edad" (dos campos) y pretendes
> > guardarlo en una sola variable "INTO duplicado"...
> >
> Hum! pero yo defino duplicados como RECORD no se supone que el toma el
> registro completo y no solo un campo.
>
> Debería cambiarlo a ROWTYPE? es que necesito los dos campos, que me sugieren?
>
> Gracias
>
> >
> > > ( codentadm = $2 AND
> > > tipid = $3 AND
> > > numid = $4 AND
> > > tipusu = $5 AND
> > > tipafi = $6 AND
> > > codocu = $7 AND
> > > uniedad = $9 AND
> > > sexo = $10 AND
> > > coddep = $11 AND
> > > codmun = $12 AND
> > > zona = $13
> > > );
> > > IF found THEN
> > > IF (edad-duplicado.edad =< 1 AND edad-duplicado.edad => 1) THEN
> > > INSERT INTO
> > > errores(codentadm,coddep,codmun,tiperr,criterio,fechaval,regnum,trimanio)
> > > VALUES('$2','$11','$12','El Registro presenta
> > > Duplicidad','D01',date(now()),duplicado.consecutivo,'$13');
> > >
> > > RETURN "Error";
> > > END IF;
> > > END IF;
> > > END IF;
> > > BEGIN
> > > INSERT INTO usuarios
> > > (codentadm,tipid,numid,tipusu,tipafi,codocu,edad,uniedad,sexo,coddep,codmun,zona,trimanio)
> > > VALUES
> > > ('$2','$3','$4','$5','$6','$7','$8','$9','$10','$11','$12','$13','$14');
> > > RETURN "OK";
> > > EXCEPTION WHEN unique_violation THEN
> > > RETURN "Se totio";
> > > -- do nothing
> > > END;
> >
> > > END;
> > > $$
> > > LANGUAGE plpgsql;
> >
> > > y el error que me entrega es:
> > > ERROR: error de sintaxis en o cerca de «$1»
> > > Estado SQL:42601
> > > Contexto:SQL statement in PL/PgSQL function "cargausu" near line 34
> >
> > > he remplazado, quitado, cambiado de todo y en todos lados pero no
> > > logro encontrarlo.
> >
> > > Agradezco su ayuda.
> >
> > > JSLL
> >
> > > ---------------------------(fin del
> > > mensaje)---------------------------
> > > TIP 10: visita nuestro canal de IRC #postgresql-es en irc.freenode.net
> >
> >
> >
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.

Gracias a Miguel Bernilla por su comentario.

JSLL

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Mario A Wojcik 2007-03-12 19:20:21 Re: Mono. Postgresql y VB OT
Previous Message Yacatematrix 2007-03-12 18:36:01 TRUNCATE y tiempos