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. >