繁体   English   中英

db2存储过程为某个唯一组合增加列值

[英]Db2 stored procedure to increment a column value for a certain unique combination

db2存储过程为某个唯一组合增加列值。

我想编写一个DB2存储过程,其中SEQ_I是一个列值,仅应为列值( SCHOOL_I, DEPT_ILIST_I )的单个组合递增。

在下面的过程中,我想为学校,部门和列表组合使用max(SEQ_I) + 1

SCHOOL_I, DEPT_I, LIST_ISEQ_I是一个表的列SCHOOL_DEPT

我尝试通过以下方式编写它。 请指导。

CREATE PROCEDURE CREATE_PCT_OFF_SUPPLIER  
        (IN IN_SCHOOL_I INTEGER
        ,IN IN_DEPT_I CHAR(6)
        ,IN IN_LIST_I INTEGER
        ,IN IN_SEQ_I SMALLINT)
P1: BEGIN
        SELECT COUNT(*) AS COMB FROM SCHOOL_DEPT
        WHERE SCHOOL_I= IN_SCHOOL_I AND DEPT_I=IN_DEPT_I AND LIST_I = IN_LIST_I;

        IF COMB = 1 THEN  
        INSERT INTO SCHOOL_DEPT(SCHOOL_I,DEPT_I, LIST_I,SEQ_I) VALUES (IN_SCHOOL_I, IN_DEPT_I, _IN_LIST_I, MAX(IN_SEQ_I)+1); 
        ELSE
        INSERT INTO SCHOOL_DEPT(SCHOOL_I,DEPT_I, LIST_I) VALUES (IN_SCHOOL_I, IN_DEPT_I, _IN_LIST_I); 
END P1

您对要执行的操作的描述与存储过程的描述不匹配。 它将添加列而不增加值。 要增加一个值,则需要使用update语句,例如

update SCHOOL_DEPT
set SEQ_I=SEQ_I+1
where SCHOOL_I= IN_SCHOOL_I AND DEPT_I=IN_DEPT_I AND LIST_I = IN_LIST_I;

您正在执行的操作是添加一条记录,如果找到的一条记录与学校,部门和列表的组合完全匹配,并使用SEQ_IIN_SEQ_I+1添加一条记录。 不知道为什么要计算单个数字的最大值(甚至不确定是否可以通过这种方式使用max函数)。 除此之外,如果未设置SEQ_I设置SEQ_I ,也添加了一条记录。

以下代码为我工作:

DECLARE SEQ SMALLINT DEFAULT 0 ;

SELECT MAX(SEQ_I)+1 INTO SEQ FROM FROM SCHOOL_DEPT
    WHERE SCHOOL_I= IN_SCHOOL_I AND DEPT_I=IN_DEPT_I AND LIST_I = IN_LIST_I;

IF SEQ IS NULL THEN 
    SET SEQ = 1; 
END IF;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM