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

我创建了一个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 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中可用,但是…)-您根本不需要循环-您应该能够在常规语句中进行比较。您提供的示例返回一个空字符串,这是有意的吗?