DELIMITER // CREATE OR REPLACE FUNCTION zen_get_keyvalue( p_tablename VARCHAR(100), p_fieldname VARCHAR(20) ) RETURNS TEXT DETERMINISTIC /* Function : 改寫成 api 給 amis 呼叫時, 如果一個 Form 上有多個 select 是固定內容 Description: 如上 Build Date : 2022/02/16 Modify History Item Who Date Modify Docs ===M= ========== ========== ================================================ 1 Michael 2022/02/16 Init */ BEGIN DECLARE v_cnt INT; DECLARE v_crlf VARCHAR(2); DECLARE v_comma VARCHAR(1); DECLARE v_value VARCHAR(100); DECLARE v_label VARCHAR(100); DECLARE v_rets TEXT; DECLARE v_imax INT; DECLARE v_inow INT; DECLARE v_rowid INT DEFAULT 1; -- 臨時表儲存 JSON 數據 DROP TEMPORARY TABLE IF EXISTS temp_jsondata; CREATE TEMPORARY TABLE temp_jsondata ( rowid INT AUTO_INCREMENT PRIMARY KEY, value VARCHAR(100), label VARCHAR(100) ); SET v_crlf = CONCAT(CHAR(13), CHAR(10)); -- 檢查是否有設定到 tablename SELECT COUNT(*) INTO v_cnt FROM zen_keyvalue WHERE tablename = p_tablename AND fieldname = p_fieldname; IF v_cnt > 0 THEN INSERT INTO temp_jsondata (value, label) SELECT keyid AS value, keyvalue AS label FROM zen_keyvalue WHERE tablename = p_tablename AND fieldname = p_fieldname; ELSE INSERT INTO temp_jsondata (value, label) SELECT keyid AS value, keyvalue AS label FROM zen_keyvalue WHERE tablename = 'xxxx' AND fieldname = p_fieldname; END IF; -- 回傳 options [] SELECT COUNT(*) INTO v_imax FROM temp_jsondata; SET v_inow = 1; SET v_rets = ''; SET v_comma = ','; WHILE v_inow <= v_imax DO IF v_inow = v_imax THEN SET v_comma = ''; END IF; SELECT value, label INTO v_value, v_label FROM temp_jsondata WHERE rowid = v_inow; SET v_rets = CONCAT(v_rets, ' {', v_crlf, ' "label": "', v_label, '",', v_crlf, ' "value": "', v_value, '"', v_crlf, ' }', v_comma, v_crlf); SET v_inow = v_inow + 1; END WHILE; SET v_rets = CONCAT('"options": [ ', v_rets, ' ],', v_crlf); DROP TEMPORARY TABLE IF EXISTS temp_jsondata; RETURN v_rets; END // DELIMITER ;