首页 > 数据库 >Oracle数据类型的简单学习之一

Oracle数据类型的简单学习之一

时间:2024-01-28 21:07:19浏览次数:27  
标签:数据库 数据类型 学习 2003 SQL Oracle decimal

Oracle数据类型的简单学习之一


背景

因为信创安可替代的发展
有很多项目提到了数据库切换到国产数据库的要求. 
一般情况是要求从Oracle/SQLServer 迁移到国产的:
达梦/瀚高/人大金仓/南大通用 等数据库. 

但是因为Oracle作为数据库领域 No.1的存在
他对SQL的规范标准支持的并不是很好. 
所以里面会有很多数据库数据类型映射的问题. 

自己对数据库学习很浅.  希望能够慢慢学习逐渐提高.

Oracle的自建数据类型

Oracle数据类型的简单学习之一_数据库


字符类型

前期总结过很多 字符数据类型
主要是 varchar nvarchar 相关的内容. 
区别是:
varchar 存储的是  安装时指定的数据库字符集. 
nvarchar 存储的是 安装时指定的国家字符集. 

需要说明的是 国家字符集一般是AL16UTF16
这个字符集只能用于 国家字符集, 不能用于数据库字符集

这里需要补充的是, 虽然 varchar 一般说法是按照 字节来存储. nvarchar 安装字符来存储
但是实际上也是不对的. 

他主要是受到: NLS_LENGTH_SEMANTICS 参数的默认限制
也可以创建表时, 通过 varchar(lenth char/byte)的方式显示来指定. 
需要注意, 这个参数默认是 byte. 建库语句默认也是byte. 
修改参数后建议重启数据库, 并且这个参数是PDB可以隔离的. 
参数是 session/system 级别都可以进行设置的.

字符类型

Oracle数据类型的简单学习之一_数据库_02


数值类型

需要说明 Oracle其实底层存储只有 number 和 float BINARY_FLOAT BINARY_DOUBLE 四种数据类型
但是ISO的SQL规范里面 int double float 等等多种数据类型, 其实Oracle里面一概没有实现. 

并且decimal 其实也仅是 number 的一个别名, 据说只是为了从DB2里面进行转换才用的. 

这里面有一个非常大的误区. Oracle的number 虽然是 38 的最大precision
但是实际上他可以最多存储126位的数字, 当然 此时的精度无法保证. 
最大可以存储 e+125 的数值. 

里面的换算关系很复杂, 可以通过测试来进行验证. 
但是定义了精度和scale的话, 就跟decimal 一样可以保证精度.

测试1

drop table zhaobsh ; 
create table zhaobsh (a decimal ,b number , c decimal(5) , d decimal(19,2) ,
e float ,F decimal(38,2),g number(38,-84) ,h BINARY_FLOAT , i binary_double ) ;

SQL> desc zhaobsh
 ----------------------------------------- -------- ----------------------------
 A                                                  NUMBER(38)
 B                                                  NUMBER
 C                                                  NUMBER(5)
 D                                                  NUMBER(19,2)
 E                                                  FLOAT(126)
 F                                                  NUMBER(38,2)
 G                                                  NUMBER(38,-84)
 H                                                  BINARY_FLOAT
 I                                                  BINARY_DOUBLE

测试2

insert into zhaobsh(b) values (999999999999999999999999999999999999999949999999999999999999999999999999999999999999999999999999999999999999999999999999999999)
126长度, 这个可以正常保存。

insert into zhaobsh(b) values (999999999999999999999999999999999999999950000000000000000000000000000000000000000000000000000000000000000000000000000000000000)
126长度, 这个保存会报错。

数值类型

Oracle数据类型的简单学习之一_数据类型_03


布尔类型

需要说明 Oracle没有布尔类型.

布尔类型其实是一个深坑. 他是 SQL2003的标准才添加的.
SQL92标准里面其实是没有 boolean 类型的. 

Oracle作为数据库的扛把子, 自己玩的比标准还要深入. 
所以他并没有非常良好的按照SQL标准进行开发. 

产品一般可以使用 char(1) 后者是 number(1) 进行描述.
但是迁移后的数据, 是需要对照一下的. 
这里其实还有业务逻辑, 需要进行处理.

SQL规范的进展-来源参见水印 CSDN

  • 需要注意 2023.6.1 SQL2023规范已经发布.
  • 这个规范是需要付费的. 没钱的不建议下载.

Oracle数据类型的简单学习之一_数据类型_04


SQL2003规范

SQL:2003是SQL标准的一个重要版本,于2003年发布。它在SQL:1999的基础上做了一些修订和扩展,引入了一些新的功能和改进,进一步完善了SQL语言的功能和能力。

以下是SQL:2003标准的一些主要特征和改进:

更多的窗口函数:SQL:2003扩展了对窗口函数的支持,使得窗口函数的功能更加强大和灵活。

序列和自增字段:引入了序列(Sequence)和自增字段(Identity Columns)的概念,为数据库中生成唯一标识符提供了更方便和标准的方式。

