first commit
This commit is contained in:
@@ -0,0 +1,100 @@
|
||||
DELIMITER //
|
||||
|
||||
CREATE OR REPLACE PROCEDURE orm_exec_aftersave_v2(
|
||||
IN p_tablename VARCHAR(100),
|
||||
IN p_pk VARCHAR(100), -- primary key(for update delete)
|
||||
IN p_action VARCHAR(10),
|
||||
IN p_userid VARCHAR(100)
|
||||
)
|
||||
/*
|
||||
功能: orm_api_v2 [存档后处理]的核心程序,智能构建相应SQL
|
||||
描述: 用于保存后执行额外处理逻辑
|
||||
创建日期: 2023/12/16
|
||||
MariaDB转换版本
|
||||
*/
|
||||
BEGIN
|
||||
DECLARE v_sp_name TEXT;
|
||||
DECLARE v_para01 TEXT;
|
||||
DECLARE v_para02 TEXT;
|
||||
DECLARE v_sql_command TEXT;
|
||||
DECLARE v_dest_table TEXT;
|
||||
DECLARE v_dest_field TEXT;
|
||||
DECLARE v_dest_field2 TEXT;
|
||||
DECLARE v_RelationKey TEXT;
|
||||
DECLARE v_filter_user_fieldname TEXT;
|
||||
DECLARE v_max_id INT;
|
||||
|
||||
-- 取得 sys_transaction 信息
|
||||
SELECT
|
||||
sp_name,
|
||||
para01,
|
||||
para02,
|
||||
dest_table,
|
||||
dest_field,
|
||||
dest_field2,
|
||||
RelationKey,
|
||||
filter_user_fieldname
|
||||
INTO
|
||||
v_sp_name,
|
||||
v_para01,
|
||||
v_para02,
|
||||
v_dest_table,
|
||||
v_dest_field,
|
||||
v_dest_field2,
|
||||
v_RelationKey,
|
||||
v_filter_user_fieldname
|
||||
FROM sys_transaction
|
||||
WHERE tablename = p_tablename AND (actiontype = '*' OR LOCATE(p_action, actiontype) > 0)
|
||||
LIMIT 1;
|
||||
|
||||
IF v_sp_name IS NOT NULL AND v_sp_name != '' THEN
|
||||
-- 检查是否为特殊情况
|
||||
IF (v_sp_name != 'sys_transfer_owned2rolemenusecurity') AND (v_sp_name != 'sys_transfer_owned2userroles') THEN
|
||||
-- 如果 pk 是 identity
|
||||
IF v_para01 = 'identity' THEN
|
||||
-- 处理 identity 的情况
|
||||
IF IFNULL(v_filter_user_fieldname, '') = '' THEN
|
||||
SET @sql = CONCAT('SELECT MAX(', p_pk, ') INTO @max_id FROM ', p_tablename);
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
SET v_sql_command = CONCAT('UPDATE sys_transaction SET para01 = ? WHERE tablename = ''', p_tablename, '''');
|
||||
PREPARE stmt FROM v_sql_command;
|
||||
EXECUTE stmt USING @max_id;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
ELSE
|
||||
SET @sql = CONCAT('SELECT MAX(', p_pk, ') INTO @max_id FROM ', p_tablename,
|
||||
' WHERE ', v_filter_user_fieldname, ' = ''', p_userid, '''');
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
SET v_sql_command = CONCAT('UPDATE sys_transaction SET para01 = ? WHERE tablename = ''', p_tablename, '''');
|
||||
PREPARE stmt FROM v_sql_command;
|
||||
EXECUTE stmt USING @max_id;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
END IF;
|
||||
END IF;
|
||||
|
||||
SET v_sql_command = CONCAT('CALL ', v_sp_name, '( ''', p_tablename, ''' )');
|
||||
ELSE
|
||||
-- 针对特殊情况特别改写 sp 的方案
|
||||
IF IFNULL(v_para01, '') != '' AND IFNULL(v_para02, '') != '' THEN
|
||||
SET v_sql_command = CONCAT('CALL ', v_sp_name, '( ''', v_para01, ''', ''', v_para02, ''' )');
|
||||
ELSEIF IFNULL(v_para01, '') != '' AND IFNULL(v_para02, '') = '' THEN
|
||||
SET v_sql_command = CONCAT('CALL ', v_sp_name, '( ''', v_para01, ''' )');
|
||||
ELSE
|
||||
SET v_sql_command = CONCAT('CALL ', v_sp_name, '()');
|
||||
END IF;
|
||||
END IF;
|
||||
|
||||
-- 执行 SQL
|
||||
SET @dynamic_sql = v_sql_command;
|
||||
PREPARE stmt FROM @dynamic_sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
END IF;
|
||||
END //
|
||||
|
||||
DELIMITER ;
|
||||
Reference in New Issue
Block a user