这是我的代码:我试图从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.
您尝试创建的函数在 DB2 7 中不受支持。BEGIN、END 和 DECLARE 关键字的使用表明您正在尝试使用 SQLPL,直到 DB2 10 才支持将 SQLPL 作为编译的标量函数。我没有任何关于 7 的文档,但我认为您只能创建内联标量函数,该函数仅限于 RETURN 语句中的一个表达式,如 DB2 10 CREATE 函数(内联标量)参考中所述:
CREATE FUNCTION(内联 SQL 标量)语句在当前服务器上定义一个 SQL 标量函数,并为函数的主体指定一个 SQL 过程语言 RETURN 语句。每次调用该函数时,该函数都会返回一个值。
SQL-routine-body
指定单个 RETURN 语句。