在IBM,ZOS上的DB2中创建一个函数(失败,其中的CLAUSES是非常独特的)

时间:2013-01-16 16:22:15

标签: function db2

我想在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
)

1 个答案:

答案 0 :(得分:1)

您使用的是哪个版本的DB2 for zOS?

在版本10上查看the documentation for CREATE FUNCTION,它指出MODIFIES SQL DATAALLOW PARALLEL不兼容。指定ALLOW PARALLEL时,NO EXTERNAL ACTION是默认设置。我怀疑这是你的问题。

另一方面,查看版本9.1上的documentation for CREATE FUNCTION,我看不到MODIFIES SQL DATA在任何地方作为选项提及。事实上,如果你看一下他们在READS SQL DATA下所说的内容,它强烈建议修改表格的语句根本不允许在函数中使用。

根据我的经验,函数和过程定义非常挑剔,错误消息不透明,DB2版本之间存在很大差异。