ORACLE与PostgreSql的区别

http://blog.itpub.net/post/2316/10994

ORACLE与PostgreSql的区别

本文档主要从数据库开发角度来对比二者的区别,有一些二者相同之处,这里不再专门提出。


一、块操作对象

 

·oracle有存储过程、函数、包、等块操作对象,各功能有所不同。

 

最常用的是存储过程和函数,过程没有返回值,并可以自由定义传入/出参数;函数必须且只能返回一个参数结果。

 

oracle还可以定义临时块,使用以下的格式

 

  DECLARE

 

  [参数说明]

 

  BEGIN

 

   操作内容;

 

  END;

 

  /

 

·postgres里只有函数,没有存储过程,所有的块操作都必须通过函数来完成。即使没有必须有返回值的函数(对应在oracle的存储过程),一般都用

 

  RETURN88;

 

这样的方法来实现。

 

postgres的函数需要用引号’’把正文(从DECLARE到最后一个END之间的内容)引起来。这样的话,正文中原有的引号都需要使用引号()或者反斜线()来转义。也可以用“$BODY$”来引用正文,这样可以不必转义正文中的引号。

 

postgres的函数,在正文之后需要加上

 

LANGUAGE 'plpgsql' VOLATILE;

 

postgres的触发器也需要由函数来实现。

 

 

 

二、触发器

 

·oracle的触发器,使用

 

CREATE [OR REPLACE]TRIGGER 触发器名触发器定义

 

BEGIN

 

  触发器操作内容;

 

END;

 

/

 

·postgres的触发器,需要通过函数来实现,之前需要通过专门的定义。

 

 

 

三、参数

 

·oracle函数(存储过程同,本节不另说明)的参数名,直接写在函数的声明中,如

 

CREATE [OR REPLACE]FUNCTION 函数名 (p_int_id NUMBER) AS……

 

在程序中可以直接引用参数名称进行操作,如:

 

SELECT user_label INTO v_label FROM iptca_objects WHERE int_id= p_int_id;

 

·postgres函数,在函数声明中只写对应的数据类型,而不写明参数的名称,然后在程序体DECLARE后定义变量指向参数。示例:

 

CREATE [OR REPLACE]FUNCTION 函数名(int8) AS ……

 

DECLARE

 

  p_int_id aliasFOR $1;

 

BEGIN

 

END;

 

/

 

当没有输入参数时,postgres函数名后面也要有一个“()

 

 

 

四、例外处理

 

·在oracle里,有丰富的例外事件,可以在程序中截获并进行相应的处理,同时还可以自定义例外事件。

 

·postgres里没有例外处理,一旦程序运行过程中,出现了错误,程序将直接中断退出,并打出错误的信息。之前已经完成的操作不提交。

 

 

 

五、空字符串

 

 例: v_tmp2 :=v_tmp1||’0’;

 

·在oracle中,对字符串变量,不需要专门给它赋空值,这样与其它的字符串连接时不会有问题,如上例子,v_tmp1v_tmp2在定义后都没有赋过值(或为null),经过该语句后,v_tmp1还是空串,v_tmp2的值是’0’

 

·在postgres里,字符串如果要与别的字符串进行连接,则必须先赋值。如上例子,v_tmp1v_tmp2在定义后都没有赋过值(或为null),经过该语句后,v_tmp1v_tmp2都会是空串;而在该语句给v_tmp1赋值:

 

  v_tmp1 :=‘’;

 

再执行例子的语句,v_tmp2的值是’0’

 

 

 

六、substr函数

 

  substr(org_string,begin_position[,sub_length])

 

·ORACLE里,begin_position可以是负数,表示的是从字符串的右边开始取值。

 

·postgres里,对负数处理没有说明,暂时找不到规律。如果需要从字符串的右边开始取值,需要先算出字符串的长度length,再用substr(org_string,length-sub_length[,sub_length])

lykity 发表于:2004.12.21 13:17 ::分类:( 技术讨论 )::阅读:(4906次) :: 评论 (0)
 
 
原文地址:https://www.cnblogs.com/leeeee/p/7276686.html