oracle pl/sql到postgres plpgsql的迁移
来源:互联网 发布:php企业建站源码 编辑:程序博客网 时间:2024/06/04 18:15
今天周四,本周完成了之前在oracle中编写的pl/sql代码到postgres的plpgsql的迁移。
开始说点题外话,postgres这个数据库通过一周的了解,大概觉得很糙。总结下原因:1.过去近三年除了oracle几乎没用过别的数据库,看惯了气质雍容的举止得体的名门闺秀,忽然见到个寒门姑娘总觉得不成熟。2.postgres没有一个成熟的IDE工具。我是偏向数据库编程的,用惯了toad和oracle developper这种很成熟的IDE,初接触postgres便拼命想找一个能同她们媲美的工具,但是不管是官方自带的pgadmin还是navicat都让我用的想死,后来好不容易找到一个最近免费的dreamCoder用着还是想死!没办法谁让人家是开源的,没有免费又好吃的午餐。
言归正传,pl/sql 和plpgsql都是标准的sql再加上些控制语句制成的语言,语法大多相同,我只在以下列举在迁移过程中发现的不同点:
1. varchar2 --> varchar(varchar2是oracle自己定义的数据格式,脱胎与varchar这个标准sql定义的数据格式)
2.在postgres中没有procedure了,只有function,并且有一套令人蛋疼的定义方式:($BODY$这是什么玩意?)
create or replace function function_name()
returns void as $BODY$
declare
v_parament int;
begin
end;
$BODY$ language plpgsql;
3.变量的定义必须在declare关键字之下,如以上红字所示
4.游标的方式改变了,不存在游标变量了。以前oracle定义在游标变量中的select语句需要直接写在for的后面如下:
for v_cursor_parament in select .......
loop
end loop;
标红色的那个变量也必须要声明了为:v_cursor_parament record;
5. 同oracle一样有行变量 ROWTYPE, 但是如果用ROWTYPE进行insert操作就必须写成下面这样:
insert into table_name values (rowtype_parament.*)
6. oracle做表连接的操作符(+)木有了,用标准sql的left(right) outer join吧
7. 没有instr函数了,需要的可以自己实现。
8. GOTO 语句没有了,但是可以直接使用CONTINUE语句,这是个福音。
9. minus莫有了,取而代之的是except,用法和效果相同
10. 这个我最不能理解,在一个function中调用另外一个function居然要这么写:
select function_name();
饿的神啊,这是什么啊!
11.oracle中常用的获取第一条记录的rownum没有了,但是我们有了更强功能的limit...offset
12.NVL()没有了,同样功能的是COALESCT()
13.异常捕获:postgres也拥有丰富的异常定义,捕获的方式和oracle基本类似:
begin
exception when condition
then operate
end;
但是,没有一帆风顺的事情,总要出点岔子,postgres不将它认为是warning的exception跑出,其中就有在oracle中大量应用的EXCEPTION: NO_DATA_FOUND
如果想强制让postgres跑出此错,那么需要这么干: select into strict ...
14. oracle中的to_char() 没有了,同名的函数比较奇怪
15. dual没有了,不过在postgres中也不需要dual
以上就是我在迁移过程中遇到的不同点,希望有同学补充,谢谢。
- oracle pl/sql到postgres plpgsql的迁移
- sql server迁移到oracle
- Oracle到postgres数据的部分区别
- ORACLE的PL/SQL
- oracle移植到postgres
- 从Oracle迁移到SQL Server的陷阱
- 从Oracle迁移到SQL Server的陷阱
- 从Oracle到SQL Server数据库主键的迁移
- 从Oracle迁移到SQL Server的陷阱
- 应用程序的数据库从Sql Server迁移到Oracle
- 应用程序的数据库从Sql Server迁移到Oracle
- 应用程序的数据库从Sql Server迁移到Oracle
- PL/SQL不能连接到ORACLE 的小问题
- oracle pl/sql 从if 到 then的“艺术鉴赏”
- PostgreSQL 数据迁移 (从Mysql到Postgres)
- 从Sql Server迁移数据到Oracle
- 表从SQL Server迁移到Oracle
- SQL SERVER数据迁移到ORACLE
- Android在TQ2440开发板上的移植
- shell初级编程(续)
- 色值表
- D3D纹理混合
- doubango tinyDEMO 编译
- oracle pl/sql到postgres plpgsql的迁移
- MAXIMO安装后初始化配置
- 一个用C语言计算平方根的巧妙算法
- (2011.07.07) 编程练习_07.02_处理数组的函数
- 链表各类操作详解
- 关于new的一点笔记
- synchronized,sleep,wait,notify,notifyAll
- 数据库字符集总结
- 那个iphone 下载收费软件 如何支付啊?或者说如何绑定一个银行卡