通过创建SQLServer 2005到 Oracle10g 的链接服务器实现异构数据库数据转换方案
发布时间:2024-01-28 00:05:46
1、新建链接服务器
在图1中选中“链接服务器”,右键选择“新建链接服务器”,如图2,配置相关参数。
在“常规”选项中,填写“链接服务器名称”,访问接口选中
“ Microsoft OLE DB Provider for Oracle”项。其中产品名称、数据源、访问接口字符串请填写配置的Oracle客户端在本地配置的net服务名。如图3所示。
在“安全性”项中,选中使用此安全上下文建立连接,填写远程登录用户和密码,即登录远程Oracle服务器的用户和密码。如图4所示。
3、异构数据库访问语句格式
比如我们建立了链接服务器ORADBCONN,而Oracle中在HRSOFT用户下面建立了表WEBUSER,那么我们的SQL语句就是:
--清空Oracle表中的数据
DELETE FROM ORADBCONN..HRSOFT.WEBUSER
--将SQLServer中的数据写到Oracle中
INSERT into ORADBCONN.. HRSOFT. WEBUSER
SELECT * FROM WEBUSER
如果报告成功,那么我们的数据就已经写入到Oracle中了。
用SELECT * FROM ORADBCONN..HRSOFT.WEBUSER
查看Oracle数据库中是否已经有数据了。
4、链接服务器应用
A、查询Oracle数据表方式一(这种方式,当Oracle与SQLServer的数据类型不一致时经常报错,且速度稍慢):
select * from [LINK2ORACLE]..[ORACLE_USER_NAME].TABLE_NAME;
我在执行该语句经常报类似错误信息:链接服务器 "LINK2ORACLE" 的 OLE DB 访问接口 "MSDAORA" 为列提供的元数据不一致。对象 ""CMCC"."OS2_GIS_CELL"" 的列 "ISOPENED" (编译时序号为 20)在编译时有 130 的 "DBTYPE",但在运行时有 5。
B、查询Oracle数据表方式二(经试验,这种方式使用起来很顺畅,不报错,且速度几乎和在Oralce中一样快):
select * from openquery(LINK2ORACLE,'select * from OracleUserName.TableName')
您可以把openquery()当成表来使用。
C、举个例子(将Oralce用户HRSOFT下的用户表WEBUSER导入到SQLServer2005数据库中):
select * into OS_GIS_WEBUSER from openquery(LINK2ORACLE,'select * from HRSOFT. WEBUSER)
D、更便捷的方式:通过创建同义词进行便捷查询:
CREATE SYNONYM OS_GIS_CELL FOR [ORACLELK]..[CMCC].OS_GIS_CELL;
select * from os_gis_cell;
select * from os_gis_cell a where a.CellName is null;
注意:涉及 Oracle 部分的 SQL 语句,尤其是 [ORACLELINK]..[ORACLE_USER_NAME].TABLE_NAME 一定要大写,否则会报类似错误:
消息 7314,级别 16,状态 1,第 1 行
链接服务器 "ORACLELK" 的 OLE DB 访问接口 "MSDAORA" 不包含表 ""CMCC"."OS2_gis_CELL""。该表不存在,或者当前用户没有访问该表的权限。
配置數據源:
工程INPLAN:
(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.2.6)(PORT=1521)))(CONNECT_DATA=(SID=sa)(SERVER=DEDICATED)))
ERP:
(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL = TCP)(HOST = 192.168.3.25)(PORT = 1528)))(CONNECT_DATA =(SID= TJTEST)))
(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL = TCP)(HOST = 192.168.3.25)(PORT = 1528)))(CONNECT_DATA =(SID= TJTEST)))
新建作業里的代碼:
delete from XBLD_Information
INSERT INTO XBLD_Information(job_name, num_layers, JB_PP1, JB_PC1, JB_PP2, JB_PC2, JB_PP3, JB_PC3, PP_PP1, PP_PC1, PP_PP2, PP_PC2, PP_PP3, PP_PC3, PP_PP4,PP_PC4,BM)
select * from openquery(INPLAN,'
select mjs15.job_name, mjs15.num_layers,mjs1.MM1 JB_PP1,mjs1.MC1 JB_PC1,mjs2.MM2 JB_PP2,mjs2.MC2 JB_PC2,mjs3.MM3 JB_PP3,mjs3.MC3 JB_PC3,mjs11.MM1 PP_PP1,mjs11.MC1 PP_PC1,mjs12.MM2 PP_PP2,mjs12.MC2 PP_PC2,mjs13.MM3 PP_PP3,mjs13.MC3 PP_PC3,mjs14.MM4 PP_PP4,mjs14.MC4 PP_PC4,Substr(mjs15.job_name,5,2) BM
from
(select mjl.job_name,
mjl.num_pcbs,
mjl.num_arrays,
mjl.num_panles_,
mjl.num_layers,
substr(mjl.op_size_y_string_,instr(mjl.op_size_y_string_,''='')+1,length(mjl.op_size_y_string_)-instr(mjl.op_size_y_string_,''='')+1) y_size, --祇へ糴
substr(mjl.op_size_x_string_,instr(mjl.op_size_x_string_,''='')+1,length(mjl.op_size_x_string_)-instr(mjl.op_size_x_string_,''='')+1) x_size --祇へ
from tj.my_job_list mjl
) mjs15,
(select *
from
(select mjs.job_name,
decode(DENSE_RANK() over( partition by job_name order by material_name,material_count),1,material_name) MM1,
decode(DENSE_RANK() over( partition by job_name order by material_name,material_count),1,material_count) MC1
from tj.my_job_stackup_material_count mjs
where mjs.type_T=''Core''
)where MM1 is not null
) mjs1,
(select *
from
(select mjs.job_name,
decode(DENSE_RANK() over( partition by job_name order by material_name,material_count),2,material_name) MM2,
decode(DENSE_RANK() over( partition by job_name order by material_name,material_count),2,material_count)MC2
from tj.my_job_stackup_material_count mjs
where mjs.type_T=''Core''
) where MM2 is not null
) mjs2,
(select *
from
(select mjs.job_name,
decode(DENSE_RANK() over( partition by job_name order by material_name,material_count),3,material_name) MM3,
decode(DENSE_RANK() over( partition by job_name order by material_name,material_count),3,material_count)MC3
from tj.my_job_stackup_material_count mjs
where mjs.type_T=''Core''
) where MM3 is not null
) mjs3,
(select *
from
( select mjs.job_name,
decode(DENSE_RANK() over( partition by job_name order by material_name,material_count),1,material_name) MM1,
decode(DENSE_RANK() over( partition by job_name order by material_name,material_count),1,material_count) MC1
from tj.my_job_stackup_material_count mjs
where mjs.type_T=''Prepreg''
)where MM1 is not null
) mjs11,
(select *
from (
select mjs.job_name,
decode(DENSE_RANK() over( partition by job_name order by material_name,material_count),2,material_name) MM2,
decode(DENSE_RANK() over( partition by job_name order by material_name,material_count),2,material_count)MC2
from tj.my_job_stackup_material_count mjs
where mjs.type_T=''Prepreg''
)where MM2 is not null
) mjs12,
(select *
from
( select mjs.job_name,
decode(DENSE_RANK() over( partition by job_name order by material_name,material_count),3,material_name) MM3,
decode(DENSE_RANK() over( partition by job_name order by material_name,material_count),3,material_count)MC3
from tj.my_job_stackup_material_count mjs
where mjs.type_T=''Prepreg''
)
where MM3 is not null
) mjs13,
(select distinct *
from
( select mjs.job_name,
decode(DENSE_RANK() over( partition by job_name order by material_name,material_count),4,material_name) MM4,
decode(DENSE_RANK() over( partition by job_name order by material_name,material_count),4,material_count)MC4
from tj.my_job_stackup_material_count mjs
where mjs.type_T=''Prepreg''
) where MM4 is not null
) mjs14
where mjs15.job_name=mjs1.job_name(+)
and mjs15.job_name=mjs2.job_name(+)
and mjs15.job_name=mjs3.job_name(+)
and mjs15.job_name=mjs11.job_name(+)
and mjs15.job_name=mjs12.job_name(+)
and mjs15.job_name=mjs13.job_name(+)
and mjs15.job_name=mjs14.job_name(+)
')
UPDATE XBLD_Information SET BM=b.Describe from XBLD_Information a, XBLD_BM b where a.bm=b.id
猜你喜欢
- python 版本 3.x首先安装 PIL由于PIL仅支持到Python 2.7,加上年久失修,于是一群志愿者在PIL的基础上创建了兼容的版
- 代码中经常会有变量是否为None的判断,有三种主要的写法:第一种是`if x is None`;第二种是 `if not x:`;第三种是`
- 本文实例为大家分享了python Tkinter版学生管理的具体代码,供大家参考,具体内容如下Tkinter是python自带的UI包,无需
- 这是为了实现一个效果,而提前作的测试代码!看起来很简单的一个东西,到这会,大约四个小时过去了。不知道是IE6的BUG;还是我自已的BUG!有
- SQL Server 2005相对于SQL Server 2000做了很大的改进,许些新特性是非常实用的。本文中将通过几个具体示例进行详细的
- 本文实例讲述了Python实现更改图片尺寸大小的方法。分享给大家供大家参考,具体如下:1、PIL包推荐Pillow 。2、源码:#encod
- 前言随着深度学习的不断发展,从开山之作Alexnet到VGG,网络结构不断优化,但是在VGG网络研究过程中,人们发现随着网络深度的不断提高,
- 出现这样的问题是当你浏览UTF-8编码的时候,服务器默认用UTF-8的引擎来输出html,当你用再浏览GB2312的页面时,它还是用UTF-
- *****看一下我定义的change()和run()函数******绘图坐标体系:作用:设置主窗体的大小和位置turtle.setup(wi
- 第一步:python解释器,到网上下载安装下就行。网址:https://www.python.org/downloads/windows/值
- 图像可能在生成、传输或者采集过程中夹带了噪声,去噪声是图像处理中常用的手法。通常去噪声用滤波的方法,比如中值滤波、均值滤波。但是那样的算法不
- __init__ 方法是什么?使用Python写过面向对象的代码的同学,可能对 __init__ 方法已经非常熟悉了,__init__ 方法
- 偶然在Google发现了他们的用户体验设计原则,因此翻译作一下记录。1.以人为本 —他们的生活、他们的工作和他们的梦想2.珍惜每一毫秒的时间
- mysql是我们项目中非常常用的数据型数据库。但是因为我们需要在数据库保存中文字符,所以经常遇到数据库乱码情况。下面就来介绍一下如何彻底解决
- 1、场景描述通常来说,前端要拿到excel数据,都是先上传存储数据库,然后再请求后端接口,获取数据。但有100个产品经理,就会有101个不同
- 本文实例为大家分享了python生成圆形图片的具体代码,供大家参考,具体内容如下# -*- coding: utf-8 -*- "
- 在金融领域中,我们的y值和预测得到的违约概率刚好是两个分布未知的两个分布。好的信用风控模型一般从准确性、稳定性和可解释性来评估模型。一般来说
- 前言最近几天,研究了一下一直很好奇的爬虫算法。这里写一下最近几天的点点心得。下面进入正文:你可能需要的工作环境:Python 3.6官网下载
- 1、jieba库基本介绍(1)、jieba库概述jieba是优秀的中文分词第三方库- 中文文本需要通过分词获得单个的词语- jieba是优秀
- Expression定义 IE5及其以后版本支持在CSS中使用expression,用来把CSS属性和Javascript表达式关联起来,这