当前位置: 首页 > news >正文

Linux Shell脚本-实现账户库数据同步到交易库

#!/bin/bash
#账户库的数据无法通过mq同步到交易库

#数据库链接
db_acc_link=" sqlplus -s btaacc/hundsun@198.2.2.2:1521/orcl"

echo “查询当天需要同步的数据。。。”
${db_acc_link} <<-! 2>&1 | tee -a 01_confirm_account.txt
set heading off;
set wrap off;
set pagesize 0;
set linesize 5000;
prompt 查询当天需要同步的数据开始
select * from btaacc.tbaccountsync where cfm_date=(select init_date from btapub.tbsysarg where bank_no=‘801’);
exit
!

echo “查询当天需要同步的客户号以及所属的分表”
${db_btaacc_link} <<-! 2>&1 | tee -a 02_in_client_no.txt
set heading off;
set wrap off;
set pagesize 0;
set linesize 5000;
prompt 创建临时表
drop table btaacc.tableimptmp purge;
drop table btaacc.tablenametmp purge;
create table btaacc.tableimptmp(in_client_no varchar2(50),asset_acc varchar2(50),tablenum varchar2(50));
create table btaacc.tablenametmp(tablename varchar2(50));
insert into btaacc.tablenametmp values(‘tbassetacc’);
insert into btaacc.tablenametmp values(‘tbclientseller’);
insert into btaacc.tablenametmp values(‘tbclient’);
insert into btaacc.tablenametmp values(‘tbtatransaccount’);
commit;
prompt 查询当天新开户需要同步的客户号、理财账号、所属表号并插入临时表
insert into btaacc.tableimptmp select a.in_client_no,a.asset_acc,b.tablenum from btaacc.tbaccountsync a,btaacc.vassetacc_qry b
where a.cfm_date=(select init_date from btapub.tbsysarg where bank_no=‘801’)
and a.in_client_no=b.in_client_no and a.function_id=‘1H0100’;
commit;
drop table btaacc.temptable purge;
create table btaacc.temptable as select * from btaacc.tableimptmp cross join btaacc.tablenametmp;
commit;
exit
!

echo “开始拼接sql语句”
#查询用户包含bank_acc字段的表,生成sql语句写入input_file中
${db_btaacc_link} <<-! 2>&1 | tee -a 03_output.sql
set heading off;
set wrap off;
set pagesize 0;
set linesize 5000;
set serveroutput on;
DECLARE
v_tbassetaccsql CLOB :=‘’;
v_tbclientseller CLOB :=‘’;
v_tbclient CLOB :=‘’;
v_tbtatransaccount CLOB :=‘’;
v_tbclientseller_update CLOB :=‘’;
v_tbclient_update CLOB :=‘’;
BEGIN
FOR rec IN (select in_client_no,asset_acc,tablenum,tablename from btaacc.temptable where tablename=‘tbassetacc’)
LOOP
v_tbassetaccsql := v_tbassetaccsql ||
‘insert into btats.tbassetaccsync select IN_CLIENT_NO, BANK_NO, TA_CODE, ASSET_ACC, OPEN_BRANCH, TA_CLIENT, CLIENT_MANAGER, SEND_FREQ, SEND_MODE, CLIENT_TYPE, PRD_TYPE,
ACC_STATUS, OPEN_DATE, RESERVE1, RESERVE2, CREATE_TIME, MODIFY_TIMESTAMP, VERSION from btaacc.’||rec.tablename||rec.tablenum||
’ where in_client_no=‘’‘||rec.in_client_no||’‘’;'||chr(10);
END LOOP;

FOR rec IN (select in_client_no,asset_acc,tablenum,tablename from btaacc.temptable where tablename=‘tbclientseller’)
LOOP
v_tbclientseller := v_tbclientseller ||
‘insert into btats.tbclientsellersync select IN_CLIENT_NO, BANK_NO, SELLER_CODE, ASSET_ACC,CLIENT_NO, OPEN_DATE, CLOSE_DATE, HOST_CLIENT_TYPE, HOST_ID_TYPE, CLIENT_GROUP, ADDRESS, POST_CODE, TEL, FAX, MOBILE, EMAIL,
SEND_FREQ, SEND_MODE, CHANNELS, PRD_TYPES, CLIENT_MANAGER, OPEN_BRANCH, NEW_CLIENT_FLAG, MSG_FLAG, CLIENT_FROM, RISK_LEVEL, RISK_DATE, LAST_MODIFY_DATE, LAST_MODIFY_TIME, MODIFY_INFO, OPEN_FLAG, ACC_STATUS,
RESERVE1, RESERVE2, RESERVE3, RESERVE4, CREATE_TIME, MODIFY_TIMESTAMP, VERSION from btaacc.’||rec.tablename||rec.tablenum||
’ where in_client_no=‘’‘||rec.in_client_no||’‘’;'||chr(10);
END LOOP;

