我想在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
)
答案 0 :(得分:1)
您使用的是哪个版本的DB2 for zOS?
在版本10上查看the documentation for CREATE FUNCTION,它指出MODIFIES SQL DATA
与ALLOW PARALLEL
不兼容。指定ALLOW PARALLEL
时,NO EXTERNAL ACTION
是默认设置。我怀疑这是你的问题。
另一方面,查看版本9.1上的documentation for CREATE FUNCTION,我看不到MODIFIES SQL DATA
在任何地方作为选项提及。事实上,如果你看一下他们在READS SQL DATA
下所说的内容,它强烈建议修改表格的语句根本不允许在函数中使用。
根据我的经验,函数和过程定义非常挑剔,错误消息不透明,DB2版本之间存在很大差异。