Ayuda con SP Postgresql 9.4

From: Felipe Contreras Oyarzún <fcontreras(dot)oyarzun(at)gmail(dot)com>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Ayuda con SP Postgresql 9.4
Date: 2016-09-11 21:58:16
Message-ID: CALjnVOCCoOEFiTQu-3J1kkG6zbm1sQB399nM9JsSUoB+O466Ow@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

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.

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Guillermo E. Villanueva 2016-09-12 10:42:22 Re: Ayuda con SP Postgresql 9.4
Previous Message mauricio pullabuestan 2016-09-09 22:46:27 Restar solamente el tiempo solapado