FOR rec IN (select in_client_no,asset_acc,tablenum,tablename from btaacc.temptable where tablename=‘tbclient’)
LOOP
v_tbclient := v_tbclient ||
‘insert into btats.tbclientsync select IN_CLIENT_NO, CLIENT_TYPE, ID_TYPE, ID_CODE, ID_CODE_DATE,ASSET_ACC, SHORT_NAME, CLIENT_NAME, SEX, BIRTHDAY, INST_TYPE, REPR_NAME, REPR_ID_TYPE, REPR_ID_CODE, REPR_IDVALID,
ACC_STATUS, LAST_MODIFY_DATE, MODI_TIME, MODIFY_INFO, RESERVE1, RESERVE2, RESERVE3, RESERVE4, CREATE_TIME, MODIFY_TIMESTAMP, VERSION from btaacc.’||rec.tablename||rec.tablenum||
’ where in_client_no=‘’‘||rec.in_client_no||’‘’;'||chr(10);
END LOOP;

FOR rec IN (select in_client_no,asset_acc,tablenum,tablename from btaacc.temptable where tablename=‘tbtatransaccount’)
LOOP
v_tbtatransaccount := v_tbtatransaccount ||
‘insert into btats.tbtatransaccountsync select IN_CLIENT_NO, BANK_NO, TA_CODE, SELLER_CODE, BANK_ACC, ASSET_ACC, TA_CLIENT, ACC_STATUS, OPEN_DATE, RESERVE1, RESERVE2 from btaacc.’||rec.tablename||rec.tablenum||
’ where in_client_no=‘’‘||rec.in_client_no||’‘’;'||chr(10);
END LOOP;

FOR rec IN (select in_client_no,asset_acc,tablenum,tablename from btaacc.temptable where tablename=‘tbclientseller’)
LOOP
v_tbclientseller_update := v_tbclientseller_update ||
‘update btats.tbclientsellersync set asset_acc=’‘’||rec.asset_acc||‘’’ where in_client_no =‘’‘||rec.in_client_no||’‘’;'||chr(10);
END LOOP;

FOR rec IN (select in_client_no,asset_acc,tablenum,tablename from btaacc.temptable where tablename=‘tbclient’)
LOOP
v_tbclient_update := v_tbclient_update ||
‘update btats.tbclientsync set asset_acc=’‘’||rec.asset_acc||‘’’ where in_client_no =‘’‘||rec.in_client_no||’‘’;'||chr(10);
END LOOP;

DBMS_OUTPUT.PUT_LINE(v_tbassetaccsql);
DBMS_OUTPUT.PUT_LINE(v_tbclientseller);
DBMS_OUTPUT.PUT_LINE(v_tbclient);
DBMS_OUTPUT.PUT_LINE(v_tbtatransaccount);
DBMS_OUTPUT.PUT_LINE(v_tbclientseller_update);
DBMS_OUTPUT.PUT_LINE(v_tbclient_update);

– 可选:直接执行拼接的 SQL(需谨慎)
–execute immediate v_tbassetaccsql;
–execute immediate v_tbclientseller;
–execute immediate v_tbclient;
–execute immediate v_tbtatransaccount;
–execute immediate v_tbclientseller_update;
–execute immediate v_tbclient_update;
END;
/
exit
!

相关文章:

  • kvm 创建虚拟机核心分析
  • 双指针算法专题之——复写零
  • CLR中的类型转换
  • 玩转python:通俗易懂掌握高级数据结构:collections模块之deque
  • C++中类对象作为类成员(对象成员/成员对象)的一些注意事项
  • vue2的webpack(vue.config.js) 怎么使用请求转发 devServer.proxy
  • AGI大模型(5):提示词工程
  • ubuntu20.04
  • 铁人三项(第五赛区)_2018_rop题解
  • 《算法笔记》8.1小节——搜索专题->深度优先搜索(DFS)问题 D: 【递归入门】n皇后 问题(原始的8皇后问题)
  • 我又又又又又又更新了~~纯手工编写C++画图,有注释~~~
  • 【C#】使用DeepSeek帮助评估数据库性能问题,C# 使用定时任务,每隔一分钟移除一次表,再重新创建表,和往新创建的表追加5万多条记录
  • USER与多组织关联的SQL查询以及几个关键函数用法
  • ​面向对象与面向过程编程:从概念到实战的深度解析
  • ROS学习过程(一)
  • unity几种设计模式(自用)
  • 【复习】补充
  • Cookie与Session详解
  • C++ string
  • ES6(1) 简介与基础概念
  • 新乡网站推广/大型门户网站建设
  • 营销型集团网站建设/百度识图网页版
  • 网站注册系统用什么做/如何提高网站排名
  • 想自己做网站该学些什么/怎么推广一个app
  • 开发网站教程/怎么做手工
  • 网站建设参考网站的说明书/做推广app赚钱的项目