南大通用GBase8s 常用SQL语句(四十八)

使用 SPECIFIC 子句指定特定名称
可以为一个用户定义函数声明一个在数据库中独一无二的特定名称。当您重载函数时,特定名称就很有用。
DOCUMENT 子句
DOCUMENT 子句中带引号的字符串提供对 UDR 的摘要和描述。该字符串存储在 sysprocbody 系统目录表中,适用于 UDR 的用户。拥有对数据库访问特权的任何人均可查询 sysprocbody 系统目录表,以获取对存储在数据库中的一个或全部 UDR 的描述。
例如,以下查询获取对 SPL 函数 所显示的 SPL 函数 update_by_pct 的描述:
SELECT data FROM sysprocbody b, sysprocedures p
WHERE b.procid = p.procid
–join between the two catalog tables
AND p.procname = ‘update_by_pct’
– look for procedure named update_by_pct
AND b.datakey = ‘D’-- want user document;
先前的查询返回以下文本:
USAGE: Update a price by a percentage
Enter an integer percentage from 1 - 100
and a part id number
UDR 或者应用程序可查询系统目录表来取出 DOCUMENT 子句并为用户显示它。
对于 C 和 Java™ 语言函数,无论您指定是否使用 END FUNCTION 关键字,均可以在 CREATE FUNCTION 语句末尾包含 DOCUMENT 子句。
WITH LISTING IN 子句
WITH LISTING IN 子句指定编译时发送警告的文件名。编译 UDR 之后,此文件包含一条或多条警告消息。
如果您不使用 WITH LISTING IN 子句,则编译器不生成警告列表。
在 UNIX™ 平台上,如果您指定文件名而非目录,将在数据库驻留的计算机上的主目录中创建此列表文件。如果您在此计算机上没有主目录,则在根目录 (名为 “/”的目录)创建此文件。
在 Windows™ 系统中,如果您指定文件名而非目录,则在数据库位于本地计算机的情况下,在当前工作目录中创建此列表文件。否则,缺省目录为 %GBASEDBTDIR%\bin。
SPL 函数
SPL 函数是用 SPL 编写的 UDR ,可返回一个或多个值。要编写并注册 SPL 函数,请使用 CREATE FUNCTION 语句。在 CREATE FUNCTION 和 END FUNCTION 关键字之间嵌入适当的 SQL 和 SPL 语句。还可以将 DOCUMENT 和 WITH FILE IN 选项放在该函数后面。
分析 SPL 函数,(尽可能)优化函数f,并以可执行文件的形式存储在系统目录表中。SPL 函数的主体存储在 sysprocbody 系统目录表中。关于该函数的其它信息存储在其它系统目录表中,包括 sysprocedures 、sysprocplan 和 sysprocauth。有关这些系统目录表的更多信息,请参阅 GBase 8s SQL 参考指南。
END FUNCTION 关键字在每个 SPL 函数中是必需的,并且在紧邻语句块之前的子句后面要加上分号(;)。以下代码示例创建了 SPL 函数:
CREATE FUNCTION update_by_pct ( pct INT, pid CHAR(10))
RETURNING INT;
UPDATE inventory SET price = price + price * (pct/100)
WHERE part_id = pid;
return (select price from inventory where part_id = pid);
END FUNCTION
DOCUMENT “USAGE: Update a price by a percentage”,
“Enter an integer percentage from 1 - 100”,
“and a part id number”
WITH LISTING IN ‘/tmp/warn_file’;
有关如何编写 SPL 函数的更多信息,请参阅 GBase 8s SQL 教程指南 中关于 SPL 的章节。
另见 SPL 例程中的事务 一节。
您可以在 SPL 函数中包含有效的 SQL 或 SPL 语言语句。但是,请参阅 其它语法段 中的以下各节,这些节描述了 SPL 例程中 SQL 和 SPL 语句上的限制:SPL 语句的子集在语句块中有效 、 SQL 语句在 SPL 语句块中有效 和 在数据操纵语句中 SPL 例程的限制 。
外部程序
外部函数是用 GBase 8s 支持的外部语言(即,SPL 以外的编程语言)编写的函数。
创建一个 C 用户定义函数
1.编写 C 函数。
2.编译该函数并将编译代码存储在共享库中( C 的共享对象文件)。
3.使用 CREATE FUNCTION 语句在数据库服务器中注册该函数。
创建以 Java™ 语言编写的用户定义函数
1.编写 Java 静态方法,该方法可使用 JDBC 函数与数据库服务通信。
2.编译该 Java 源文件并创建 .jar 文件( Java 的共享对象文件)。
3.使用 EXECUTE PROCEDURE 语句执行 install_jar( ) 程序以在当数据库中安装该 JAR 文件。
4.如果此 UDR 使用用户定义类型,那么请在 SQL 数据类型和 Java 类之间创建一个映射。使用 EXECUTE PROCEDURE 语句 中说明的 setUDTextName( ) 程序。
5.使用 CREATE FUNCTION 语句注册该 UDR 。
数据库服务器只将包含已编译的例程的共享对象文件的路径名存储于数据库,而不是外部例程的内容。当它执行该外部例程时,数据库服务器调用此外部对象代码。
数据库服务器存储有关系统目标表中外部函数的信息,包括 sysprocbody 和 sysprocauth 。有关系统目录的更多信息,请参阅 GBase 8s SQL 参考指南。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值