oracle数据类型
https://docs.oracle.com/en/database/oracle/oracle-database/index.html
https://developer.aliyun.com/article/33855
https://www.cnblogs.com/kerrycode/archive/2013/08/17/3265120.html
http://blog.itpub.net/26736162/viewspace-2149685/
Oracle 数据类型
要使用数据库来存储数据,首先就要知道这个数据库都能存储什么类型的数据。
数据类型是在向数据表中存储数据前必须设定好的,就像如果要使用记事本查看文件内容,那么文件就要是文本的,不能有图片,否则图片是查看不了的,因为记事本中只能查看文本文件。
在 Oracle 11g 中提供的数据类型有 23 种,下面介绍常用的数据类型。
1. 字符型
字符型在 Oracle 11g 中有 varchar2、char、nchar、nvarchar2 和 long 五种,它们在数据库中是以 ASCII 码的格式存储的。
数据类型 | 说明 |
---|---|
CHAR(n) | 存储固定长度的字符串,长度以字节为单位,默认和最小字符数为 1,最大字符数为 2000 |
VARCHAR2(n) | 存储可变长度的字符串,长度以字节为单位,最小字符数是 1,最大字符数是 4000 |
2. 数字型
数字型在 Oracle 11g 中常用的有 number 和 float 类型两种,可以用它们来表示整数和小数。
数据类型 | 说明 |
---|---|
NUMBER(p, s) | 可以存储 0、正数和负数。p 表示数值的总位数(精度),取值范围为 1~38;s 表示刻度,取值为−84~127 |
3. 日期类型
日期类型在 Oracle 11g 中常用的有 date 和 timestamp 两种类型,可以用它们来存放日期和时间。
数据类型 | 说明 |
---|---|
DATE | 用于存储日期和时间。可以存储的日期范围为公元前 4712 年 1 月 1 日到公元后 9999 年 12 月 31 日,占据 7 字节的空间,由世纪、年、月、日、时、分、秒组成 |
TIMESTAMP(n) | 表示时间戳,是 DATE 数据类型的扩展,允许存储小数形式的秒值。p 表示秒的小数位数,取值范围为 0~9,默认值为 6 |
4. 其他数据类型
除了上面讲过的字符型、数字型、日期类型之外,在 Oracle 11g 中还有存放大数据的数据类型以及存放二进制文件的数据类型。
数据类型 | 取值范围(字节) | 说明 |
---|---|---|
CLOB | 用于存储单字节或多字节的大型字符串对象,支持使用数据库字符集的定长或变长字符。在 Oracle 11g 中 CLOB 类型最大存储容量为 128TB | |
BLOB | 用于存储大型的、未被结构化的变长的二进制数据(如二进制文件、图片文件、音频和视频等非文本文件)。在 Oracle 11g 中 BLOB 类型最大存储容量为 128TB | |
BFILE | 用于存储指向二进制格式文件的定位器,该二进制文件保存在数据库外部的操作系统中。在 Oracle 11g 中 BFILE 文件最大容量为 128TB,不能通过数据库操作修改 BFILE 定位器所指向的文件 | |
RAW(n) | 用于存储变长的二进制数据,n 表示数据长度,取值范围为 1~2000 字节 | |
LONG RAW | 用于存储变长的二进制数据,最大存储数据量为 2GB。Oracle 建议使用 BLOB 类型代替 LONG RAW 类型 | |
ROWID | 行标识符,表示表中行的物理地址的伪列类型 |
def oracle_records_to_df(records): values = {} for rows in records: for i in rows: if i not in values: values[i] = [] v = rows[i] if isinstance(v, str): values[i].append(v) elif isinstance(v, float): values[i].append(v) elif isinstance(v, datetime.datetime): values[i].append(datetime_to_date_int(v)) elif isinstance(v, int): values[i].append(v) elif v is None: values[i].append(0) else: raise ValueError('invalid data type:' + str(type(v))) return pd.DataFrame(values)