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/