first commit
This commit is contained in:
@@ -0,0 +1,99 @@
|
||||
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 ;
|
||||
Reference in New Issue
Block a user