ORACLE与PostgreSql的区别

本文对比了Oracle与PostgreSQL在数据库开发方面的不同之处,包括块操作对象、触发器、参数处理、例外处理等方面的关键差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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/7276685.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值