DELIMITER // CREATE OR REPLACE FUNCTION zen_get_mapping( p_tablename VARCHAR(100), p_fieldname VARCHAR(20) ) /* Function : Rewrite as an API for AMIS to call. Display JSON content with mapping icons Description: As above Build Date : 2022/02/16 Modify History Item Who Date Modify Docs ==== ========== ========== ================================================ 1 Michael 2022/02/16 Init */ RETURNS TEXT 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_keydesc VARCHAR(100); DECLARE v_rets TEXT; DECLARE v_imax INT; DECLARE v_inow INT; -- 创建临时表来存储JSON数据 DROP TEMPORARY TABLE IF EXISTS temp_jsondata; CREATE TEMPORARY TABLE temp_jsondata ( value VARCHAR(100), label VARCHAR(100), keydesc VARCHAR(100), rowid INT AUTO_INCREMENT PRIMARY KEY ); 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, keydesc) SELECT keyid AS value, keyvalue AS label, keydesc FROM zen_keyvalue WHERE tablename = p_tablename AND fieldname = p_fieldname; ELSE INSERT INTO temp_jsondata (value, label, keydesc) SELECT keyid AS value, keyvalue AS label, keydesc 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, keydesc INTO v_value, v_label, v_keydesc FROM temp_jsondata WHERE rowid = v_inow; SET v_rets = CONCAT(v_rets, -- ' "', v_value, '": "', v_label, '"', v_comma); ' "', v_value, '": "', v_label, '"', v_comma); SET v_inow = v_inow + 1; END WHILE; SET v_rets = CONCAT('"map": { ', v_rets, ' },', v_crlf); RETURN v_rets; END // DELIMITER ;