[Pgsql-ayuda] Problema con funciones

Fernando Papa fpapa@claxson.com
Thu, 19 Jun 2003 15:34:55 -0300


Para mi esta bien como lo haces al principio, con el select:

> bd=3D> CREATE FUNCTION quita(varchar) RETURNS varchar AS
> bd-> 'DECLARE cadena alias for $1;
> bd'> begin
> bd'> select
> REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLAC
> E(REPLACE(REPLACE(
> bd'>    REPLACE($1, ''=E1'', ''a''), ''=C1'', ''A''),''=E9'',''e''),=20
> ''=C9'',''E''), ''=CD'', ''I''),''=ED'',''i''),
> bd'>     ''=D3'', ''O''),''=F3'',''o''),''=DA'',=20
> ''U''),''=FA'',''u''),''=F1'',''n'');
> bd'> end'
> bd-> LANGUAGE 'plpgsql';

pero es una funcion, asi que:
1) tenes que almacenar el "resultado" del select
2) tenes que devolver un valor

Asi que yo haria algo asi:

CREATE FUNCTION quita(varchar) RETURNS varchar AS
'
DECLARE=20
cadena alias for $1;
resultado varchar;     <--- agregado
begin
select=20
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(R=
EPLACE(
REPLACE($1, ''=E1'', ''a''), ''=C1'', ''A''),''=E9'',''e''),=20
''=C9'',''E''), ''=CD'', ''I''),''=ED'',''i''),
''=D3'', ''O''),''=F3'',''o''),''=DA'',=20
''U''),''=FA'',''u''),''=F1'',''n'') INTO resultado;     <--- Modificado =
el select.
RETURN resultado;   <--- Agregado
end' LANGUAGE 'plpgsql';

--
Fernando O. Papa
DBA
=20

> -----Mensaje original-----
> De: Adrian Galindo [mailto:agalindo@liceaga.facmed.unam.mx]=20
> Enviado el: jueves, 19 de junio de 2003 13:36
> Para: Pgsql-ayuda@tlali.iztacala.unam.mx
> Asunto: Re: [Pgsql-ayuda] Problema con funciones
>=20
>=20
> Fernando Papa wrote:
>=20
> >Pero a ese plpgsql le falta algo:
> > =20
> >
> Fernando, gracias por la ayuda. Pude avanzar un poco con esta parte.
>=20
> -------------------------------
> bd=3D> CREATE FUNCTION quita(varchar) RETURNS varchar AS
> bd-> 'DECLARE cadena alias for $1;
> bd'> begin
> bd'> select=20
> REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLAC
> E(REPLACE(REPLACE(
> bd'>    REPLACE($1, ''=E1'', ''a''), ''=C1'', ''A''),''=E9'',''e''),=20
> ''=C9'',''E''), ''=CD'', ''I''),''=ED'',''i''),
> bd'>     ''=D3'', ''O''),''=F3'',''o''),''=DA'',=20
> ''U''),''=FA'',''u''),''=F1'',''n'');
> bd'> end'
> bd-> LANGUAGE 'plpgsql';
> CREATE FUNCTION
>=20
> bd=3D> select quita('=E1=E9=ED=F1=F1');
> WARNING:  Error occurred while executing PL/pgSQL function quita
> WARNING:  line 3 at SQL statement
> ERROR:  SELECT query has no destination for result data.
>         If you want to discard the results, use PERFORM instead.
> -------------------------
>=20
> Sin embargo al querer usar el PERFORM:
> bd=3D> PERFORM quita('=E1=E9=ED=F1=F1');
> ERROR:  parser: parse error at or near "PERFORM" at character 1
>=20
> =BFAlguna idea?
>=20
> Gracias de antemano.
> Saludos.
> Adri=E1n.
>=20
> _______________________________________________
> Pgsql-ayuda mailing list
> Pgsql-ayuda@tlali.iztacala.unam.mx
> http://tlali.iztacala.unam.mx/mailman/listinfo/pgsql-ayuda
>=20