更强大的数据类型支持:SQL:2003引入了更多种类的数据类型,包括布尔类型(BOOLEAN)、日期和时间处理的增强类型等,增强了数据建模的灵活性。

更多的XML支持:SQL:2003进一步加强了对XML数据类型和XML查询语言的支持,允许更方便地操作和处理XML数据。

对标量子查询的扩展:引入了对标量子查询(Scalar Subqueries)的支持,允许在SELECT列表中使用子查询。

更多的标准化函数和操作符:SQL:2003引入了更多的标准函数和操作符,增强了SQL语言的表达能力。

更多的数据完整性约束和管理:加强了对数据完整性约束的支持和管理,使得数据库更容易受到保护和控制。

对外部数据集成的改进:SQL:2003增强了对外部数据集成的能力,使得数据库系统更容易与外部数据进行集成和交互。



标签:数据库,数据类型,学习,2003,SQL,Oracle,decimal
From: https://blog.51cto.com/u_11529070/9454164

相关文章

  • Oracle 不同字符集复合索引长度验证
    Oracle不同字符集复合索引长度验证背景前段时间同事找到一个参数,可以解决Oracle的char和byte模式存储超长的问题.很大程度上解决了研发修改SQL的工作量.但是发现在某些字符集下面会出现一些异常情况.所以想学习和处理一下.需要说明我的数据库版本是Oracle19.21.0.0采......
  • IBM java的分析工具(ga和ha)学习和整理
    IBMjava的分析工具(ga和ha)学习和整理背景前几天学习了整理了jca工具今天继续学习一下ga工具ga工具主要是分析gclog相关.可以很直观的进行gclog的分析和展示.除了mat之外还有一个比较轻量级的内存dump分析工具ha.想着一起学习和分析一下.ga工具的相关学习下载:https......
  • IBM jca 工具的学习与整理
    IBMjca工具的学习与整理背景发现自己最早看到IBM这个工具的时间是2022年9月份.但是一直没有进行过仔细的学习与论证.本周出现了一个问题.虽然通过gclog明显看出来是一个oom然后内存对象里面排第一的是hashnode相关内容猜测出可能是excel导入/导出相关的内容但是自己......
  • SQLServer和Oracle常用函数对比
      1.绝对值 S:select abs(-1) value O:select abs(-1) value from dual 2.取整(大) S:select ceiling(-1.001) value O:select ceil(-1.001) value from dual 3.取整(小) S:select floor(-1.001) value O:select flo......
  • perf_event_open 学习 —— 通过read的方式读取硬件技术器
    目录示例程序1单计数器多计数器示例程序2ConfigureasinglecounterConfiguremultiplecounters(nomultiplexing)示例程序1Linuxperf子系统的使用(一)——计数刚刚入职的时候我就研究了perf_event_open()这个巨无霸级别的系统调用,还用Python封装了一层,非常便于获取计数器......
  • 《深入浅出计算机组成原理》学习笔记1——计算机基本组成与指令执行
    一丶冯·诺依曼体系结构:计算机组成的金字塔1.从装机的角度看计算机基本组成CPU:计算机最重要的核心配件,全称中央处理器,计算机的所有“计算”都是由CPU来进行的内存撰写的程序、打开的浏览器、运行的游戏,都要加载到内存里才能运行。程序读取的数据、计算得到的结果,也都要......
  • JS原型链: 一次学习终生受用
    ProtoType原型|原型对象|显示原型prototype它是函数的一个属性prototype是一个对象。当我们创建函数的时候会默认添加prototype这个属性 __proto__隐式原型(由浏览器实现)对象的属性。__proto__属性是创建对象时自动添加的,默认值为其构造函数的prototype[[pr......
  • 【学习笔记】代数
    向量咕。线性方程组定义线性方程组指的是形如\[\begin{aligned}a_{11}&x_1+a_{12}x_2+\cdots+a_{1n}x_n=b_1\\a_{21}&x_1+a_{22}x_2+\cdots+a_{2n}x_n=b_2\\&\vdots\\\\\\\\\\\\\vdots\\\\\\\\\ddots\\\\\\\......
  • 1/28 学习进度笔记
    SQL风格语法-注册DataFrame成为表DataFrame的一个强大之处就是我们可以将它看作是一个关系型数据表,然后可以通过在程序中使用spark.sql()来执行SQL语句查询,结果返回一个DataFrame。如果想使用SQL风格的语法,需要将DataFrame注册成表,采用如下的方式:df.createTempView(""score"......
  • perf_event_open学习 —— mmap方式读取
    目录示例程序2采集单个值采集多个值示例程序2示例程序3示例程序2Linuxperf子系统的使用(二)——采样(signal方式)在上一篇《Linuxperf子系统的使用(一)——计数》已经讲解了如何使用perf_event_open、read和ioctl对perf子系统进行编程。但有时我们并不需要计数,而是要采样。比如这......