从远程库同步字段到本地库
来源:互联网 发布:淘宝宝贝失效了已付款 编辑:程序博客网 时间:2024/06/05 17:03
业务库:afsp_hf_2017
平台库:FASP_1502
目标:业务库中基础数据表添加字段 year varchar2(4)、 province varchar2(9)
从平台库同步这两个字段的值
1.查询需要同步的业务库中基础数据表
select * from t_dictable t where t.tablecode like ‘%T_PUB%’;
2.判断平台库中是否存在这样的表:(注意在平台库中查询表的时候表名为FASP_+业务库中表名)
不存在:直接创建字段
存在:
平台库是否存在这两个字段(year、province)
平台库不存在:直接跳过
平台库存在:业务库中基础数据表添加字段、同步字段值
--本地表名格式 T_PUB_AAA、T_PUB_BBB.....
--平台表格式 FASP_T_PUB_AAA、FASP_T_PUB_BBB...
1.在本地库创建dblink;
2.写存储过程
CREATE OR REPLACE PACKAGE BODY PKG_FASP2ADDPROVINCE IS PROCEDURE FASP2ADDPROVINCE IS CTABLE RCURSOR; TABLENAME VARCHAR2(200); TABLECOUNT NUMBER(4); COLUMNCOUNT NUMBER(4); COLUMNCOUNT_CURRENT NUMBER(4); SSQL VARCHAR2(2000); BEGIN --1.循环凭证注册的基础数据表 OPEN CTABLE FOR SELECT T.TABLECODE FROM T_DICTABLE T WHERE T.TABLECODE LIKE 'T_PUB%'; LOOP FETCH CTABLE INTO TABLENAME; EXIT WHEN CTABLE%NOTFOUND; --2.判断表中有没有字段 SSQL := 'SELECT COUNT(1) FROM user_tab_cols WHERE TABLE_NAME = '''||TABLENAME||''' AND (COLUMN_NAME = ''PROVINCE'')'; EXECUTE IMMEDIATE SSQL INTO COLUMNCOUNT_CURRENT; IF COLUMNCOUNT_CURRENT=0 THEN --当前库中没有字段直接添加 SSQL := 'ALTER TABLE '||TABLENAME ||' ADD PROVINCE VARCHAR2(9)'; EXECUTE IMMEDIATE SSQL; END IF; --判断平台2有没有该表 SSQL := 'SELECT COUNT(1) FROM user_tables@fasp_1502 T WHERE T.TABLE_NAME = ''FASP_'||TABLENAME||''''; EXECUTE IMMEDIATE SSQL INTO TABLECOUNT; IF TABLECOUNT>0 THEN --有表再判断是否有字段 SSQL := 'SELECT COUNT(1) FROM user_tab_cols@fasp_1502 WHERE TABLE_NAME = ''FASP_'||TABLENAME||''' AND (COLUMN_NAME = ''PROVINCE'')'; EXECUTE IMMEDIATE SSQL INTO COLUMNCOUNT; IF COLUMNCOUNT>0 THEN--平台表中的存在字段 SSQL := 'UPDATE '||TABLENAME||' T SET T.PROVINCE = (SELECT F.PROVINCE FROM FASP_1502.FASP_'||TABLENAME||' F WHERE F.STATUS = 1 AND F.CODE = T.CODE)'; EXECUTE IMMEDIATE SSQL; END IF; END IF; --2.判断表中有没有字段 SSQL := 'SELECT COUNT(1) FROM user_tab_cols WHERE TABLE_NAME = '''||TABLENAME||''' AND (COLUMN_NAME = ''YEAR'')'; EXECUTE IMMEDIATE SSQL INTO COLUMNCOUNT_CURRENT; IF COLUMNCOUNT_CURRENT=0 THEN --当前库中没有字段直接添加 SSQL := 'ALTER TABLE '||TABLENAME ||' ADD YEAR VARCHAR2(4)'; EXECUTE IMMEDIATE SSQL; END IF; --判断平台2有没有该表 SSQL := 'SELECT COUNT(1) FROM user_tables@fasp_1502 T WHERE T.TABLE_NAME = ''FASP_'||TABLENAME||''''; EXECUTE IMMEDIATE SSQL INTO TABLECOUNT; IF TABLECOUNT>0 THEN --有表再判断是否有字段 SSQL := 'SELECT COUNT(1) FROM user_tab_cols@fasp_1502 WHERE TABLE_NAME = ''FASP_'||TABLENAME||''' AND (COLUMN_NAME = ''YEAR'')'; EXECUTE IMMEDIATE SSQL INTO COLUMNCOUNT; IF COLUMNCOUNT>0 THEN--平台表中的存在字段 SSQL := 'UPDATE '||TABLENAME||' T SET T.YEAR = (SELECT F.YEAR FROM FASP_1502.FASP_'||TABLENAME||' F WHERE F.STATUS = 1 AND F.CODE = T.CODE)'; EXECUTE IMMEDIATE SSQL; END IF; END IF; END LOOP; --commit; END ;END PKG_FASP2ADDPROVINCE;
注意:
上面这段代码的 FASP_1502.表名, 用到的是orcl的schema;
user_tables@fasp_1502 则用的是数据的dblink;
--部分sqlSSQL := 'UPDATE '||TABLENAME||' T SET T.YEAR = (SELECT F.YEAR FROM FASP_1502.FASP_'||TABLENAME||' F WHERE F.STATUS = 1 AND F.CODE = T.CODE)';--部分sqlSSQL := 'SELECT COUNT(1) FROM user_tables@fasp_1502 T WHERE T.TABLE_NAME = ''FASP_'||TABLENAME||'''';
阅读全文
0 0
- 从远程库同步字段到本地库
- 从远程Oracle服务器上同步复制数据到本地备份库
- git从远程库拷贝代码到本地
- 把项目从本地上传到git远程库
- github本地修改与远程库同步
- git gui & git bash 的简单操作手册 - 从远程同步数据到本地
- Rsync使用非ssh默认端口从远程服务器同步文件到本地
- 把远程代码同步到本地
- 从github远程库中克隆到本地库中方法
- git从远程到本地,拉取分支,拉取项目,从其它分支拉取,推送,同步的操作
- git从本地添加到github远程库失败的解决方法
- git从本地添加到github远程库失败的解决方法
- ssh 从远程拷贝文件夹到本地
- ssh从远程拷贝到本地
- git从本地到远程常用命令总结
- 从远程分支获取代码到本地
- 从github上同步代码到本地
- git从版本库创建、从远程克隆或本地新建,配置KEY,合并分支到提交到远程版本库等步骤
- jquery 批量删除、全选、单选
- CSA Round #40 (Div. 2 only)
- ThreadPoolExecutor使用和思考(中)-keepAliveTime及拒绝策略
- window10环境下mysql的安装教程
- 如何获取一个基因家族的所有小麦基因
- 从远程库同步字段到本地库
- jdk1.7与jdk1.8切换问题
- 微服务之微服务架构中的进程间通信(三)
- 图像处理学习笔记(二):基于颜色的图像分割
- JavaWeb分页显示内容之分页查询的三种思路(数据库分页查询)
- 动画类型
- 258. Add Digits
- 使用Session防止表单重复提交
- Android布局中的空格和占一个汉字宽度的空格的实现