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

Reply via email to