Esta forma no la puedo utilizar porque el numero de columnas a devolver en
la funcion es variable, por eso es que estoy tratando de devolver cursores.



Saludos,
 
Ing. Esneiker Enriquez Cabrera.
Excelencia en Software.
Desoft S.A. en Ciego de Ávila.
Joaquín de Agüero Esq. Calle 2. Ciego de Ávila. Cuba.
email:eenriq...@cav.desoft.cu
Teléfono: 53-33-266200


El 12/01/2010 8:11 AM, Yudelsy Castellón García escribió: 

 

 

De: Julio Cesar Rodriguez Dominguez [mailto:jura...@gmail.com] 
Enviado el: Monday, January 11, 2010 7:22 PM
Para: Yudelsy Castellón García
CC: pgsql-es-ayuda@postgresql.org
Asunto: Re: [pgsql-es-ayuda] RV: duda con funcion

 

Esa solución funciona muy bien cuando la función no precisa de parámetros de
entrada, porque cuando hago lo siguiente:

CREATE FUNCTION eliminar(parametro character varying, refcursor) RETURNS
refcursor AS '
declare micursor refcursor;
BEGIN
    OPEN micursor FOR SELECT * FROM nmusuario;
    RETURN micursor;
END;
' LANGUAGE plpgsql;

-- BEGIN;
SELECT eliminar('probando','funccursor');
FETCH ALL IN funccursor;
-- COMMIT;

me da como error ERROR:  cursor "funccursor" does not exist, la verdad es
que esto se hace muy simple en otros gestores de base de datos, no tengo
idea de por qué en postgres lo han complicado tanto.


Puedes utilizar el tipo de retorno setof record en  lugar de refcursor:

CREATE OR REPLACE FUNCTION mi_funcioin(IN id int, OUT campo1 int, OUT campo2
text) 
  RETURNS SETOF record AS
$BODY$
declare
begin
        return query SELECT campo10,campo20 FROM nmusuario where idUsuario =
id;
        return;
end;
$BODY$
  LANGUAGE 'plpgsql'

----
select * from mi_funcion(  5432  );



__________ Información de ESET NOD32 Antivirus, versión de la base de firmas
de virus 4755 (20100108) __________

ESET NOD32 Antivirus ha comprobado este mensaje.

http://www.eset.com



__________ Información de ESET NOD32 Antivirus, versión de la base de firmas
de virus 4755 (20100108) __________

ESET NOD32 Antivirus ha comprobado este mensaje.

http://www.eset.com

Responder a