125 lines
3.4 KiB
Plaintext
125 lines
3.4 KiB
Plaintext
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 ;
|