如何在 DB2 Z/OS 8.1 版本中创建用户定义函数?

Posted

技术标签:

【中文标题】如何在 DB2 Z/OS 8.1 版本中创建用户定义函数?【英文标题】:How to create user defined function in DB2 Z/OS 8.1 version? 【发布时间】:2017-01-11 13:20:28 【问题描述】:

这是我的代码:我尝试从 Data Studio 为 z/os 创建 UDF 函数。我不需要使用外部功能或其他。我需要执行这个 SQL 函数。

 CREATE FUNCTION FUNCTION5()
 RETURNS FLOAT
 language sql
 DETERMINISTIC
 READS SQL DATA 
 NO EXTERNAL ACTION
 BEGIN 
 DECLARE RANVAL FLOAT ;
 SELECT RAND() INTO RANVAL FROM SYSIBM.SYSDUMMY1;   
 RETURN RANVAL ;
 END

但是,在执行上述代码时,我收到了这个错误。你能帮我弄清楚吗。

我想在 DB2 Z/OS 上开发近 20 个标量 UDF。请帮帮我。

 Deploy [MeDB]MeDB.FUNCTION5

Running
MeDB.FUNCTION5 - Deploy started.
Create user-defined function returns SQLCODE: -199, SQLSTATE: 42601.
MeDB.FUNCTION5: 0: DB2 SQL Error: SQLCODE=-199, SQLSTATE=42601,      SQLERRMC=DECLARE;ON AFTER <INTEGER>, DRIVER=4.18.60
DB2 SQL Error: SQLCODE=-199, SQLSTATE=42601, SQLERRMC=DECLARE;ON AFTER <INTEGER>, DRIVER=4.18.60
MeDB.FUNCTION5 - Deploy failed.
MeDB.FUNCTION5 - Roll back completed successfully.

【问题讨论】:

它对我有用。我运行了你的代码,它创建了一个函数 FUNCTION5 @vijayksingh.vj 好的,谢谢您的回复。你能告诉我你在哪个版本中执行上面的代码吗? @vijayksingh.vj 但我很确定,它的 V8.1。你认为相同的代码可以在 V8.1 上运行吗? 【参考方案1】:

我相信您尝试创建的函数在 DB2 7 中不受支持。BEGIN、END 和 DECLARE 关键字的使用表明您正在尝试使用 SQLPL,它在编译后的 DB2 10 之前不受支持标量函数。我没有 7 的任何文档,但我认为您只能创建内联标量函数,该函数仅限于 RETURN 语句中的一个表达式,如 the DB2 10 reference for CREATE FUNCTION (inline scalar) 中所述:

CREATE FUNCTION(内联 SQL 标量)语句在当前服务器上定义一个 SQL 标量函数,并为函数体指定一条 SQL 过程语言 RETURN 语句。该函数每次调用时都会返回一个值。

SQL 例程主体

指定单个 RETURN 语句。

【讨论】:

谢谢@david,我在 Data Client V3.1 中有任何预配置来部署 SQL UDF 和 SQL 存储过程 DB2 Z/OS V8.1 @VivekHarry 抱歉,我没有这方面的经验。

以上是关于如何在 DB2 Z/OS 8.1 版本中创建用户定义函数?的主要内容,如果未能解决你的问题,请参考以下文章

DB2 Z/OS V10 大型机:如何创建作业 [关闭]

Db2 v12 z/OS 密码哈希表

如何查看 db2 版本

如何在 z/OS 中编写 DB2 命令脚本?

如何在 SQL 中创建具有以下条件的 DB2 存储过程?

如何在 DB2 for Z/OS 中返回系统日期或日期时间?