暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

greenplum和oracle语法差异第一版本

Oracle蓝莲花 2021-04-15
2903



Green plumOracle语法上的差异:


 

1.通过本文档初步了解一下greenplum在语法层面与Oracle的差异,这仅仅是第一个版本,后期还会陆续更新

----------------分割线----------------

1.1数据类型

1.1.1字符类型

----------------不变的分割线----------------

一般情况下,对于Oracle的char和nchar类型,直接换成green plum的char是没有问题的;而对于变长的varchar2和nvarchar2,想图省事的话,直接换greenplum的TEXT就可以。


1.1.2数值类型

----------------不变的分割线----------------

Oracle的数值类型向greenplum的数值类型迁移过程中,只要根据Oracle数据的精度,在greenplum中选择相同或者更大精度的类型,数据就能够顺利地迁移过来。但是为了转换过来后数据库的效率(特别是整数类型的时候),需要选择合适的数据类型,才能够完整、正确并且高效地完成Oracle数据类型向greenplum数据类型的迁移。

1.1.3时间类型

----------------不变的分割线----------------

Oracle的日期时间类型向greenplum的数据迁移相对来说简单一些。由于greenplum的数据类型的极值超越Oracle,因此,数据迁移过程中,只要根据Oracle的数据精度,在greenplum中选择正确的数据类型,并留意一下二者写法的不同,应该就能够完整正确地迁移过来。

大对象

Oracle

greenplum

备注

BLOB

BYTEA

字节

CLOB

TEXT

字符

其他类型

Oracle

greenplum

备注

RAW

BYTEA


RAWID

OID


1.2常用函数

1.2.1字符串操作函数

 

注意:以上两个截图系同一个表格


1.2.2 数值函数

Oracle

greenplum

备注

BITAND

&

对数值按位进行与运算

REMAINDER

%

取模

abs

abs

取绝对值

----------------不变的分割线----------------

1.2.3 日期函数

----------------不变的分割线----------------

1.2.4其他函数

decode是Oracle固有的一个函数,用于条件判断。其格式为:

decode(条件,值1,返回值1,值2,返回值2,...,值n,返回值n,缺省值)

当条件等于值1的时候返回返回值1,等于值n的时候返回返回值n,都不等于的时候返回缺省值。

在greenplum中,decode函数是用来解码的,和encode函数相对。对于Oracle的decode函数,可以把它转换成case when的SQL语句,得到一样的效果。另外,Oracle也支持case when的语法,用法和greenplum一样。


----------------不变的分割线---------------- 

1.3存储过程

1.3.1最简单的存储过程


1.3.2带输入输出参数的存储过程


1.3.3 SELECT INTO



1.3.4 带条件判断的存储过程



----------------不变的分割线---------------- 

1.4 动态执行

Oracle和greenplum基本是一样的:

EXECUTE'DELETE FROM mytable WHERE id = key';

执行没有返回值的查询

Oracle和greenplum基本也是一样的:

UPDATE mytableSET val = val + delta WHERE id = key;

INSERT INTOmytable VALUES(key, value);

TRUNCATE TABLEmytable;

DELETE FROMmytable WHERE id = key;

----------------不变的分割线----------------

1.5 LOOP循环

1.5.1简单的LOOP循环

 

 


1.5.2返回结果集的LOOP



----------------不变的分割线----------------

1.6 游标



在greenplum中,我们一般很少使用游标,因为当我们使用FOR LOOP的时候,数据库后台自动就会转化成游标。不过,这里我们还是可以简单介绍一下greenplum中游标的使用。

游标的声明

DECLARE

   curs1 refcursor;

   curs2 CURSOR FOR SELECT * FROM tenk1;

   curs3 CURSOR (key INTEGER) IS SELECT * FROM tenk1 WHERE unique1 = key;

第一个游标curs1是一个通用游标,没有绑定具体的查询;第二个游标curs2绑定了具体的查询;第三个游标curs3也是一个绑定游标,而且是一个带参数的游标。

打开没有绑定查询的游标

普通查询

OPEN curs1 FORSELECT * FROM foo WHERE key = mykey;

动态查询

OPEN curs1 FOREXECUTE 'SELECT * FROM ' || quote_ident($1);

打开已经绑定查询的游标

OPEN curs2;

OPEN curs3(42);

使用游标

FETCH curs1INTO rowvar;

FETCH curs2INTO foo,bar, baz;

关闭游标

CLOSE curs1;              

 ----------------------------------------------

<点亮梦想.拒绝平庸>

600团队(QQ群:851604218)













文章转载自Oracle蓝莲花,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论