99 lines
3.5 KiB
Plaintext
99 lines
3.5 KiB
Plaintext
DELIMITER //
|
|
|
|
CREATE OR REPLACE PROCEDURE get_tableschema(
|
|
IN p_data NVARCHAR(100)
|
|
)
|
|
/*
|
|
Function : 查詢檔案結構
|
|
description:
|
|
build date : 2023/08/23
|
|
|
|
Modify history
|
|
item who date modify docs
|
|
==== ========== ========== ================================================
|
|
1 Michael 2023/08/23
|
|
2 Michael 2025/07/20 改寫為 MariaDB 並最佳化(ChatGPT+DeepSeek)
|
|
3 Assistant 2025/08/09 加入自動從information_schema讀取結構功能
|
|
*/
|
|
BEGIN
|
|
DECLARE v_count INT;
|
|
|
|
-- 檢查gex_filestru是否有資料
|
|
SELECT COUNT(*) INTO v_count FROM gex_filestru;
|
|
|
|
-- 如果沒資料, 就從information_schema讀取並寫入
|
|
IF v_count = 0 THEN
|
|
-- 先清空表(以防萬一)
|
|
TRUNCATE TABLE gex_filestru;
|
|
|
|
-- 從information_schema讀取所有表結構並插入到gex_filestru
|
|
INSERT INTO gex_filestru (
|
|
Table_name, table_description, seqno, field_name, field_desc,
|
|
field_type, field_len, field_dec, table_pk, table_index,
|
|
field_isnull, field_default
|
|
)
|
|
SELECT
|
|
t.TABLE_NAME AS Table_name,
|
|
'' AS table_description, -- 初始為空,可手動補充
|
|
c.ORDINAL_POSITION AS seqno,
|
|
c.COLUMN_NAME AS field_name,
|
|
'' AS field_desc, -- 初始為空,可手動補充
|
|
c.DATA_TYPE AS field_type,
|
|
-- c.CHARACTER_MAXIMUM_LENGTH AS field_len,
|
|
case when c.CHARACTER_MAXIMUM_LENGTH > 9999 then 9999 else c.CHARACTER_MAXIMUM_LENGTH end AS field_len,
|
|
c.NUMERIC_SCALE AS field_dec,
|
|
IF(kcu.COLUMN_NAME IS NOT NULL, 'Y', 'N') AS table_pk,
|
|
'N' AS table_index, -- 初始為N,可根據實際索引調整
|
|
IF(c.IS_NULLABLE = 'YES', 'Y', 'N') AS field_isnull,
|
|
c.COLUMN_DEFAULT AS field_default
|
|
FROM
|
|
information_schema.TABLES t
|
|
JOIN information_schema.COLUMNS c ON t.TABLE_NAME = c.TABLE_NAME AND t.TABLE_SCHEMA = c.TABLE_SCHEMA
|
|
LEFT JOIN information_schema.KEY_COLUMN_USAGE kcu ON
|
|
c.TABLE_NAME = kcu.TABLE_NAME AND
|
|
c.COLUMN_NAME = kcu.COLUMN_NAME AND
|
|
c.TABLE_SCHEMA = kcu.TABLE_SCHEMA AND
|
|
kcu.CONSTRAINT_NAME = 'PRIMARY'
|
|
WHERE
|
|
t.TABLE_SCHEMA = DATABASE() AND
|
|
t.TABLE_TYPE = 'BASE TABLE';
|
|
|
|
-- 更新表描述為表注釋(如果有)
|
|
UPDATE gex_filestru f
|
|
JOIN information_schema.TABLES t ON f.Table_name = t.TABLE_NAME
|
|
SET f.table_description = t.TABLE_COMMENT
|
|
WHERE t.TABLE_SCHEMA = DATABASE();
|
|
|
|
-- 更新字段描述為列注釋(如果有)
|
|
UPDATE gex_filestru f
|
|
JOIN information_schema.COLUMNS c ON f.Table_name = c.TABLE_NAME AND f.field_name = c.COLUMN_NAME
|
|
SET f.field_desc = c.COLUMN_COMMENT
|
|
WHERE c.TABLE_SCHEMA = DATABASE();
|
|
END IF;
|
|
|
|
-- 设置默认返回值
|
|
SELECT 0 AS code, 'ok' AS msg;
|
|
|
|
-- 查询表结构
|
|
IF p_data = '*' THEN
|
|
SELECT
|
|
Table_name, table_description, seqno, field_name, field_desc,
|
|
field_type, field_len, field_dec, table_pk, table_index,
|
|
field_isnull, field_default
|
|
FROM gex_filestru
|
|
ORDER BY table_name, seqno;
|
|
ELSE
|
|
SELECT
|
|
Table_name, table_description, seqno, field_name, field_desc,
|
|
field_type, field_len, field_dec, table_pk, table_index,
|
|
field_isnull, field_default
|
|
FROM gex_filestru
|
|
WHERE table_name LIKE CONCAT('%', p_data, '%')
|
|
OR table_description LIKE CONCAT('%', p_data, '%')
|
|
OR field_name LIKE CONCAT('%', p_data, '%')
|
|
OR field_desc LIKE CONCAT('%', p_data, '%')
|
|
ORDER BY table_name, seqno;
|
|
END IF;
|
|
END //
|
|
|
|
DELIMITER ; |