• 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)
     
     
  • 相关阅读:
    ajax的尝试
    小型企业信息化所依据的U型理论(5)
    链接服务器中使用用户自定义函数
    小型企业信息化所依据的U型理论(1)
    JAXWS(二)之使用wsimport创建WebService客户端
    linux开启MySql远程连接功能
    .net 流(Stream) StreamWriter和StreamReader、BinaryReader和BinaryWriter
    JAXWS(一)之使用wsgen从Java创建WebService
    Web Service及其构成
    .net 流(Stream) 文件流、内存流、网络流
  • 原文地址:https://www.cnblogs.com/leeeee/p/7276686.html
Copyright © 2020-2023  润新知