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.oyar...@gmail.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.
>

Responder a