`

Oracle学习:Oracle数据类型

阅读更多
§1.7 ORACLE数据类型
Oracle数据库的数据类型与其它的数据库系统相比,它的数据类型不多,Oracle在表示数据方面比其他数据库系统来说要省去许多关键字。Oracle只用NUMBER(m,n)就可以表示任何复杂的数字数据。其它如日期类型等也简单得多,只DATE就表示日期和时间。下面以列表形式给出各个版本的Oracle系统数据类型的表示方法。下面给出Oracle旧版本的数据类型的目的是让读者了解Oracle的变化,另外就是你在对旧版本进行升级或数据转换时要注意各个版本的差别。
ORACLE5、ORACLE6数据类型
数据类型 说明
Char 可变长字符型,≤254
Varchar2 可变长字符型,≤2000
Number(m,n) 数字类型,含整数、小数等
Date 日期型,含时间,缺省格式为mmm-dd-yyyy hh:mi:ss(占7字节)
Long 存储大型可变长字符串,≤2GB
Raw 存储短二进制串,≤2GB
Long raw 存储长二进制串,≤2GB
ORACLE7数据类型
数据类型 说明
Char 定长字符,≤255个字符
Varchar 变长字符,≤2000个字符
Varchar2 变长字符,≤2000个字符
Number(m,n) 数字类型,含整数、浮点、双精度等
Long 存储大型可变长字符串,≤2GB
Raw 存储可变短二进制数,≤2000
Long raw 存储大型可变长二进制数,≤2GB
ORACLE8/8i 数据类型
数据类型 说明
Char 定长字符,≤2000个字符
Varchar (同Varchar2)可变字符,≤4000个字符
Varchar2 变长字符,≤4000个字符
Date 固定长度(7字节)的日期型
Number 数字型,可存放实型和整型
Long 可变字符,≤2GB个字符
Raw 可变二进制数据,≤4000字节
Long raw 可变二进制数据,≤2GB
MLSLABEL 仅Trusted Oracle 用长度在2~5字节间
Blob 大二进制对象,≤4GB
Clob 大字符串对象,≤4GB
Nclob 多字节字符集的Clob,≤4GB
Bfile 外部二进制文件,大小由OS决定
CHAR()
定长字符型(在Oracle5 、Oracle6 是变长),字符长度不够自动在右边加空格符号。当字符长度超出2000个则错误。不指定大小缺省为 1。
VARCHAR()
可变字符型,当前与VARCHAR2()相同。
VARCHAR2()
可变字符型,当前与VARCHAR()相同。VARCHAR2 类型的字段(列)可存放4000个字符;但是VARCHAR2 变量可以存放32,767 个字符。大小必须指定。
NCHAR()和NVARCHAR2()
NCHAR 和NVARCHAR2 分别与 CHAR和VARCHAR2 有相同的大小。并用于于存放 National Language Support (NLS)数据,Oracle 允许以本地语言存放数据和查询数据。
如果将列名声明成NCHAR、NVARCHAR2这样的类型,则insert和 select 等语句中的具体值前加N,不能直接按照普通字符类型进行操作。看下面例子:
SQL> create table nchar_tst(name nchar(6),addr nvarchar2(16),sal number(9,2));
表已创建。
SQL> insert into nchar_tst values(N'赵元杰',N'北京市海淀区',9999.99);
已创建 1 行。
SQL> select * from nchar_tst where name like N'赵%';
NAME ADDR SAL
------ ---------------- ----------
赵元杰 北京市海淀区 9999.99
SQL> select * from nchar_tst where name like '赵%';
select * from nchar_tst where name like '赵%'
*
ERROR 位于第 1 行:
ORA-12704: 字符集不匹配.
提示:虽然Oracle可以使用nchar, nvarchar2 类型来存放字符数据,但建议设计者不要使用NCHAR和NVARCHAR2。因为CHAR和VARCHAR2就能存放汉字。
NUMBER(M,N)
M是数据的整数部分,N是数据的精度(即小数)部分,注意,部分可以表示负的精度。用可以表示从小数点往右或往左保留多少位。如下表:
实际值 数据类型 存储值
1234567.89 Number 1234567.89
1234567.89 Number(8) 1234568
1234567.89 Number(6) 出错
1234567.89 Number(9,1) 1234567.9
1234567.89 Number(9,3) 出错
1234567.89 Number(7,2) 出错
1234567.89 Number(5,-2) 1234600
1234511.89 Number(5,-2) 1234500
1234567.89 Number(5,-4) 1230000
1234567.89 Number(*,1) 1234567.9
Sal number(7,2), --表示5位整数,2位小数.
DATE
Oracle 的日期型用7个字节表示,每个日期型包含如下内容:
l Century (世纪)
l Year (年)
l Month(月)
l Day (天)
l Hour (小时)
l Minute (分)
l Second (秒)
日期型字段有下面特点:
l 日期型字段的插入和更新可以数据型或字符并带to_date 函数说明即可。
l 缺省的日期格式有NLS_DATE_FORMAT参数控制,它的缺省格式为DD-MON-YY。
l 缺省的时间是夜里 00:00:00 (即0点 0分0秒)。
l sysdate返回的是服务器的时间,见下面例子。
l 日期格式的显示可以设置,见下面例子。
l 日期型可以运算,见下面例子。见下面例子。
l 世纪用cc 表示;年用yyyy表示,月用mm表示,日用dd表示,小时用hh24表示,分用mi表示,秒用ss表示。
例子:
SQL> create table save_info(per_id varchar2(20),name varchar2(20),tran_date date,
2 tran_val number(12,2));
表已创建。
SQL> insert into save_info values ( '110105540609811','赵元杰',
2 to_date('2001.06.18','yyyy.mm.dd'),12345.66);
已创建 1 行。
SQL> select * from save_info;
PER_ID NAME TRAN_DATE TRAN_VAL
-------------------- -------------------- ---------- ----------
110105540609811 赵元杰 18-6月 -01 1234.66
SQL> select per_id,name,to_char(tran_date,'yyyy/mm/dd'),tran_val from save_info;
PER_ID NAME TO_CHAR(TR TRAN_VAL
-------------------- -------------------- ---------- ----------
110105540609811 赵元杰 2001/06/18 12345.66
SQL> show parameter nls_date_format
NAME TYPE VALUE
------------------------------------ ------- ------------------------------
nls_date_format string
SQL> alter session set nls_date_format=
2 '"公元"yyyy"年"mm"月"dd"日"';
会话已更改。
SQL> select sysdate from dual;
SYSDATE
------------------
公元2001年05月18日
SQL> select to_char(sysdate,'cc yyyy.mm.dd') from dual;
TO_CHAR(SYSDA
-------------
21 2001.05.18
关于日期型的使用方法详细请参考《Oracle8i National Language Support Guide》。
BLOB
大二进制对象,每条记录可存储达4GB的数据,详细见后面章节。
CLOB
大字符对象,每条记录可存储达4GB的数据,详细见后面章节。
BFILE
外部二进制文件,每条记录可存储达4GB的数据(与OS有关),详细见后面章节。
RAW
非结构的二进制数据,这些数据不被数据库系统解释。RAW可以存储达2,000字节。
LONGRAW
大的二进制类型数据,LONGRAW是非结构的二进制数据,这些数据不被数据库系统解释。LONGRAW可以存储达2GB字节。LONGRAW不能被索引,而RAW可以被索引。
ROWID
ROWID在Oracle数据库中是一个虚的列,即系统用的特殊的列,不是我们建立的列。用于对数据库中的每条记录进行定位。详细见“Rowid的使用”章节。
UROWID
UROWID 是Universal ROWID 的意思。即全球ROWID,它支持逻辑和物理ROWID,也作为外部表的(通过getway 访问的非Oracle 表)的ROWID。UROWID类型可以存储所有的ROWID类型的数据。
%TYPE类型的匹配:
books_printed number(6);
books_sold books_printed%TYPE;
books_sold的数据类型与book_printed的类型一致;
( %TYPE类型 在 PL/SQL中介绍 )。
空值与字符型、数字型的运算:
null + <数字>=null (空值+数字仍是空值)
null > <数字>=null (空值与数字比较结果为空值)
null || '字符串' = 字符串
number类型与以下类型具有同等的值域:
DEC
Decimal
Double PREcision
Float
Integer
Int
Numeric
Real
Smallint
提示:虽然Oracle可以使用上面的子数据类型,但建议还是采用NUMBER(n,m)为好。因为如果使用子数据类型定义字段类型不当,可能引起数据在运算方面的问题。
Long数据类型的限制:
l select中可以用long;
l update中可以用select子句;
l insert中可以用Valus子句;
l 每个表只能允许一个long列;
l long列不能列出完整性约束(null、not null除外);
l long列不能被索引;
l 过程或存储函数不能接收long型函数;
l 存储函数不能返回long型值。
long 目前不能出现在以下情况中:
l select中的Where,Group by,order by,Connect by,distinct;
l 不能对long列作substr,instr;
l 表达式或条件;
l 子查询或集合中不能用long;
l Create table ...as select 中不能用long;

 

分享到:
评论

相关推荐

    Oracle与.Net 数据类型映射

    它提供了一个OracleDbType枚举,该枚举定义了所有Oracle数据类型到.NET数据类型的映射。例如,OracleDbType.Number对应.NET的decimal,OracleDbType.Varchar2对应.NET的string,OracleDbType.Date对应.NET的DateTime...

    Oracle与DB2数据类型分类对应说明

    Oracle 与 DB2 数据类型分类对应说明 Oracle 和 DB2 是两个广泛应用的关系数据库管理系统,它们都具有丰富的数据类型,用于存储和管理各种类型的数据。然而,在实际应用中,我们经常需要在 Oracle 和 DB2 之间进行...

    oracle基本数据类型

    Oracle 基本数据类型 Oracle 中有多种基本数据类型,包括字符类型、数字类型、日期类型、二进制类型等。了解这些数据类型的特点和使用场景,对于数据库设计和开发至关重要。本文将详细介绍 Oracle 中的基本数据类型...

    Oracle学习笔记 PDF

    ### Oracle学习笔记知识点详解 #### 一、Oracle简介 Oracle是一家知名的软件公司,以其数据库管理系统闻名全球。该公司成立于1977年,总部位于美国加利福尼亚州。Oracle不仅提供数据库解决方案,还涉及中间件、...

    oracle数据驱动包:ojdbc14-10.2.0.3.0.jar

    Oracle JDBC 驱动主要有四种类型: 1. ** Thin Driver (Type 4)**:这是一个纯 Java 实现的驱动,无需本地库,直接与数据库通信。`ojdbc14.jar` 就是 Thin Driver 的一个实例,它适用于跨平台的部署,且不需要在...

    ORACLE 10g 数据类型

    此外,Oracle 还有一些特殊数据类型: 5. `rowid` `rowid` 是一个伪列,表示数据在数据库中的物理地址,它是唯一标识每条记录的关键。尽管不能直接用于排序或确定插入顺序,但它是快速访问记录的一种方式。`rowid` ...

    Oracle Developer:第2章 Oracle Developer对象综述.pdf

    - VARCHAR2, DATE, NUMBER等Oracle数据库中常用的数据类型。 - Format Mask,格式掩码,用于定义数据的显示格式。 - Default Value,设定字段的默认值。 14. Java Bean在Oracle Developer中的应用: - Forms ...

    Introduction To ORACLE9i:SQL2

    - **数据类型**:Oracle 9i SQL2支持多种数据类型,如NUMBER、VARCHAR2、DATE等,这些数据类型对于定义表结构至关重要。 - **创建表**:通过CREATE TABLE语句可以定义新的表结构。 ```sql CREATE TABLE table_name...

    sqlserver-oracle 数据类型对照

    - `bit`在SQL Server中没有直接对应的Oracle数据类型,但可以近似用单字节的`NUMBER(1)`表示。 - `datetime`和`smalldatetime`在SQL Server中对应Oracle的`DATE`,表示日期和时间。 - `decimal`和`numeric`在SQL ...

    sql server 和oracle 中数据类型的区别

    对应的Oracle数据类型为`NUMBER(19)`。 2. **binary**: 用于存储二进制数据,固定长度。例如,`binary(50)`表示存储50个字节的二进制数据,在Oracle中对应的类型为`RAW(50)`。 3. **bit**: 用于存储布尔值或单个位的...

    oracle-java数据类型1

    在 Oracle 数据库与 Java 应用程序交互时,理解 SQL 数据类型和它们对应的 JDBC 类型以及 Oracle 扩展的 Java 类型是至关重要的。这里我们将深入探讨这些概念,并提供一个全面的指南。 首先,JDBC(Java Database ...

    oracle数据类型.doc

    在Oracle中,数据类型可以分为基本数据类型、对象数据类型和大型对象数据类型。以下是对Oracle主要数据类型的详细说明: 1. **Char(n)**: 这是一种定长字符串数据类型,其中n的范围是1到2000字节。如果未指定长度,...

    Oracle9i数据类型Java数据类型Schema类型对比.doc

    1. Oracle9i 数据类型: - NUMBER(1): 可以存储单个数字,相当于 Java 中的 boolean 类型,但实际存储的是整数。 - NUMBER(3): 适合存储小整数,对应 Java 的 Byte 类型。 - NUMBER(5): 对应 Java 的 Short 类型...

    Oracle:企业大数据解决方案(PDF)

    在这一背景下,Oracle推出了其企业级大数据解决方案,旨在帮助企业更好地处理、分析非传统且结构较为松散的数据类型,如网页日志、社交媒体数据、电子邮件、传感器数据以及图像等。这些数据类型通常无法通过传统的...

    oracle学习视屏

    4. 备份与恢复:学习Oracle的数据保护策略,包括备份类型、备份工具和恢复技术。 5. 性能监控与调优:使用Oracle的性能分析工具(如SQL*Plus、 tkprof 和AWR报告)进行性能监控,并学习如何通过调整SQL语句、索引或...

    Oracle和DB2的数据类型比较

    ### Oracle和DB2的数据类型比较 #### 一、概述 本文旨在对比Oracle和DB2/400数据库管理系统中的数据类型,并重点分析日期和时间类型的差异。由于Oracle和DB2/400在数据类型的定义和实现上存在差异,因此在进行...

    Tianlesoftware Oracle 学习手册(v1.0)高清完整PDF版

    ROWID是Oracle中一种特殊的数据类型,用于表示数据库表中每条记录的物理地址。ROWID可以被用来快速定位到表中的特定行,因此对于基于ROWID的查询非常高效。 --- 以上是从Tianlesoftware Oracle 学习手册(v1.0)中...

    java、mysql以及oracle数据类型对照表

    标题"java、mysql以及oracle数据类型对照表"揭示了本主题的核心,即比较Java、MySQL和Oracle数据库的数据类型。Java的数据类型主要分为基本类型(如int、double、boolean)和引用类型(如类、接口和数组)。MySQL和...

    oracle学习周记[基础篇]

    4. **数据类型**:Oracle支持多种数据类型,如NUMBER(数值)、VARCHAR2(可变长度字符串)、DATE(日期和时间)、LONG(长文本)等。 5. **PL/SQL**:Oracle的编程语言,结合了SQL与传统程序设计语言的功能,用于...

Global site tag (gtag.js) - Google Analytics