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

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

 2010-02-18 15:01:14 来源:WEB开发网   
核心提示:可以看到,这种形式的CREATE FUNCTION语句包含几个在前一种形式中没有出现的子句,DB2 9.5 SQL Procedure Developer 认证考试 735 准备,第3部分(4),在许多情况下,这些子句传达的信息不太直观,另外,如果在外部函数中动态地分配了内存,所以我们先详细讨论这些子句,然后再看一个示

可以看到,这种形式的CREATE FUNCTION语句包含几个在前一种形式中没有出现的子句。在许多情况下,这些子句传达的信息不太直观,所以我们先详细讨论这些子句,然后再看一个示例。

<LANGUAGE SQL>指定函数是用SQL 编写的。

<DETERMINISTIC | NOT DETERMINISTIC>表示在用相同的参数值调用函数时,函数是否总是返回相同的标量值、表或行(DETERMINISTIC 代表确定性函数,NOT DETERMINISTIC表示非确定性函数)。如果没有指定这两个子句,那么在用相同的参数值调用函数时函数可能返回不同的结果。

<EXTERNAL ACTION | NO EXTERNAL ACTION>表示函数执行的操作是否会改变不由 DB2 管理的对象的状态(EXTERNAL ACTION表示会改变,NO EXTERNAL ACTION表示不改变)。外部操作包括发送电子邮件或在外部文件中写记录等。如果没有指定这两个子句,那么意味着函数可能执行某种外部操作。

<CONTAINS SQL | READS SQL DATA | MODIFIES SQL DATA>表示在UDF 体中编写的SQL语句的类型。有三个值可用:

CONTAINS SQL:UDF 体包含的可执行SQL语句既不读数据,也不修改数据。

READS SQL DATA:UDF 体包含的可执行SQL语句读数据,但是不修改数据。

MODIFIES SQL DATA:UDF 体包含的可执行SQL语句既可以读数据,也可以修改数据。

<STATIC DISPATCH>表示在函数解析时 DB2 根据函数参数的静态类型(声明的类型)选择函数。

<CALLED ON NULL INPUT>表示无论任何参数是否包含 null值,都调用此函数。

因此,如果希望创建一个名为JULIAN_DATE()的标量 SQL函数,用于将 DB2 日期转换为儒略日期(自公元前 4713 年 1 月 1 日以来的天数),那么可以执行下面的CREATE FUNCTION语句:

清单 3. 标量 SQL函数

CREATE FUNCTION julian_date(in_date DATE)
  RETURNS CHAR(7)
  LANGUAGE SQL
  RETURN RTRIM(CHAR(YEAR(in_date))) ||
   SUBSTR(DIGITS(DAYOFYEAR(in_date)), 8)    

外部标量函数

外部标量函数是用C、C++或Java™ 等高级编程语言编写的返回单一值的函数。创建和实现有源函数或SQL函数的过程非常简单,但创建和使用外部标量函数(或任何外部函数)的过程就复杂多了。要想创建任何外部函数,必须执行以下步骤:

使用支持的高级编程语言编写 UDF 体。

编译 UDF。

链接 UDF 以创建库(或动态链接库)。

调试 UDF 并重复第 2 到第 4 步,直到解决所有问题。

把包含 UDF的库存储在服务器工作站上。另外,必须修改包含 UDF的库文件的系统权限,让所有用户都可以执行它。例如,在UNIX 环境中,使用chmod 命令让一个文件可由所有用户执行;在Windows 环境中,使用attrib 完成此任务。

使用适当形式的CREATE FUNCTION SQL语句向 DB2数据库注册UDF。

完成这些步骤之后,就可以按照使用任何标量函数或表函数的方式使用生成的UDF。

一定要注意一点:因为外部标量函数是用高级编程语言编写的,而不是SQL,所以提供给函数参数的每个值必须由 SQL数据类型转换为适当的高级编程语言数据类型,然后才能使用。(如果函数的参数之一需要用户定义的数据类型,那么应该先把参数值转换为适当的内置数据类型,然后再传递给外部函数)。同样,函数返回的任何值必须由高级编程语言数据类型转换为适当的SQL数据类型,然后才能返回它。另外,如果在外部函数中动态地分配了内存,那么应该在函数返回之前释放内存。

用来注册(已经按以上说明创建的)外部标量函数的CREATE FUNCTION语句形式的基本语法如下:

清单 4. 用来注册外部标量函数的CREATE FUNCTION语句

CREATE FUNCTION [FunctionName] ( <<[ParameterName]> [InputDataType] ,...> )
  RETURNS [OutputDataType]
  <SPECIFIC [SpecificName]>
  EXTERNAL <NAME [ExternalName] | [Identifier]>
  LANGUAGE [C | JAVA | CLR | OLE]
  PARAMETER STYLE [DB2GENERAL | JAVA | SQL]
  <DETERMINISTIC | NOT DETERMINISTIC>
  <FENCED | NOT FENCED>
  <RETURNS NULL ON NULL INPUT | CALLED ON NULL INPUT>
  <NO SQL | CONTAINS SQL | READS SQL DATA>
  <STATIC DISPATCH>
  <EXTERNAL ACTION | NO EXTERNAL ACTION>
  <SCRATCHPAD <[100 | [SPSize]]> | NO SCRATCHPAD>
  <DBINFO | NO DBINFO>

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

Tags:DB SQL Procedure

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