技术开发 频道

DM6 Package大幅提升对Oracle兼容性

  【IT168 文档】DM6(达梦数据库)的一个重要改进就是大幅提升了对Oracle的兼容性,以方便基于Oracle的应用向DM的移植,减轻开发人员的工作量。其中Oracle的包(Package)功能也成为了DM6的一个重要的兼容目标,是DM6所必须具备和兼容的一个重要特性。

  本文将简要介绍DM6所实现的Package特性。首先我们将介绍一下包的基本的概念:PL/SQL为了满足程序模块化的需要,除了块(block)和子程序结构外,还引入了包的构造。包(Package)和TYPE、PROCEDURE、FUNCTION等一样都是PL/SQL的对象。不同的是,包(Package)更像是一个STRUCTURE,将逻辑上相关的PL/SQL类型、对象和子程序组合成一个更大的单位。包有两个部分:包定义(specification)和包体(body)。说明部分是为应用程序的接口,它申明类型、常量、例外、游标和可用的子程序。包体定义游标和子程序,实现说明。应用程序仅对包定义中的申明是可见的。

  在DM6中,我们从整体结构和语法上实现了与Oracle一致的Package,包括包头与包主体的定义、调用方式、以及内部变量声明方式与作用域和生命周期。我们举例对比一下Oracle和达梦数据库的包功能:

create or replace package myPackage_1
      
is
      
procedure sayHello(vname varchar2);
      
end;

  在Oracle和达梦数据库中分别上面这段包定义。在oracle 9i上运行如下:

  而在达梦数据库上运行结果如下:

  再来看包体具体实现:

create or replace package body myPackage_1
is
    
procedure sayHello(vname varchar2)--对包中定义的过程的实现
     is
        
begin
             dbms_output.put_line (
'Hello '||vname);
        
end;
    
end;

 

  在oracle 9i上运行如下:

  而在达梦数据库上运行结果如下:

  然后就是分别在两个数据库调用这个包里的的情况:

call myPackage_1.sayHello('john');

  PL/SQL的包具有信息隐蔽性(information hiding),仅在算法和数据结构设计有关层可见。包类似于存储过程,可将过程说明和过程体组成一个程序单位。也可将过程说明与它的过程体分开,在这种情况下,将过程放置在一个包中,可隐蔽实现的细节。也可在包中定义过程,而该过程在包说明中没有定义过程说明,这样定义的过程仅在包内使用。包可以编译、存贮在数据库中,其内容可为许多应用共享。当用户第一次调用包中的子程序时,整个包都会被装载到内存,所以在以后对包中子程序调用时,不再需要I/O操作,故包可提高效率和改进性能。对于一个复杂的应用系统来说,包功能提供了一个巨大的便利,在系统中可以按照功能模块划分,把同一个模块的TYPE、FUNCTION、PROCEDURE放在一起,这样既方便数据库开发人员的维护更新,也方便了应用系统开发人员的调用。

  需要说明的是,DM6的Package特性目前与Oracle仍有区别,Oracle本身的许多功能是以包的形式提供的,而DM则以其他方式提供,如Function、Procedure或DM SQL,因此在Package的移植过程中,需要对这些部分注意进行处理。

0
相关文章