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;
_________________________________________________________________
Show them the way! Add maps and directions to your party invites.
http://www.microsoft.com/windows/windowslive/products/events.aspx