first commit
This commit is contained in:
@@ -0,0 +1,124 @@
|
||||
DELIMITER //
|
||||
|
||||
CREATE PROCEDURE zen_parse_sp(
|
||||
IN actiontype VARCHAR(10), -- fields/parain
|
||||
IN sp_name VARCHAR(200),
|
||||
IN functiontag VARCHAR(200)
|
||||
)
|
||||
/*
|
||||
function : 想辦法取得 sp 最後回傳的欄位名稱列表
|
||||
description: 有跨 db 的語法, 記得測試完後要移除
|
||||
build date : 2021/12/02
|
||||
|
||||
call sample:
|
||||
CALL zen_parse_sp('gexrpt_opor02');
|
||||
|
||||
modify history
|
||||
item who date modify docs
|
||||
==== ========== ========== ================================================
|
||||
1 michael 2021/12/02 新增
|
||||
*/
|
||||
BEGIN
|
||||
DECLARE sql_text TEXT;
|
||||
DECLARE data_text TEXT;
|
||||
DECLARE pos INT;
|
||||
DECLARE ret2_col VARCHAR(100);
|
||||
DECLARE ret2_fieldobject VARCHAR(100);
|
||||
DECLARE ret2_related_provider VARCHAR(100);
|
||||
DECLARE ret2_default_value VARCHAR(100);
|
||||
DECLARE ret2_celly SMALLINT;
|
||||
DECLARE ret2_seqno INT;
|
||||
DECLARE ret2_rowid INT;
|
||||
|
||||
SELECT text INTO sql_text
|
||||
FROM information_schema.routines
|
||||
WHERE routine_name = sp_name AND routine_type = 'PROCEDURE';
|
||||
|
||||
-- 回傳的欄位
|
||||
IF actiontype = 'fields' THEN
|
||||
SELECT 0 AS code, 'ok' AS msg;
|
||||
|
||||
CREATE TEMPORARY TABLE ret2 AS
|
||||
SELECT
|
||||
functiontag,
|
||||
column_name AS fieldname,
|
||||
column_name AS fieldcn,
|
||||
CASE WHEN LOCATE('date', data_type) > 0 THEN 'static-date' ELSE 'static' END AS fieldobject,
|
||||
ordinal_position AS seqno
|
||||
FROM information_schema.columns
|
||||
WHERE table_schema = DATABASE() AND table_name = sp_name;
|
||||
|
||||
SELECT * FROM ret2;
|
||||
|
||||
-- 傳入的參數
|
||||
ELSEIF actiontype = 'parain' THEN
|
||||
-- 取得 () 內的資料
|
||||
SET pos = LOCATE('/*', sql_text);
|
||||
IF pos > 0 THEN
|
||||
SET sql_text = SUBSTRING(sql_text, 1, pos - 5);
|
||||
END IF;
|
||||
|
||||
SET pos = LOCATE('as', sql_text);
|
||||
IF pos > 0 THEN
|
||||
SET sql_text = SUBSTRING(sql_text, 1, pos - 5);
|
||||
END IF;
|
||||
|
||||
SET pos = LOCATE('(', sql_text);
|
||||
SET data_text = SUBSTRING(sql_text, pos + 1, LENGTH(sql_text));
|
||||
|
||||
CREATE TEMPORARY TABLE ret2 (
|
||||
col VARCHAR(100),
|
||||
fieldobject VARCHAR(100),
|
||||
related_provider VARCHAR(100),
|
||||
default_value VARCHAR(100),
|
||||
celly SMALLINT,
|
||||
rowid INT AUTO_INCREMENT,
|
||||
PRIMARY KEY (rowid)
|
||||
);
|
||||
|
||||
-- 開始分析(, 分隔)
|
||||
INSERT INTO ret2 (col)
|
||||
SELECT col FROM gf_split(data_text, ',');
|
||||
|
||||
UPDATE ret2 SET col = SUBSTRING(col, LOCATE('@', col), LENGTH(col));
|
||||
UPDATE ret2 SET col = SUBSTRING(col, 1, LOCATE(' ', col) - 1);
|
||||
|
||||
-- 想辦法給定一些 default
|
||||
UPDATE ret2 SET fieldobject = 'input-text', default_value = '*';
|
||||
|
||||
UPDATE ret2 SET
|
||||
fieldobject = 'input-date',
|
||||
default_value = 'today'
|
||||
WHERE LOCATE('date', col) > 0;
|
||||
|
||||
UPDATE ret2 SET
|
||||
fieldobject = 'picker',
|
||||
related_provider = 'basm61'
|
||||
WHERE LOCATE('cust', col) > 0;
|
||||
|
||||
UPDATE ret2 SET
|
||||
fieldobject = 'picker',
|
||||
related_provider = 'basm51'
|
||||
WHERE LOCATE('product', col) > 0;
|
||||
|
||||
UPDATE ret2 SET
|
||||
fieldobject = 'picker',
|
||||
related_provider = 'basm67'
|
||||
WHERE LOCATE('person', col) > 0;
|
||||
|
||||
-- 如果第一個 para 是 token
|
||||
SELECT COUNT(*) INTO pos FROM ret2 WHERE rowid = 1 AND LOCATE('token', col) > 0;
|
||||
IF pos > 0 THEN
|
||||
UPDATE ret2 SET default_value = '${ls:token}' WHERE LOCATE('token', col) > 0;
|
||||
END IF;
|
||||
|
||||
SELECT 0 AS code, 'ok' AS msg;
|
||||
|
||||
SELECT functiontag, col AS fcaption, 1 AS celly, rowid - pos AS seqno, fieldobject, related_provider, default_value
|
||||
FROM ret2;
|
||||
|
||||
END IF;
|
||||
|
||||
END //
|
||||
|
||||
DELIMITER ;
|
||||
Reference in New Issue
Block a user