DELIMITER // CREATE OR REPLACE FUNCTION `trans_cname` ( p_fieldname VARCHAR(100), p_fieldcn NVARCHAR(100) ) /* Function : 根據 zen_fields,zen_dd_erp,zen_dd 的內容, 回傳可能的中文欄位 Title Description: 通常是配合 sp=zen_fieldspec_best 使用 Build Date : 2021/11/25 Modify History Item Who Date Modify Docs ==== ========== ========== ================================================ 1 Michael 2021/11/25 新增 2 [改寫者] 2023-11-15 改寫為 MariaDB 版本並最佳化 */ RETURNS NVARCHAR(100) DETERMINISTIC BEGIN DECLARE v_ret NVARCHAR(100); DECLARE v_dd_id VARCHAR(100); DECLARE v_dd_name VARCHAR(100); SET v_ret = p_fieldcn; IF p_fieldcn = '' OR p_fieldname = p_fieldcn THEN -- 先找 zen_fields SELECT fieldcn INTO v_ret FROM zen_fields WHERE fieldname = p_fieldname AND fieldname <> fieldcn AND IFNULL(fieldcn, '') <> '' LIMIT 1; -- 新增 zen_dd_erp(原 erp) IF IFNULL(v_ret, '') = '' THEN SELECT fieldcn INTO v_ret FROM zen_dd_erp WHERE fieldname = p_fieldname AND fieldname <> fieldcn AND IFNULL(fieldcn, '') <> '' LIMIT 1; END IF; -- 再找 zen_dd IF IFNULL(v_ret, '') = '' THEN SELECT fieldname, cname INTO v_dd_id, v_dd_name FROM zen_dd WHERE LOCATE(fieldname, p_fieldname) > 0 LIMIT 1; IF IFNULL(v_dd_id, '') <> '' THEN SET v_ret = REPLACE(p_fieldname, v_dd_id, v_dd_name); END IF; END IF; END IF; -- 實在找不到的話, 只能回傳 fieldname /* IF IFNULL(v_ret, '') = '' THEN SET v_ret = p_fieldname; END IF; */ RETURN v_ret; END // DELIMITER ;