繁体   English   中英

在IBM,ZOS上的DB2中创建函数(失败的条款相互排斥)

[英]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 DATAALLOW 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM