前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >SQL Server 2005与Oracle同步注意NUMBER类型转换

SQL Server 2005与Oracle同步注意NUMBER类型转换

作者头像
深蓝studyzy
发布于 2022-06-16 05:28:30
发布于 2022-06-16 05:28:30
79900
代码可运行
举报
文章被收录于专栏:深蓝居深蓝居
运行总次数:0
代码可运行

前面的文章中我已经讲到使用同义词的方法来在SQL Server 2005下连接Oracle,我们可以使用同义词来实时访问Oracle数据库,但是如果Oracle中的表数据流较大则会影响应用系统的性能,于是我采用数据库作业每天定时执行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
drop table abc--删除旧表
go
select * into abc
from aaa--aaa为同义词

这样就可以把Oracle中的数据同步到本地的SQL Server数据库中。从而解决跨实例查询的性能问题。

使用这样的方式半年了都没有发现有什么问题,可是最近却发现了一个灵异的现象,在Oracle中有一个表aaa,其中一个字段BILL NUMBER类型(未指定精度和小数数据位),对于这种类型,SQL Server2005中同步的表abc中却被定义为nvarchar(384)的类型!?明明是一个数字类型为什么SQL Server会将其转换为字符串类型呢?

若只是数据类型改变了倒没有什么,我应用程序在处理时转换一下就是了,但是更奇怪的是其中某些数据在Oracle中查出来是12.34567,但是在SQL Server 2005中查出来却成了12.345670543574563452346547546234234543656434...,后面是几十位的小数,简直神奇了!有一行数据在Oracle中是1,而在SQL Server中查出来是0.99999999999999999999999999999999...但是这种数据也很少发生,在数万条数据中可以找到2-3条这种几十位小数的数据。

正是这种数据的存在使得应用程序有时算出来的结果和Oracle那边的系统算出来的结果无法匹配。

经测试,如果Oracle中指定了NUMBER类型的精度和小数位数比如NUMBER(15)这样SQL Server将可以自动将其转换为numeric(15,0)类型。

由于NUMBER类型可以表示1.0 * 10(-130) —— 9.9...9 * 10(125) {38个9后边带88个0} 之间的数据,精确度可以达到小数点后38位小数,由于SQL Server中没有如此高精度的数据类型,所以在没有指定NUMBER精度和小数位的情况下SQL Server会将其转换为字符串类型以满足长度和精度的需要。

解决办法就是将SQL Server中同步表的nvarchar(384)类型修改为decimal类型或numeric类型,同步时不删除表,只是清除表内容,然后插入数据。同步SQL为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
TRUNCATE TABLE abc--清除表abc内容
go
insert into abc--将同义词aaa中的数据插入abc表
select *
from aaa

