91 lines
2.8 KiB
Plaintext
91 lines
2.8 KiB
Plaintext
DELIMITER //
|
|
|
|
CREATE OR REPLACE PROCEDURE zen_import_fields(
|
|
IN p_functiontag VARCHAR(100),
|
|
IN p_tablename VARCHAR(100)
|
|
)
|
|
/*
|
|
Function : 回傳指定 table 的 schema 並寫入 zen_fields
|
|
Description:
|
|
Build Date : 2021/08/14
|
|
Modified : 2025/08/09 (轉換為 MariaDB 並加入自動寫入功能)
|
|
|
|
Call Sample:
|
|
CALL zen_import_fields('abc01','clinic');
|
|
|
|
Modify History
|
|
Item Who Date Modify Docs
|
|
==== ========== ========== ================================================
|
|
1 Michael
|
|
2 Assistant 2025/08/09 轉換為 MariaDB 並加入自動寫入功能
|
|
*/
|
|
BEGIN
|
|
DECLARE v_count INT;
|
|
|
|
-- 檢查 zen_fields 表中是否已存在該 functiontag 的記錄
|
|
SELECT COUNT(*) INTO v_count
|
|
FROM zen_fields
|
|
WHERE functiontag = p_functiontag;
|
|
|
|
-- 創建臨時表存儲表結構
|
|
DROP TEMPORARY TABLE IF EXISTS temp_schema;
|
|
CREATE TEMPORARY TABLE temp_schema (
|
|
tablename VARCHAR(60),
|
|
fieldname VARCHAR(60),
|
|
seqno INT,
|
|
fieldobject VARCHAR(20),
|
|
fieldlength INT,
|
|
fielddefault VARCHAR(200),
|
|
fieldchecknull VARCHAR(10),
|
|
fieldcn NVARCHAR(60)
|
|
);
|
|
|
|
-- 從 information_schema 讀取表結構
|
|
INSERT INTO temp_schema
|
|
SELECT
|
|
p_tablename AS tablename,
|
|
COLUMN_NAME AS fieldname,
|
|
ORDINAL_POSITION AS seqno,
|
|
DATA_TYPE AS fieldobject,
|
|
CHARACTER_MAXIMUM_LENGTH AS fieldlength,
|
|
COLUMN_DEFAULT AS fielddefault,
|
|
IF(IS_NULLABLE = 'YES', 'Y', 'N') AS fieldchecknull,
|
|
COLUMN_COMMENT AS fieldcn
|
|
FROM information_schema.COLUMNS
|
|
WHERE TABLE_NAME = p_tablename
|
|
AND TABLE_SCHEMA = DATABASE()
|
|
ORDER BY ORDINAL_POSITION;
|
|
|
|
-- 處理空值
|
|
UPDATE temp_schema SET fieldcn = '' WHERE fieldcn IS NULL;
|
|
|
|
-- 如果 zen_fields 中沒有該 functiontag 的記錄,則插入新記錄
|
|
IF v_count = 0 THEN
|
|
INSERT INTO zen_fields (
|
|
functiontag, seqno, tablename, fieldname, fieldcn, fielden, fieldlength,
|
|
fieldwidth, fieldobject, fielddefault, fieldchecknull, fieldblock,
|
|
fieldds, fieldsh, fieldfm, fieldro, cellno, cellx, celly, cellline, datatype
|
|
)
|
|
SELECT
|
|
p_functiontag, seqno, tablename, fieldname, fieldcn, '' AS fielden, fieldlength,
|
|
120 AS fieldwidth, fieldobject, fielddefault, fieldchecknull, 0 AS fieldblock,
|
|
CASE WHEN seqno <= 6 THEN 'Y' ELSE 'N' END AS fieldds, 'Y' AS fieldsh,
|
|
'' AS fieldfm, 'N' AS fieldro, 0 AS cellno, 1 AS cellx, 1 AS celly, 1 AS cellline, fieldobject
|
|
FROM temp_schema;
|
|
END IF;
|
|
|
|
-- 返回結果
|
|
SELECT 0 AS code, 'ok' AS msg;
|
|
|
|
SELECT
|
|
p_functiontag AS functiontag, seqno, tablename, fieldname, fieldcn, '' AS fielden, fieldlength,
|
|
120 AS fieldwidth, fieldobject, fielddefault, fieldchecknull, 0 AS fieldblock,
|
|
CASE WHEN seqno <= 6 THEN 'Y' ELSE 'N' END AS fieldds, 'Y' AS fieldsh,
|
|
'' AS fieldfm, 'N' AS fieldro, 0 AS cellno, 1 AS cellx, 1 AS celly, 1 AS cellline
|
|
FROM temp_schema;
|
|
|
|
DROP TEMPORARY TABLE IF EXISTS temp_schema;
|
|
|
|
END //
|
|
|
|
DELIMITER ; |