[英]Db2 stored procedure to increment a column value for a certain unique combination
db2存储过程为某个唯一组合增加列值。
我想编写一个DB2存储过程,其中SEQ_I
是一个列值,仅应为列值( SCHOOL_I, DEPT_I
和LIST_I
)的单个组合递增。
在下面的过程中,我想为学校,部门和列表组合使用max(SEQ_I) + 1
SCHOOL_I, DEPT_I, LIST_I
和SEQ_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_I
和IN_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.