首页 > 解决方案 > 使用 2 个过程创建 PL/SQL 包以根据参数标志 0、1、2 创建动态 db_link 并插入、更新现有表

问题描述

立即执行'创建数据库链接DBLINK_' || cur.SYSTEM_NAME || ' 使用 '''|| 连接到由 b00wnerk0j 标识的 BOOWNER cur.IP_ADDRESS ||':1521/XE''';

dbms_output.put_line('select 1 from dual@DBLINK_'||cur.SYSTEM_NAME||'');

-- 立即执行 'select 1 from dual@DBLINK_'||cur.SYSTEM_NAME||'' 进入 vData;

-- dbms_output.put_line(vData);

-- 如果 (vData =1) 那么

DBMS_OUTPUT.put_line('更新执行中..!');

别的

-- DBMS_OUTPUT.put_line('更新未执行..!');

- 万一;

FUNCTION store_Validate_DBLINK(alink IN VARCHAR2)

返回号码为

nCnt数;

vSql varchar2(32000);

BEGIN vSql := 'SELECT 1 FROM dual@'||alink; 立即执行 vSql 到 nCnt;返回 nCnt;当其他人返回 0 时出现异常;

END store_Validate_DBLINK;

2.程序开始

for j in (select distinct loc_idnt from KOJ_CLOCKINOUT_MISSING t where status = 0 order by loc_idnt) loop call dblink procedure(0);

调用 dblink 过程(1);for i in (select * from KOJ_CLOCKINOUT_MISSING t where status = 0 and t.loc_idnt = j.loc_idnt order by loc_idnt, day_dt) 循环

begin

执行立即'插入到 kojobj.KOJ_CLOCKINOUT_PULLED

select id_em, ts_em_tm_enr, id_str_rt, rc_em_tm_enr,
typ_cd_tm_enr, mod_flag, ts_crt_rcrd, ts_mdf_rcrd,
dc_dy_bsn, sysdate TS_WH_UPD_RCRD, 0
WH_RCRD_PRCD_FLAG from boowner.co_em_tm_enr@DBLINK_MIK20082 where ( trunc(TO_DATE(TO_CHAR(yy.ts_em_tm_enr, 'YYYY-MON-DD HH24: MI:SS'), 'YYYY-MON-DD HH24:MI:SS')) = i.day_dt 或 to_date(yy.dc_dy_bsn, 'YYYY-MM-DD') = i.day_dt) 和 yy.id_str_rt = i .posstore ; '; 结尾;

更新 KOJOBJ.KOJ_CLOCKINOUT_MISSING 设置状态 = 1 ,评论 =

'Data Pulled' -- 如果 ststus = 0 数据不可用

其中 poststore= i.posstore 和 day_dt = i.dat_dt ;

结束循环;调用 dblink 过程(2);-- 在末尾删除 db_link

  end loop;

结尾;

标签: plsql-package

解决方案


推荐阅读