Amigos no me quedo muy claro  he probado pero nada no se si me ayudar, como 
creo un cursor con  dos columna o las que necesite??, luego quiero retornar 
este cursor despues de haberlo manipulado como se hace??
 
Saludos

Date: Fri, 21 Nov 2008 08:41:11 -0500From: [EMAIL PROTECTED]: [EMAIL 
PROTECTED]: Re: [pgsql-es-ayuda] Retornar cursorCC: [EMAIL PROTECTED] compa... 
bueno la diferencia no es mucha... es básicamente como vayas el cursor... aqui 
te dejo un ejemplo de una Función, si vas a hacer un select de la función, 
esata debe tener más de dos tipos de parámetro OUT, como el ejemplo, espero te 
sirva
CREATE OR REPLACE FUNCTION spnmcalpromconcepto  (    IN PSiCodEmpr INTEGER,    
-- Codigo de Empresa    IN PDeCodEmpl NUMERIC,        -- Codigo del empleado    
IN PStNroCont CHARACTER VARYING,      -- Número de Contrato    IN PDtFecInic 
TIMESTAMP,    -- Fecha Inicial del calculo    IN PDtFecFina TIMESTAMP,    -- 
Fecha Final del calculo    IN PSiCodConc INTEGER,        -- Codigo del concepto 
a promediar    IN PStTipProm CHARACTER VARYING,    -- Indicador de si es con el 
valor pagado o el valor real    OUT PDeValProm NUMERIC,  -- Base de liquidacion 
    OUT PStValor CHARACTER VARYING --ESTA VARIABLE NO SIRVE PARA NADA, SOLO SE 
PONE PARA PODER RETORNAR UN CONJUNTO DE DATOS    )    RETURNS 
RECORDAS$BODY$DECLARE    -- Declara variables del cursor    v_LDeSumValo 
NUMERIC(28,2);      -- Valor acumulado    v_DeValProm  NUMERIC(16,2) := 0;  -- 
Base de liquidacion    -- Declara cursores    CurPromReal refcursor;    
CurPromAcum refcursor;    BEGIN    open CurPromReal FOR        (SELECT 
SUM(val_real) as val_real        FROM nm_preno        WHERE nm_preno.cod_empr = 
PSiCodEmpr AND            nm_preno.cod_empl = PDeCodEmpl AND            
nm_preno.nro_cont = PStNroCont AND            nm_preno.cod_conc = PSiCodConc 
AND            nm_preno.fec_acum >= PDtFecInic AND            nm_preno.fec_acum 
<= PDtFecFina        UNION        SELECT SUM(val_real) as val_real        FROM 
nm_acumu        WHERE nm_acumu.cod_empr = PSiCodEmpr AND            
nm_acumu.cod_empl = PDeCodEmpl AND            nm_acumu.nro_cont = PStNroCont 
AND            nm_acumu.cod_conc = PSiCodConc AND            nm_acumu.fec_acum 
>= PDtFecInic AND            nm_acumu.fec_acum <= PDtFecFina);                
open CurPromAcum FOR        (SELECT SUM(val_acum) as val_acum        FROM 
nm_preno        WHERE nm_preno.cod_empr = PSiCodEmpr AND            
nm_preno.cod_empl = PDeCodEmpl AND            nm_preno.nro_cont = PStNroCont 
AND            nm_preno.cod_conc = PSiCodConc AND            nm_preno.fec_acum 
>= PDtFecInic AND            nm_preno.fec_acum <= PDtFecFina        UNION       
 SELECT SUM(val_acum) as val_acum        FROM nm_acumu        WHERE 
nm_acumu.cod_empr = PSiCodEmpr AND            nm_acumu.cod_empl = PDeCodEmpl 
AND            nm_acumu.nro_cont = PStNroCont AND            nm_acumu.cod_conc 
= PSiCodConc AND            nm_acumu.fec_acum >= PDtFecInic AND            
nm_acumu.fec_acum <= PDtFecFina);    FETCH CurPromAcum INTO v_LDeSumValo;    
WHILE FOUND LOOP    begin        IF NOT v_LDeSumValo IS NULL THEN        begin  
          v_DeValProm := v_DeValProm + v_LDeSumValo;        end;        end if; 
       fetch CurPromAcum INTO v_LDeSumValo;    end;    END LOOP; -- Fdel while 
del cursor    CLOSE CurPromAcum;    PDeValProm := v_DeValProm;        END; -- 
Fdel procedimiento;$BODY$  LANGUAGE 'plpgsql' VOLATILE  COST 100;  ALTER 
FUNCTION spnmcalpromconcepto (    IN PSiCodEmpr INTEGER,    -- Codigo de 
Empresa    IN PDeCodEmpl NUMERIC,        -- Codigo del empleado    IN 
PStNroCont CHARACTER VARYING,      -- Número de Contrato    IN PDtFecInic 
TIMESTAMP,    -- Fecha Inicial del calculo    IN PDtFecFina TIMESTAMP,    -- 
Fecha Final del calculo    IN PSiCodConc INTEGER,        -- Codigo del concepto 
a promediar    IN PStTipProm CHARACTER VARYING,    -- Indicador de si es con el 
valor pagado o el valor real    OUT PDeValProm NUMERIC,  -- Base de liquidacion 
    OUT PStValor CHARACTER VARYING    )    OWNER TO postgres;
2008/11/21 Fernando Siguenza <[EMAIL PROTECTED]>

Amigos acudo a ustedes a ver si me pueden orientar en lo que necesito.Quiero 
crear una funcion en la que me retorne varios registros bueno lo que tengo es 
dos tablas cabecera,detalle necesito en la funcion hacer un select de estas 
tablas, recorrer los registros que retorna este select y crear me imagino un 
cursor en el cual pueda ingresar los datos del select mas otros 
calculosentonces..Cual es la diferencia exacta entre cursor, refcursor o setof 
record para retornar datos?Como creo un cursor con ciertos campos algo asi 
cursor cResultado (cuenta varchar,saldo integer)??luego como manipulo este 
cursor es decir aderir filas modificar etc etc?y como retorno este cursor o 
tengo que retornar setof record no se?Ahora la ultima pregunta en c# 
simplemente llamaria a la funcion y los datos retornados los manejaria como 
datatable???Espero que me puedan ayudar gracias por su ayuda

See how Windows® connects the people, information, and fun that are part of 
your life-- Atentamente,______________________________ERIK FERNEY CUBILLOS 
GARCIAIng. Desarrollo - Kactus HRDIGITAL WARE LTDA.Calle 72 No. 12-65 Piso 2 
Bogotá, Colombia [EMAIL PROTECTED]
_________________________________________________________________
Stay up to date on your PC, the Web, and your mobile phone with Windows Live
http://clk.atdmt.com/MRT/go/119462413/direct/01/

Responder a