Re: Ayuda con SP Postgresql 9.4

From: "Guillermo E(dot) Villanueva" <guillermovil(at)gmail(dot)com>
To: Felipe Contreras Oyarzún <fcontreras(dot)oyarzun(at)gmail(dot)com>
Cc: pgsql-es-ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Ayuda con SP Postgresql 9.4
Date: 2016-09-12 10:42:22
Message-ID: CANm+PCC_jGLCKhtOAYNP6zHSSKOqHfwmnjKx2u9JewYQB2hXgQ@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Probá de cambiar tu returns por:
... RETURNS TABLE(idcliente integer, retorno integer, msg varchar) AS...

El 11 de septiembre de 2016, 18:58, Felipe Contreras Oyarzún <
fcontreras(dot)oyarzun(at)gmail(dot)com> escribió:

> Estimados,
>
> Por la siguiente me gustaria saber en que estoy fallando, ya que lo que
> espero de este SP es lo siguiente...
> Que me retorno idcliente como un varchar(36) aprox, retorno 0 o 1, y un
> mensaje puntual, pero al momento de procesarlo me arroja el error:
>
> RROR: se llamó una función que retorna un conjunto en un contexto que no
> puede aceptarlo
> CONTEXTO: función PL/pgSQL sp02_generacliente(character varying,character
> varying,character varying,character varying) en la línea 6 en RETURN QUERY
>
> ********** Error **********
>
> ERROR: se llamó una función que retorna un conjunto en un contexto que no
> puede aceptarlo
> SQL state: 0A000
> Context: función PL/pgSQL sp02_generacliente(character varying,character
> varying,character varying,character varying) en la línea 6 en RETURN QUERY
>
>
> ; El SP a continuacion.
> ; La funcion getId(iden) en el insert, genera un string de 35 caracteres,
> esa funciona OK :)
>
> CREATE OR REPLACE FUNCTION sp02_generaCliente
> (
> IN iden VARCHAR(255),
> IN nom VARCHAR(255),
> IN rut VARCHAR(255),
> IN correo VARCHAR(255)
> )
> RETURNS SETOF RECORD AS $$
> DECLARE idcliente VARCHAR(36);
> BEGIN
> IF (SELECT 1 FROM cliente WHERE cliente = iden)
> THEN
> RETURN QUERY SELECT NULL AS idcliente, 0 AS retorno, 'LA
> ABREVIACIÓN ' || iden || 'YA EXISTE.' AS msg;
> END IF;
> IF (SELECT 1 FROM cliente WHERE nombre = nom)
> THEN
> RETURN QUERY SELECT NULL AS idcliente, 0 AS retorno, 'EL CLIENTE '
> || nom || ' YA EXISTE.' AS msg;
> END IF;
> IF (SELECT 1 FROM cliente WHERE rut = rut)
> THEN
> RETURN QUERY SELECT NULL AS idcliente, 0 AS retorno, 'El RUT ' ||
> rut || ' YA EXISTE.' AS msg;
> ELSE
> INSERT INTO cliente (
> id_cliente, cliente, nombre, rut, correo, fecha_creacion,
> estado)
> VALUES
> (getId(iden), iden, nom, rut, correo, NOW(), TRUE) RETURNING
> id_cliente INTO idcliente;
> RETURN QUERY SELECT idcliente, 1 AS retorno, 'OK' AS msg;
>
> END IF;
> END;
> $$
> LANGUAGE plpgsql;
>
>
> Quedo atento.
> Saludos.
>

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Guillermo E. Villanueva 2016-09-12 11:23:43 Re: Restar solamente el tiempo solapado
Previous Message Felipe Contreras Oyarzún 2016-09-11 21:58:16 Ayuda con SP Postgresql 9.4