1

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

1 回答 1

1

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

查看版本 10 上CREATE FUNCTION 的文档,它指出MODIFIES SQL DATAALLOW PARALLEL. 并且ALLOW PARALLEL是您指定时的默认值NO EXTERNAL ACTION。我怀疑这是你的问题。

另一方面,查看9.1 版CREATE FUNCTION 的文档,我认为在任何地方都没有MODIFIES SQL DATA提到作为选项。事实上,如果你看看他们在它下面所说的话READS SQL DATA,强烈建议在函数中根本不允许修改表的语句。

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

于 2013-01-17T08:55:16.493 回答