天天看点

Oracle存储过程迁移ODPS-00(专有云):Oracle - ODPS数据类型转换

<b>类型</b>

<b>描述</b>

<b>取值范围</b>

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;

<b>data type</b>

<b>description</b>

<b>odps</b>

<b>转换到odps desc</b>

varchar2(size [byte | char])

varchar2(1-4000)

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

nvarchar2(size)

nvarchar2(1-4000)

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)

其他

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

float [(p)]

float(8)

参考number

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

long

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

建议数据存储在oss

date

日期

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

+9999)

binary_float

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

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

binary_double

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

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

timestamp[(fractional_seconds_precision)]

时间戳

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

timestamp[(fractional_seconds_precision)] withtime zone

时间戳,带时区

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

timestamp[(fractional_seconds_precision)] withlocal time zone

interval year [(year_precision)] tomonth

 

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

interval day [(day_precision)] to second[(fractional_seconds_precision)]

raw(size)

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

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字节

rowid

行唯一识别字符串

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

urowid [(size)]

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

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

char [(size [byte | char])]

定长字符串

nchar[(size)]

clob

字符型大字段数据类型

nclob

blob

二进制型大字段数据类型

bfile

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