![](/img/trans.png)
[英]DB2 sql function with return table (udtf) and cursor won't compile (Error: Clauses are mutually exclusive)
[英]Creating a function in DB2 on IBM,ZOS(failed with THE CLAUSES ARE MUTUALLY EXCLUSIVE)
我想在DB2中创建和部署此功能,但是遇到了麻烦。 请你帮助我好吗?
干杯,
我的功能代码:
CREATE FUNCTION getID(NameIn VARCHAR(255),versionIn varchar(255))
RETURNS varchar(12)
NOT DETERMINISTIC
LANGUAGE SQL
MODIFIES SQL DATA
NO EXTERNAL ACTION
BEGIN
declare IDOut varchar(12);
set IDOut = (select mID
from mIDHolder
where mName = NameIn and version = versionIn);
IF mappingIDOut IS NULL THEN
set IDOut = Hex(GENERATE_UNIQUE());
insert into mIDHolder VALUES (IDOut,NameIn,versionIn);
END IF;
RETURN IDOut;
END
这是mIDHolder表DDL
CREATE TABLE "V"."MIDHOLDER" (
"MID" VARCHAR(12) FOR SBCS DATA NOT NULL,
"MNAME" VARCHAR(255) FOR SBCS DATA WITH DEFAULT NULL,
"VERSION" VARCHAR(255) FOR SBCS DATA WITH DEFAULT NULL
)
您正在使用哪个版本的DB2 for zOS?
查看版本10上的CREATE FUNCTION文档 ,它指出MODIFIES SQL DATA
与ALLOW PARALLEL
不兼容。 当您指定NO EXTERNAL ACTION
时, ALLOW PARALLEL
是默认设置。 我怀疑这是您的问题。
另一方面,在9.1版的CREATE FUNCTION文档中 ,我看不到在任何地方都提到MODIFIES SQL DATA
作为选项。 实际上,如果您看一下它们在READS SQL DATA
下的说法,则强烈建议您根本不允许在函数中使用用于修改表的语句。
以我的经验,函数和过程的定义非常复杂,错误消息是不透明的,并且DB2版本之间存在很大的差异。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.