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

DB2 支持两种类型的存储过程。一种是外部存储过程,另一种是 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。

下面是 SQL 过程独有的特性:

SQL 过程只能使用一种称作 SQL Programming Language (SQL PL)的语言来编写。关于这种语言的更多信息,可以在本系列的前一篇教程中找到(参见 参考资料)。因此,外部存储过程与 SQL 过程主要的区别在于外部过程是使用一种特定的编程语言编写的,而 SQL 过程是只能使用 SQL 语句编写。
SQL 过程存放在真正的数据库中。外部存储过程依赖于文件系统中的一个外部库或可执行文件,而 SQL 过程是数据库的一部分。
构建 SQL 过程不需要编译器,也不需要对特定的编程语言有深入的理解。所以,SQL 过程的开发可能更快。
SQL 过程总是被定义为 NOT FENCED。这种类型的存储过程存在的风险更小,因为这种存储过程只能执行 SQL 操作,所以数据库服务器面临的风险是有限的。
SQL 过程的可移植性更好。由于它们不依赖于特定的编程语言,每个数据库服务器上也就不需要用于这种语言的编译器或解释器,所以必要时更容易在每个服务器上重新创建这些存储过程。

转某作者 收起
参与3

返回wucn163 的回答

“答”则兼济天下,请您为题主分忧!
wucn163 wucn163 技术总监 cqkungzieu
同意
IT分销/经销 · 2010-10-26
浏览362

回答者

wucn163
技术总监 cqkungzieu
评论19

wucn163 最近回答过的问题

回答状态

  • 发布时间:2010-10-26
  • 关注会员:0 人
  • 回答浏览:362
  • X社区推广