博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle存储过程迁移ODPS-00(专有云):Oracle - ODPS数据类型转换
阅读量:5894 次
发布时间:2019-06-19

本文共 3223 字,大约阅读时间需要 10 分钟。

ODPS数据类型:

类型

描述

取值范围

Bigint

8字节有符号整型。请不要使用整型的最小值 (-9223372036854775808),这是系统保留值。

-9223372036854775807 ~ 9223372036854775807

String

字符串,支持UTF-8编码。其他编码的字符行为未定义。

单个String列最长允许8MB。

Boolean

布尔型。

True/False

Double

8字节双精度浮点数。

-1.0 10308 ~ 1.0 10308

Datetime

日期类型。使用东八区时间作为系统标准时间。

0001-01-01 00:00:00 ~ 9999-12-31 23:59:59

decimal

decimal类型支持null值,小数点前36位有效数字,小数点后18位有效数字。

正负无穷, 不支持,如果计算结果为正负无穷,或超出decimal的值域时抛异常,绝对值小于最小可表达范围时,置0。

 -999999999999999999999999999999999999.999999999999999999 ~ 999999999999999999999999999999999999.999999999999999999

select '1',cast("999999999999999999999999999999999999.999999999999999999" as decimal) from dual;

oracle与ODPS的数据类型映射表

Data Type

Description

ODPS

转换到ODPS Desc

VARCHAR2(size [BYTE | CHAR])

VARCHAR2(1-4000)

string

单个String列最长允许8MBOralce12c最长的varchar(30000)约为30Kb,可以存储。但是如果文本不是需要分析的列,最好还是放在OSS中。

NVARCHAR2(size)

NVARCHAR2(1-4000)

string

单个String列最长允许8MB

NUMBER [ (p [, s]) ]

无小数位

19位以下:NUMBER(19, 0)
36位以下:NUMBER(36, 0)
有小数位

p and s 小于等于17,例如NUMBER(17,2)

p-s小于等于36,s小于等于18,例如NUMBER(38,2)
其他

无小数位

bigint

decimal
有小数位
double
decimal
string

考虑精度丢失情况,数值1.1在oracle存储和在ODPS存储必须完全相等。所以,这里的相等就是看到的数字全一致。无法对应的数据类型,只能存储为varchar。

FLOAT [(p)]

float(8)

其他

double

参考number

Float中的p指的是二进制的长度,最大可以到126。等同于NUMBER(38)。占22字节。所以,如果数据与NUMBER相同,请参考NUMBER对应关系。

LONG

最长可以到达2Gb长度的字符类型。

建议数据存储在OSS

DATE

日期

datetime

因为当前ADS日期类型函数支持不够丰富,统一转为unixtime格式,存储为bigint类型。如果同步到ADS也要存储为日期,转为datetime类型。(oracle 年的范围 -4713 +9999)

BINARY_FLOAT

32-bit floating point number. This data type requires 4 bytes.

double

 等同于oracle的float(4),number(7)

BINARY_DOUBLE

64-bit floating point number. This data type requires 8 bytes.

double

 等同于oracle的float(8), number(17)

TIMESTAMP[(fractional_seconds_precision)]

时间戳

datetime

因为当前ADS日期类型函数支持不够丰富,统一转为unixtime格式,存储为bigint类型。如果同步到ADS也要存储为日期,转为datetime类型。

TIMESTAMP[(fractional_seconds_precision)] WITHTIME ZONE

时间戳,带时区

datetime

因为当前ADS日期类型函数支持不够丰富,统一转为unixtime格式,存储为bigint类型。TIME ZONE 特征丢失。

TIMESTAMP[(fractional_seconds_precision)] WITHLOCAL TIME ZONE

时间戳,带时区

datetime

因为当前ADS日期类型函数支持不够丰富,统一转为unixtime格式,存储为bigint类型。TIME ZONE 特征丢失。

INTERVAL YEAR [(year_precision)] TOMONTH

 

bigint

时间间隔无对应数据类型,建议转为秒

INTERVAL DAY [(day_precision)] TO SECOND[(fractional_seconds_precision)]

 

bigint

时间间隔无对应数据类型,建议转为秒

RAW(size)

RAW,类似于CHAR,声明方式RAW(L)L为长度,以字节为单位,作为数据库列最大2000,作为变量最大32767字节。

string

string

Oracle中RAW和Varchar2常用的两个转换函数   
1. UTL_RAW.CAST_TO_RAW 
该函数按照缺省字符集,将VARCHAR2字符串转换为RAW。
insert into cmpp_submit (dest_terminal_id,msg_content) values('13001081371',UTL_RAW.CAST_TO_RAW('您好!'));
2. UTL_RAW.CAST_TO_VARCHAR2
该函数按照缺省字符集合,将RAW转换为VARCHAR2。
select UTL_RAW.CAST_TO_VARCHAR2(msg_content) from cmpp_deliver;

LONG RAW

LONG RAW,类似于LONG,作为数据库列最大存储2G字节的数据,作为变量最大32760字节

 

建议数据存储在OSS

ROWID

行唯一识别字符串

string

物理ROWID(Physical Rowid)可以让我们快速的访问某些特定的行。只要行存在,它的物理ROWID就不会改变。高效稳定的物理ROWID在查询行集合、操作整个集合和更新子集是很有用的。例如,我们可以在UPDATE或DELETE语句的WHERE子句中比较UROWID变量和ROWID伪列来找出最近一次从游标中取出的行数据。

UROWID [(size)]

行唯一识别字符串的base-64编码

string

扩展ROWID使用检索出来的每一行记录的物理地址的base-64编码。ROWIDTOCHAR(),ROWIDTOCHAR()

CHAR [(size [BYTE | CHAR])]

定长字符串

string

string

NCHAR[(size)]

定长字符串

string

string

CLOB

字符型大字段数据类型

建议数据存储在OSS

NCLOB

字符型大字段数据类型

建议数据存储在OSS

BLOB

二进制型大字段数据类型

建议数据存储在OSS

BFILE

二进制文件,存储在数据库外的操作系统文件,只读的。把此文件当二进制处理。

建议数据存储在OSS

 

转载地址:http://ynssx.baihongyu.com/

你可能感兴趣的文章
"数学口袋精灵"bug(团队)
查看>>
2017python第六天作业 面向对象 本节作业: 选课系统
查看>>
【找规律】Divide by Zero 2017 and Codeforces Round #399 (Div. 1 + Div. 2, combined) B. Code For 1...
查看>>
Scribes:小型文本编辑器,支持远程编辑
查看>>
为什么要使用 SPL中的 SplQueue实现队列
查看>>
文件的相关操作(创建、打开、写入、读出、重命名)
查看>>
品尝阿里云容器服务:用nginx镜像创建容器,体验基于域名的路由机制
查看>>
PHP const关键字
查看>>
ssh 安装笔记
查看>>
游戏音效下载网站大全
查看>>
angular $resouse服务
查看>>
实验五
查看>>
记那次失败了的面试
查看>>
程序包+创建包规范+创建包体+删除程序包
查看>>
3-继承
查看>>
海归千千万 为何再无钱学森
查看>>
vue2.0 仿手机新闻站(六)详情页制作
查看>>
FreeRTOS的内存管理
查看>>
JSP----九大内置对象
查看>>
The Z-Index CSS Property: A Comprehensive Look | Smashing Coding
查看>>