DB2函数创建锁
我创建了一个DB2用户定义函数,该函数创建锁,整个DB2Studio在创建时挂起,并显示-904消息。DB2必须关闭并重新启动DB2函数创建锁,db2,Db2,我创建了一个DB2用户定义函数,该函数创建锁,整个DB2Studio在创建时挂起,并显示-904消息。DB2必须关闭并重新启动 CREATE FUNCTION LOOP_FN (CUSTOM_DIVISION_GROUP VARCHAR(255), COMPANY VARCHAR(255), LOCATION VARCHAR(255),COMD VARCHAR(255),BASIS VARCHAR(1)) RETURNS VARCHAR(30) BEGIN DECLARE
CREATE FUNCTION LOOP_FN (CUSTOM_DIVISION_GROUP VARCHAR(255), COMPANY VARCHAR(255), LOCATION VARCHAR(255),COMD VARCHAR(255),BASIS VARCHAR(1))
RETURNS VARCHAR(30)
BEGIN
DECLARE COUNT_VAR INT;
DECLARE j int;
DECLARE NAMES_VAR varchar(30);
DECLARE myTemp varchar(30);
DECLARE CustomGroup varchar(30);
SET CustomGroup = '';
SET j = 0;
SET COUNT_VAR = LENGTH(CUSTOM_DIVISION_GROUP)-LENGTH(REPLACE(CUSTOM_DIVISION_GROUP,',',''));
IF BASIS = 'N' THEN
WHILE j <= COUNT_VAR DO
SET NAMES_VAR = (SELECT VALUE_1 FROM TABLE(SPLIT_PARAMS(CUSTOM_DIVISION_GROUP,',',COUNT_VAR+2)) WHERE ID_1=j+1);
IF (LOCATE(':', NAMES_VAR)>0) THEN
SET myTemp = SUBSTR(NAMES_VAR,1,LOCATE(':', NAMES_VAR)-1);
ELSE
SET myTemp = NAMES_VAR;
END IF;
IF LOCATE(COMPANY||LOCATION,NAMES_VAR) > 0 THEN
SET CustomGroup = myTemp;
END IF;
SET j = j + 1;
END WHILE;
ELSEIF BASIS = 'Y' THEN
WHILE j <= COUNT_VAR DO
SET NAMES_VAR = (SELECT VALUE_1 FROM TABLE(SPLIT_PARAMS(CUSTOM_DIVISION_GROUP,',',COUNT_VAR+2)) WHERE ID_1=j+1);
IF NAMES_VAR = COMPANY||LOCATION||COMD||'Y' THEN
SET CustomGroup = 'True';
END IF;
IF NAMES_VAR = COMPANY||LOCATION||COMD||'N' THEN
SET CustomGroup = 'False';
END IF;
SET j = j + 1;
END WHILE;
END IF;
RETURN CustomGroup;
END@
创建函数循环(自定义分区组变量字符(255)、公司变量字符(255)、位置变量字符(255)、COMD变量字符(255)、基础变量字符(1))
返回VARCHAR(30)
开始
声明COUNT_VAR INT;
声明j int;
声明名称\u VAR varchar(30);
声明myTemp varchar(30);
声明CustomGroup varchar(30);
设置CustomGroup='';
设置j=0;
设置计数变量=长度(自定义分区组)-长度(替换(自定义分区组“,”,”);
如果基础='N',则
而j 0)那么
设置myTemp=SUBSTR(NAMES_VAR,1,LOCATE(“:”,NAMES_VAR)-1);
其他的
设置myTemp=NAMES\u VAR;
如果结束;
如果LOCATE(COMPANY | | LOCATION,NAMES _VAR)>0,则
设置CustomGroup=myTemp;
如果结束;
设置j=j+1;
结束时;
ELSEIF BASIS='Y'然后
虽然你的程序有几个概念上的错误,但不管是什么原因导致了904。首先,将CustomGroup
设置为循环中的一个值。。。但这将在下一个周期中被覆盖。该过程还做了两件事(无论名称位是什么,与'True'
/'False'
…相比,后者是文本,不少于文本);你应该有两个不同的程序。我非常怀疑自定义分区组
似乎是一个分隔的列表。DB2的哪个版本/平台,以及确切的错误消息是什么。函数被调用如下:MISDB2A.LOOP_FN('PROCESSING:16MAR 4520'、'90'、'202'、''、'N')所使用的DB2版本是DB2 for z/OS V10。。。。是啊,看起来更糟。从表面上看,其中一些参数应该被分解<代码>循环
对于函数来说是一个糟糕的名字(附加FN
将其指定为函数是毫无意义的。(唉,数组参数只在z/OS的版本11中可用,但是…)-您根本不需要循环-您应该能够在常规语句中进行比较。您提供的示例返回一个空字符串,这是有意的吗?