2017-12-29 8 views
0

私は検索パラメータを送信する必要がある機能について助力を求める。しかし問題は、関数がDBリンクを介して実行され、検索パラメータとして2つの値を渡す必要があり、実行するときに値を送信しないということです。postgresのパラメータとdblinkの機能

これは、データベース・リンクのない関数である:それは問題なく動作し、ここで同じ機能が、動作しないのdblink、と


`CREATE OR REPLACE FUNCTION sp_get_afil(i_pers_codigo VARCHAR, i_empr_codigo 
VARCHAR) RETURNS VARCHAR AS $$ 
DECLARE 
    v_pers_codigo VARCHAR; 
BEGIN 
    select ro.pers_codigo 
    into v_pers_codigo 
    from unv_roles_personas ro, unv_personas p1, unv_personas p 
    where ro.rope_vigente = 'S' 
    and ro.empr_codigo = p1.empr_codigo 
    and ro.tiro_codigo = 'AFIL' 
    and ro.pers_codigo = p1.pers_codigo 
    and p1.empr_codigo = p.empr_codigo 
    and p1.pers_estado_cae = p.pers_estado_cae 
    and p1.pers_numero_cae = p.pers_numero_cae 
    and p.empr_codigo = i_empr_codigo 
    and p.pers_codigo = i_pers_codigo; 

    RETURN v_pers_codigo; 

END; 
$$ LANGUAGE plpgsql;` 


`CREATE OR REPLACE FUNCTION sp_get_afil(i_pers_codigo VARCHAR, i_empr_codigo 
VARCHAR) RETURNS VARCHAR AS $$ 
DECLARE 
    v_pers_codigo VARCHAR; 
    v_empr_codigo VARCHAR; 
    vr_pers_codigo VARCHAR; 
BEGIN 
    select t1.rop_codigo 
    into vr_pers_codigo 
    from dblink('dbname = usuarios host=100.1.1.138 port=5432 ', 
       'select ro.pers_codigo 
       from unv_roles_personas ro, unv_personas p1, unv_personas p 
       where ro.rope_vigente = ''S'' 
       and ro.empr_codigo = p1.empr_codigo 
       and ro.tiro_codigo = ''AFIL'' 
       and ro.pers_codigo = p1.pers_codigo 
       and p1.empr_codigo = p.empr_codigo 
       and p1.pers_estado_cae = p.pers_estado_cae 
       and p1.pers_numero_cae = p.pers_numero_cae 
       and p.empr_codigo = '||quote_literal ($1)||' 
       and p.pers_codigo = '||quote_literal ($2)||'') 
    as t1 (rop_codigo character varying); 

    RETURN vr_pers_codigo; 

END; 
$$ LANGUAGE plpgsql;` 

これを実行すると、null値が返され、必要なビューが生成されません。私はひどくやっている、私は調査したが、私はすでにデッドロックしている。

答えて

0

はこれを試してみてください。

CREATE OR REPLACE FUNCTION sp_get_afil(i_pers_codigo VARCHAR, i_empr_codigo 
VARCHAR) RETURNS VARCHAR AS $$ 
DECLARE 
    v_pers_codigo VARCHAR; 
    v_empr_codigo VARCHAR; 
    vr_pers_codigo VARCHAR; 
BEGIN 
    select t1.rop_codigo 
    into vr_pers_codigo 
    from dblink('dbname = usuarios host=100.1.1.138 port=5432 ', 
       format('select ro.pers_codigo 
       from unv_roles_personas ro, unv_personas p1, unv_personas p 
       where ro.rope_vigente = ''S'' 
       and ro.empr_codigo = p1.empr_codigo 
       and ro.tiro_codigo = ''AFIL'' 
       and ro.pers_codigo = p1.pers_codigo 
       and p1.empr_codigo = p.empr_codigo 
       and p1.pers_estado_cae = p.pers_estado_cae 
       and p1.pers_numero_cae = p.pers_numero_cae 
       and p.empr_codigo = %L 
       and p.pers_codigo = %L',i_pers_codigo,i_empr_codigo)) 
    as t1 (rop_codigo character varying); 

    RETURN vr_pers_codigo; 

END; 
$$ LANGUAGE plpgsql; 
+0

残念ながら、それは同じ結果であり、それはnull値を返し、ありがとうございます。 –

+0

hm。再現可能なenvなしで、あなたがなぜヌルを持っているのかを言うのは難しい –

0

おかげバオツンは、視点を変えると、私がアクセスするデータベースの側に機能を交換します。

enter code here 

`select t1.a_ctac_correlativo, 
    t1.a_pers_codigo_socadm, 
    b.pers_codigo_scd, 
    b.pers_sigla, 
    b.pers_nombre_completo nombre_soc, 
    t1.recl_correlativo, 
    d.pers_codigo, 
    d.pers_nombre_completo, 
    d.pers_nombre_fantasia, 
    d.pers_sigla edit_sigla,  
    t1.monto, 
    e.tiro_codigo,  
    t1.a_titu_codigo, 
    t1.a_ajuc_correlativo 
from dblink('dbname = liquidaciones host=100.1.1.138 port=5432 ', 
     'select a.ctac_correlativo a_ctac_correlativo, 
       a.pers_codigo_socadm a_pers_codigo_socadm, 
       (case when a.ctac_correlativo = 1213 then 48 else 
a.ctac_correlativo end) recl_correlativo, 
       sum(redi_monto) monto, 
       a.titu_codigo a_titu_codigo, 
       a.ajuc_correlativo a_ajuc_correlativo, 
       a.pers_codigo a_pers_codigo, 
       a.empr_codigo a_empr_codigo 
     from redit a 
     where a.redi_liquidado =''S'' 
     and a.redi_correlativo_padre is null 
     group by a.ctac_correlativo, 
     a.pers_codigo_socadm, 
     recl_correlativo, 
     a.titu_codigo, 
     a.ajuc_correlativo, 
     a.pers_codigo, 
     a.empr_codigo') 
     as t1 (a_ctac_correlativo character varying, 
       a_pers_codigo_socadm character varying, 
       recl_correlativo character varying, 
       monto character varying, 
       a_titu_codigo character varying, 
       a_ajuc_correlativo character varying, 
       a_pers_codigo character varying, 
       a_empr_codigo character varying), 
    unv_personas b, 
    unv_roles_personas e, 
    unv_personas d 
where b.pers_codigo = t1.a_pers_codigo_socadm 
and e.empr_codigo = d.empr_codigo 
and e.pers_codigo = d.pers_codigo 
and e.tiro_codigo = 'EDIT' 
and b.pers_codigo = (select sp_get_afil(CASE WHEN t1.a_pers_codigo = 
'10010407' THEN '10010436' ELSE t1.a_pers_codigo END, t1.a_empr_codigo)) 
and t1.a_pers_codigo in (select pers_codigo from unv_roles_personas where 
tiro_codigo = 'MANDAT' 
        INTERSECT 
        select pers_codigo from unv_roles_personas where 
tiro_codigo = 'EDIT') 
group by t1.a_ctac_correlativo, 
    t1.a_pers_codigo_socadm, 
    b.pers_codigo_scd, 
    b.pers_sigla, 
    nombre_soc, 
    t1.recl_correlativo, 
    d.pers_codigo, 
    d.pers_nombre_completo, 
    d.pers_nombre_fantasia, 
    edit_sigla,  
    t1.monto, 
    e.tiro_codigo,  
    t1.a_titu_codigo, 
    t1.a_ajuc_correlativo;` 
関連する問題