RE: [pgsql-es-ayuda] Ayuda con función record referenciada desde otra función

From: ALFONSO REYES <alfonsoreyescruz(at)hotmail(dot)com>
To: lista ayuda postgres <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: RE: [pgsql-es-ayuda] Ayuda con función record referenciada desde otra función
Date: 2009-04-14 22:52:46
Message-ID: BLU148-W7AFF5DC39DCEC0B11F87CDF7C0@phx.gbl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda


Estimados
Agradecería me ayuden, ya que quisiera realizar una función para reutilizarla y no escribir el mismo sql, cada vez que lo necesite
Nuevamente gracias por su ayuda...
Att Alfonso Reyes
From: alfonsoreyescruz(at)hotmail(dot)com
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: [pgsql-es-ayuda] Ayuda con función record referenciada desde otra función
Date: Tue, 14 Apr 2009 02:09:57 +0000

Estimada Lista
Espero me puedan ayudar indicándome como se debe llamar a una función record desde otra función, a continuación coloco las dos funciones
Cualquier ayuda es bienvenida.
Mil gracias de antemano...
/*********** Función record***********/
CREATE OR REPLACE FUNCTION "danmaf"."gen_obt_estab_punto" (p_id_empresa integer, p_unidad_adm varchar, out p_establecimiento varchar, out p_punto varchar, out p_autorizacion varchar) RETURNS record AS$body$DECLARE v_establecimiento varchar(3); v_punto varchar(3);BEGIN SELECT fa.establecimiento,fa.punto--,fa.autorizacion into v_establecimiento,v_punto FROM danmaf.gen_documento gd,danmaf.fac_autorizaciones fa WHERE gd.id_documento=fa.id_documento and gd.nombre='FACTURA' and gd.id_empresa=p_id_empresa and fa.cod_unidad=p_unidad_adm;END;$body$LANGUAGE 'plpgsql'VOLATILECALLED ON NULL INPUTSECURITY INVOKERCOST 100;/*********** Fin Función record***********/

/**************** Función desde la cual se debe referenciar*********************//
CREATE OR REPLACE FUNCTION "danmaf"."fac_sp_reg_cab_factura" (p_id_factura integer, p_id_empresa integer, p_num_factura integer, p_fecha_emison date, p_fecha_envio date, p_estado char, p_fact_fisica varchar, p_usuario_crea varchar, p_subtotal numeric, p_impuestos numeric, p_guia_remision varchar, p_obs varchar, p_unidad_adm varchar, p_id_cliente integer, p_cur_resultado "pg_catalog"."refcursor") RETURNS "pg_catalog"."refcursor" AS$body$ declare v_fact_fisica integer; v_id_factura integer; v_establecimiento varchar(3); v_punto varchar (3); v_autorizacion VARCHAR(32); -- v_num_factura, begin if p_id_factura is null then select count(1) into v_fact_fisica from danmaf.fac_cab_factura cf where cf.fact_fisica=p_fact_fisica and cf.id_empresa=p_id_empresa and cf.unidad_adm=p_unidad_adm; if v_fact_fisica=0 then
/*************Este sql es el de la función con el record**************/ SELECT fa.establecimiento,fa.punto,fa.autorizacion into v_establecimiento,v_punto,v_autorizacion FROM danmaf.gen_documento gd,danmaf.fac_autorizaciones fa WHERE gd.id_documento=fa.id_documento and gd.nombre='FACTURA' and gd.id_empresa=p_id_empresa and fa.cod_unidad=p_unidad_adm;
/*****************************/
--Aqui ejecuto la función pero me da error
--danmaf.gen_obt_estab_punto(p_id_empresa,p_unidad_adm) as (v_establecimiento,v_punto,v_autorizacion); --Fin INSERT INTO danmaf.fac_cab_factura ( id_empresa, num_factura, fecha_emision, fecha_envio, estado, fact_fisica, usuario_crea, fecha_crea, subtotal, impuestos, guia_remision, autorizacion, establecimiento, punto, obs, unidad_adm, id_cliente ) VALUES ( p_id_empresa, p_num_factura, p_fecha_emision, p_fecha_envio, p_estado, v_establecimiento||v_punto||to_char(p_num_factura), p_usuario_crea, p_fecha_crea, p_subtotal, p_impuestos, p_guia_remision, v_autorizacion, v_establecimiento, v_punto, p_obs, p_unidad_adm, p_id_cliente ) returning id_factura into v_id_factura; open p_cur_resultado FOR select '-1' as codigo,v_id_factura as id_factura,'Información registrada satisfactoriamente...'as descripcion; return p_cur_resultado; else open p_cur_resultado FOR select '-1404' as codigo, 'Ya existe el número de factura física registrado'; return p_cur_resultado;
end if; else UPDATE danmaf.fac_cab_factura SET id_cliente = p_id_cliente, fecha_factura = p_fecha_factura, fecha_max_cobro = p_fecha_max_cobro, estado = p_estado, fact_fisica = p_fact_fisica WHERE id_empresa = p_id_empresa and unidad_adm = p_unidad_adm and id_factura = p_id_factura; open p_cur_resultado FOR select '-1' as codigo, p_id_factura as id_factura,'Información registrada satisfactoriamente...'as descripcion; return p_cur_resultado; end if; end;$body$LANGUAGE 'plpgsql'VOLATILECALLED ON NULL INPUTSECURITY INVOKERCOST 100;

See all the ways you can stay connected to friends and family
_________________________________________________________________
Invite your mail contacts to join your friends list with Windows Live Spaces. It's easy!
http://spaces.live.com/spacesapi.aspx?wx_action=create&wx_url=/friends.aspx&mkt=en-us

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Edwin Quijada 2009-04-14 23:06:48 RE: Transa
Previous Message Miguel Angel 2009-04-14 22:00:48 Re: Postgres -> OLAP