这样问题是解决了,但是造成两边查询出的数据不相同的原因是什么呢?这个我还不知道。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2007-12-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
XCode最佳实践之最佳数据类型
与其它ORM框架相比,XCode拥有最强的多数据库正向反向工程,暂时还没有发现能在这点上超于XCode的,哈哈! 但是,XCode的多数据库反向工程,也是有代价的,不同数据库的数据类型相差十万八千里,我们不可能完全支持。 所以,我们只做了常见的一些数据类型支持,但是这些已经足以满足99%的要求。 最佳数据类型如下: 1,整型。Int32是标准配置,这个必须有的。在Oracle,整型就是小数为0的Numeric 2,长整型。Int64,大部分数据库都有吧。 3,短整型。Int16,这个要小心了,似乎有些数
大石头
2018/01/09
1.2K0
Oracle、SQL Server和MySQL的隐式转换异同
这次的组内分享,选择了在不同数据库中的隐式转换这个话题。隐式转换是个老生常谈的问题了,不同的数据库,隐式转换的影响因素有所不同,我们通过一些例子来看一下。但是问题来了,如何避免隐式转换带来的负面影响?一方面是编程习惯的问题,另一方面就需要一些人肉/自动化的手段主动发现问题,如果两者都没有,就只能被动等着出问题,再找解决方案了。
bisal
2021/09/06
1.5K0
Oracle、SQL Server和MySQL的隐式转换异同
深度学习之主流数据库 | MySQL基础
这篇文章主要是讲一下常见的MySQL的安装,和基本操作。适合完全没有MySQL知识但是又急需一些MySQL知识的童靴作为快速入门使用。 背景与安装 背景不用多说了,大家都懂得。直接说在Ubuntu下面的安装吧。其实也是很简单。这里不搞复杂的源码安装,就依次输入下面非常简单的命令安装就够了。 sudo apt-get install mysql-server sudo apt isntall mysql-client sudo apt install libmysqlclient-dev 中间会有弹出设置
用户1332428
2018/03/09
1.9K0
深度学习之主流数据库 | MySQL基础
SQL Server常见数据类型介绍
数据表是由多个列组成,创建表时必须明确每个列的数据类型,以下列举SQL Server常见数据类型的使用规则,方便查阅。 整数类型 int  存储范围是-2,147,483,648到2,147,483,647之间的整数,主键列常设置此类型。 (每个数值占用 4字节) smallint  存储范围是-32,768 到 32,767 之间的整数,用来存储限定在特定数值范围内的数据。 (每个数值占用 2 字节) tinyint  存储范围是0到255 之间的整
Esofar
2018/09/05
5770
学习SQL【7】-函数
终于可以开原创标识和留言功能了,开心。我坚信努力总会有收获的。 不仅SQL, 对所有的编程语言来说,函数都起着至关重要的作用。函数就像是编程语言的“道具箱”,每种编程语言都准备了非常多的函数。譬如,C语言推崇的就是用函数来实现模块化编程。 根据用途不同,SQL中的函数大致可以分为算术函数、字符串函数、日期函数、转换函数和聚合函数。 一:函数的种类 1:函数的定义 所谓函数,就是输入某一值得到相应输出结果的功能,输入值称为参数,输出值称为返回值。 2:函数的分类 函数大致可以分为以下几种: 算术函数(用来
爱吃西瓜的番茄酱
2018/04/04
1.3K0
Oracle三大类型(varchar2,number,date)转换
Oracle中三大类型与隐式数据类型转换  (1)varchar2变长/char定长-->number,例如:'123'->123 (2)varchar2/char-->date,例如:'25-4月-15'->'25-4月-15' (3)number---->varchar2/char,例如:123->'123' (4)date------>varchar2/char,例如:'25-4月-15'->'25-4月-15'
星哥玩云
2022/08/17
2.8K0
SQL Server 数据类型
数据类型是数据的一种属性,表示数据信息的类型,任何一种计算机语言都定义了自己的数据类型。当然,不同的程序语言都具有不同的特点,所定义的数据类型的各类和名称都或多或少有些不同。SQLServer 提供了 25 种数据类型:   ·Binary [(n)]   ·Varbinary [(n)]   ·Char [(n)]   ·Varchar[(n)]   ·Nchar[(n)]   ·Nvarchar[(n)]   ·Datetime   ·Smalldatetime   ·Decimal[(p[,s])]   ·Numeric[(p[,s])]   ·Float[(n)]   ·Real   ·Int   ·Smallint   ·Tinyint   ·Money   ·Smallmoney   ·Bit   ·Cursor   ·Sysname   ·Timestamp   ·Uniqueidentifier   ·Text   ·Image   ·Ntext
阳光岛主
2019/02/19
2.1K0
Oracle number类型的语法和用法
摘要:先根据精度值,对number类型的数据从左边第一个非零数字开始数精度值个位数,之后的位数截断不要(要四舍五入吗),再根据小数位置值,对number类型的数据右边的低位进行四舍五入(如果小数位置值为负的,如何处理?)
全栈程序员站长
2022/09/15
2.3K0
oracle number整数,Oracle number类型的语法和用法
1. 精度(precision),或总位数。默认情况下,精度为38位,取值范围是1~38之间。也可以用字符*表示38。
全栈程序员站长
2022/09/15
2.5K0
Oracle数据类型之number
s:小数位,scale,是小数点右边的位数,取值范围是-84~127,默认值取决于p,如果没有指定p,那么s是最大范围,如果指定了p,那么s=0。
颍川
2019/11/20
1.7K0
用SQL Server2005同义词链接Oracle的完整过程
用SQL Server2005同义词链接Oracle数据库可以将Oracle中的表,视图等映射到SQL2005中,直接在SQL2005中操作Oracle的数据,非常简单方便。
深蓝studyzy
2022/06/15
4920
关于oracle中的sql数据类型(r3笔记第59天)
数据类型对于每一种编程语言而言都是数据存储的基础,对于编程语言的实现功能而言也是一个标尺,有些编程语言可能数据类型很丰富,比如java,c,在数据计算方面的支持很全面,有些编程比较精简,更侧重于实现特定的功能,数据类型也就简单得多。比如说shell。 对于oracle中的sql来说,数据类型的支持非常全面,无论是数据计算还是复杂的业务逻辑封装需要,数据类型的支持都是内置和可扩展的。可以根据需要来选择。 目前oracle的数据类型分类大体有如下的结构。 用户自定义类型,基本上都是由type来实现,可以根据需要
jeanron100
2018/03/15
7870
关于oracle中的sql数据类型(r3笔记第59天)
SQL, PL/SQL 之NUMBER数据类型
    NUMBER数据类型在Oracle中使用的较为广泛,可以存储零值,正负数,以及定长数,对于这个数据类型有个几个概念要搞清,否则容易搞混,下面给出具体描述。
Leshami
2018/08/14
1.5K0
Oracle—number数据类型[通俗易懂]
https://www.cnblogs.com/oumyye/p/4448656.html
全栈程序员站长
2022/09/06
2.4K0
SQL 基础(二)数据表的创建、约束、修改、查看、删除
定义约束名称后(若不定义,系统将自动创建),若数据录入错误,系统将提示报错信息,无 NOT NULL 约束下,系统缺省值为 NULL
攻城狮杰森
2022/06/03
1.1K0
SQL 基础(二)数据表的创建、约束、修改、查看、删除
SQL函数 TO_NUMBER
名称 TO_NUMBER 和 TONUMBER 可以互换。它们支持 Oracle 兼容性。
用户7741497
2022/08/02
1.4K0
MySQL字段类型的详细解释
MySQL支持大量的列类型,它可以被分为3类:数字类型、日期和时间类型以及字符串(字符)类型。 概述有意简化,更详细的说明应该考虑到有关特定列类型的附加信息,例如你能为其指定值的允许格式。 由MySQL支持的列类型列在下面。下列代码字母用于描述中:M指出最大的显示尺寸。最大的合法的显示尺寸是 255 。 D适用于浮点类型并且指出跟随在十进制小数点后的数码的数量。最大可能的值是30,但是应该不大于M-2。 方括号(“[”和“]”)指出可选的类型修饰符的部分。注意,如果你指定一个了为ZEROFILL,MySQL
wangxl
2018/03/09
2.1K0
SQL数据库数据类型_数据表的常见数据类型有哪些
精确数值型包括decimal 和 numeric两类,这两种数据类 型在SQL Server中,在功能上是完全等价的。 精确数值型数据由整数部分和小数部分构成,可存储从 -1038 +1 到 1038–1 的固定精度和小数位的数字数据,它存储长度最少为5字节,最多为17字节。 精确数值型数据的格式是:
全栈程序员站长
2022/09/23
2.1K0
见识一下SQL Server隐式转换处理的不同
隐式转换(Implicit Conversion)就像他的名字一样,是个隐秘、不容易被发现的问题,但归根结底,还是设计开发中未遵守相关的规范,或者说是不良的设计开发习惯所导致的。
bisal
2021/09/06
1.1K0
见识一下SQL Server隐式转换处理的不同
SqlAlchemy 2.0 中文文档(五十一)
包含整数主键的 SQLAlchemy Table 对象通常被假定具有“自动递增”行为,这意味着它们可以在插入时生成自己的主键值。在 Oracle 中,有两种可用的选项,即使用 IDENTITY 列(仅限 Oracle 12 及以上版本)或将 SEQUENCE 与列关联。
ApacheCN_飞龙
2024/08/01
3520
相关推荐
XCode最佳实践之最佳数据类型
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文