如何在 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 版本中创建用户定义函数?的主要内容,如果未能解决你的问题,请参考以下文章