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 TEXT
BEGIN
  DECLARE v_imax INT;
  DECLARE v_imin INT;
  DECLARE v_inow INT;
  DECLARE v_signerid VARCHAR(20);
  DECLARE v_all_signers TEXT;
  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 ;