first commit
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
DELIMITER //
|
||||
CREATE OR REPLACE PROCEDURE sys_transfer_comm(
|
||||
IN p_para_tablename VARCHAR(100)
|
||||
)
|
||||
/*
|
||||
function : 配合 amis 的 transfer 元件, 將暫存在 owned(or else) 欄位的值, 寫到指定的 table(透過設定)
|
||||
description: 目前先配合 omi_api 的存檔後機制(sys_transaction) 執行, 希望能全部透過設定, 而不是每一個 table 都必須客製
|
||||
copy from sys_transfer_owned2rolemenusecurity
|
||||
build date : 2022/04/08
|
||||
|
||||
modify history
|
||||
item who date modify docs
|
||||
==== ========== ========== ================================================
|
||||
1 michael 2022-4-9 測試
|
||||
2 Michael 2025/07/20 改寫為 MariaDB 並最佳化(ChatGPT+DeepSeek)
|
||||
*/
|
||||
BEGIN
|
||||
/*
|
||||
Function: Transfer data from temporary fields to specified tables
|
||||
Build Date: 2022/04/08
|
||||
*/
|
||||
DECLARE v_RelationKey VARCHAR(100);
|
||||
DECLARE v_MiddleField VARCHAR(100);
|
||||
DECLARE v_dest_table VARCHAR(100);
|
||||
DECLARE v_dest_field VARCHAR(100);
|
||||
DECLARE v_dest_field2 VARCHAR(100);
|
||||
DECLARE v_dest_field2_value VARCHAR(100);
|
||||
DECLARE v_sql LONGTEXT;
|
||||
DECLARE v_para01 VARCHAR(100);
|
||||
DECLARE v_para02 VARCHAR(100);
|
||||
|
||||
-- Read parameters from sys_transaction
|
||||
SELECT
|
||||
RelationKey, MiddleField, para01, para02,
|
||||
dest_table, dest_field, dest_field2, dest_field2_value
|
||||
INTO
|
||||
v_RelationKey, v_MiddleField, v_para01, v_para02,
|
||||
v_dest_table, v_dest_field, v_dest_field2, v_dest_field2_value
|
||||
FROM sys_transaction WHERE tablename = p_para_tablename;
|
||||
|
||||
-- Build dynamic SQL
|
||||
SET v_sql = CONCAT(
|
||||
'DELETE FROM ', v_dest_table, ' WHERE ', v_RelationKey, ' = ''', v_para01, ''';'
|
||||
);
|
||||
|
||||
IF v_dest_field2 IS NOT NULL AND v_dest_field2 != '' THEN
|
||||
SET v_sql = CONCAT(v_sql,
|
||||
' INSERT INTO ', v_dest_table, ' (', v_RelationKey, ',', v_dest_field, ',', v_dest_field2, ') ',
|
||||
'SELECT t.', v_RelationKey, ', s.col, ''', v_dest_field2_value, ''' ',
|
||||
'FROM ', p_para_tablename, ' t ',
|
||||
'JOIN (SELECT col FROM STRING_SPLIT((SELECT ', v_MiddleField, ' FROM ', p_para_tablename,
|
||||
' WHERE ', v_RelationKey, ' = ''', v_para01, '''), '','') WHERE col != '''') s ',
|
||||
'WHERE t.', v_RelationKey, ' = ''', v_para01, ''';'
|
||||
);
|
||||
ELSE
|
||||
SET v_sql = CONCAT(v_sql,
|
||||
' INSERT INTO ', v_dest_table, ' (', v_RelationKey, ',', v_dest_field, ') ',
|
||||
'SELECT t.', v_RelationKey, ', s.col ',
|
||||
'FROM ', p_para_tablename, ' t ',
|
||||
'JOIN (SELECT col FROM STRING_SPLIT((SELECT ', v_MiddleField, ' FROM ', p_para_tablename,
|
||||
' WHERE ', v_RelationKey, ' = ''', v_para01, '''), '','') WHERE col != '''') s ',
|
||||
'WHERE t.', v_RelationKey, ' = ''', v_para01, ''';'
|
||||
);
|
||||
END IF;
|
||||
|
||||
SET @sql = v_sql;
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
END //
|
||||
DELIMITER ;
|
||||
Reference in New Issue
Block a user