WEB开发网
开发学院数据库DB2 DB2 9.5 SQL Procedure Developer 认证考试 735 准... 阅读

DB2 9.5 SQL Procedure Developer 认证考试 735 准备,第2部分

 2010-02-16 14:59:32 来源:WEB开发网   
核心提示:使用存储过程的优点存储过程有以下优点:简化代码重用、代码标准化和代码维护:当一系列不同的应用程序都需要执行一项相似的任务时,通过编写一个执行这个任务的存储过程,DB2 9.5 SQL Procedure Developer 认证考试 735 准备,第2部分(2),让每个客户机应用程序调用该存储过程以执行任务,这样就可以

使用存储过程的优点

存储过程有以下优点:

简化代码重用、代码标准化和代码维护:

当一系列不同的应用程序都需要执行一项相似的任务时,通过编写一个执行这个任务的存储过程,让每个客户机应用程序调用该存储过程以执行任务,这样就可以很方便地实现这些应用程序。如果需要修改任务,那么只需修改受影响的存储过程。如果不使用存储过程的话,就需要修改每个应用程序。

对其他数据库对象的受控制的访问:

没有权限访问特定的数据库对象或一个数据库上的操作(例如创建一个表),但是又想在那个对象上执行动作或执行一个操作的用户,可以通过调用他有权限运行的一个存储过程来实现他的目的。这意味着权限管理得以简化。

提高应用程序的性能:

对于远程应用程序,需要逐条语句地通过网络传输每条发出的SQL语句。这可能导致大量的网络传输。通过将所有这些语句添加到一个存储过程中,客户机应用程序只需一次网络请求便可调用那个存储过程。这显然大大减少了所需的网络传输量,从而提高了应用程序的总体性能。

更有效的SQL:

由于存储过程存放在数据库服务器上,实际上它们本身就是数据库对象,它们可以比客户机应用程序更有效地执行,因为SQL 请求被更高效地传输。使用嵌入式 SQL 操作的存储过程还拥有已经存储在包中的访问计划,因而可以提高执行每条语句的速度。如果存储过程在创建时使用了 NOT FENCED 子句,那么它与数据库管理器是在同一个进程空间中运行的,因此可以在共享内存中进行通信。

增强的功能:

由于存储过程存放在数据库服务器上,因此很容易比应用程序获得更多可使用的内存和磁盘空间。而应用程序则可以访问安装在数据库服务器上的软件。

互操作性:

不同的程序员可以用不同的编程语言实现不同的代码模块。为了帮助实现具有逻辑互操作性的代码重用,存储过程本身可以用不同的语言编写。用不同语言编写的客户机应用程序可以调用用不同语言编写的存储过程(例如,以 C++ 编写的应用程序可以调用以 Java 编写的存储过程)。而且???以不同语言编写的存储过程可以相互调用(例如,以 C 编写的存储过程可以调用以 Java 编写的存储过程)。客户机的操作系统和存储过程所在的服务器的操作系统也可以不同(例如,一个Windows 客户机应用程序可以调用一个在AIX 上运行的存储过程)。

存储过程的局限性

调用存储时应具有互操作性,以使客户机应用程序可以兼容用于编写存储过程的不同的编程语言。但是,用特定语言编写的外部存储过程只能在某些平台上运行。例如,CLR 存储过程只能在基于Windows的平台上运行。虽然可以在任何地方调用这种存储过程,但是,如果要将服务器迁移到不同的平台(例如 Solaris或AIX),那么就需要重新编写这种存储过程。对于用C、C++或COBOL 编写的存储过程也是如此,在新的服务器上,这些存储过程需要重新编译。而 SQL过程则不存在这种问题。虽然 Java 存储过程也较为灵活,但是新的数据库服务器需要安装一个Java 虚拟机(JVM)才能执行这种存储过程。

惟一用于调用一个存储过程的SQL语句是 CALL语句。CALL语句可以在应用程序、存储过程、用户定义函数或触发器中使用。

存储过程可以嵌套,一个存储过程可以调用另一个存储过程,后者又可以调用其他存储过程。在DB2 v9.5中,一次最多可以嵌套 64个存储过程。

存储过程不能在不同的调用之间保存状态。

存储过程的输出参数不能直接被另一条 SQL语句使用。调用接口需要先将输出参数赋给某个变量,然后才可以在另一条 SQL语句中使用该变量。

存储过程不支持可滚动游标。

外部存储过程与 SQL 存储过程之间的不同点

DB2支持两种类型的存储过程。一种是外部存储过程,另一种是 SQL过程。

外部存储过程在数据库之外的应用程序中用编程语言定义逻辑。这种类型的存储过程的可执行文件或库存在于数据库服务器所安装到的文件系统中。和SQL过程一样,外部存储过程也要注册到数据库,但是在注册过程中,需要指定存储过程可执行文件或库的位置。

DB2支持用各种不同的编程语言编写的外部存储过程,包括 C、C++、COBOL、Java 和.NET(也称 CLR 存储过程)。

以下是外部存储过程独有的特性:

外部存储过程允许访问非数据库接口,例如文件系统或应用程序。即使这些资源不是数据库系统的一部分,外部存储过程仍可以使用它们。例如,一个外部存储过程可以在一个UNIX数据库服务器上执行一个shell 脚本,以执行一项特定的任务。

外部存储过程使用参数风格来确定用于该存储过程的编程语言如何使用输入、输出或输入/输出参数。有些参数风格允许在一个称作 dbinfo的结构中使用对存储过程有用的传递元数据信息,例如数据库和存储过程属性信息。

外部存储过程可以被定义为FENCED或NOT FENCED。这决定了存储过程应该与数据库管理器在同一个地址空间中运行(NOT FENCED),还是应该在它自己的进程中运行(FENCED)。被定义为NOT FENCED的存储过程可以执行得稍微快一点,因为不需要使用共享内存段通信;但是,这种存储过程的风险也更大。未隔离的存储过程如果遇到一个问题,则可能导致整个数据库服务器崩溃,因为它与 DB2 使用相同的地址空间。Java 存储过程必须被定义为FENCED;不过,它们可以被定义为THREADSAFE或NOT THREADSAFE。

上一页  1 2 3 4 5 6 7  下一页

Tags:DB SQL Procedure

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接