DELIMITER // CREATE OR REPLACE FUNCTION bpmm02_udf_next_signer( p_uuid VARCHAR(100), p_source_pk_value VARCHAR(100), -- 原單單號 p_id_next INT ) /* Function : 取得下一關的人員列表 Description: Build Date : 2022/11/27 Modify History Item Who Date Modify Docs ==== ========== ========== ================================================ 1 Michael 2022/11/27 Init */ RETURNS VARCHAR(1000) BEGIN DECLARE v_imax INT; DECLARE v_imin INT; DECLARE v_inow INT; DECLARE v_signerid VARCHAR(20); DECLARE v_all_signers VARCHAR(1000); DECLARE v_lastsep VARCHAR(1); DECLARE v_rowid INT; -- 臨時表用於存儲簽核人 DROP TEMPORARY TABLE IF EXISTS temp_signers; CREATE TEMPORARY TABLE temp_signers ( signerid VARCHAR(100), rowid INT AUTO_INCREMENT PRIMARY KEY ); -- 以請假單為例(由 tag 轉 uuid) IF LENGTH(p_uuid) < 20 THEN SELECT flow_id INTO p_uuid FROM bpm_list WHERE functiontag = p_uuid; END IF; -- 取得下一關的人 INSERT INTO temp_signers (signerid) SELECT signerid FROM bpm_flow_sign WHERE flow_id = p_uuid AND sourceid = p_source_pk_value AND flow_level = p_id_next; SELECT MAX(rowid), MIN(rowid) INTO v_imax, v_imin FROM temp_signers; SET v_signerid = ''; SET v_all_signers = ''; WHILE v_imin <= v_imax DO SELECT signerid INTO v_signerid FROM temp_signers WHERE rowid = v_imin; IF v_imin = v_imax THEN SET v_lastsep = ''; ELSE SET v_lastsep = ','; END IF; SET v_all_signers = CONCAT(v_all_signers, v_signerid, v_lastsep); SELECT MIN(rowid) INTO v_imin FROM temp_signers WHERE rowid > v_imin; END WHILE; -- 清理臨時表 DROP TEMPORARY TABLE IF EXISTS temp_signers; RETURN v_all_signers; END // DELIMITER ;