99 lines
3.1 KiB
Plaintext
99 lines
3.1 KiB
Plaintext
DELIMITER //
|
|
|
|
CREATE OR REPLACE PROCEDURE orm_exec_update_v2(
|
|
IN p_tablename VARCHAR(200), -- 表名
|
|
IN p_pk VARCHAR(100), -- 主键(用于更新/删除)
|
|
IN p_action VARCHAR(20), -- CRUDP操作
|
|
IN p_uuid VARCHAR(100), -- UUID标识
|
|
IN p_userid VARCHAR(100) -- 用户ID
|
|
)
|
|
/*
|
|
功能: orm_api_v2 [更新]的核心程序,智能构建相应SQL
|
|
描述: 用于更新操作的ORM核心逻辑
|
|
创建日期: 2023/12/16
|
|
MariaDB转换版本
|
|
*/
|
|
BEGIN
|
|
DECLARE v_maxcount, v_rec INT;
|
|
DECLARE v_currid INT;
|
|
DECLARE v_cnt INT;
|
|
DECLARE v_un_field VARCHAR(100);
|
|
DECLARE v_ud_field VARCHAR(100);
|
|
|
|
-- 步骤1: 获取最小parent_id (rows)
|
|
SELECT MIN(parent_id) INTO v_maxcount
|
|
FROM orm_json_tmp
|
|
WHERE uuid = p_uuid; -- AND valuetype in ('ARRAY','object');
|
|
|
|
-- 取得欲更新筆數
|
|
SELECT MAX(object_id) INTO v_rec
|
|
FROM orm_json_tmp
|
|
WHERE uuid = p_uuid AND parent_id = v_maxcount;
|
|
|
|
-- 步骤2: 更新/插入update_user和update_date字段
|
|
SET v_un_field = 'update_user';
|
|
SET v_ud_field = 'update_date';
|
|
|
|
-- 检查update_user字段是否存在
|
|
SELECT COUNT(*) INTO v_cnt
|
|
FROM information_schema.columns
|
|
WHERE table_name = p_tablename AND column_name = v_un_field;
|
|
|
|
IF v_cnt > 0 THEN
|
|
SELECT COUNT(*) INTO v_cnt
|
|
FROM orm_json_tmp
|
|
WHERE uuid = p_uuid AND json_key = v_un_field;
|
|
|
|
IF v_cnt = 0 THEN
|
|
INSERT INTO orm_json_tmp (uuid, parent_id, json_key, json_value, ValueType)
|
|
VALUES (p_uuid, v_maxcount, v_un_field, p_userid, 'string');
|
|
ELSE
|
|
UPDATE orm_json_tmp
|
|
SET json_value = p_userid
|
|
WHERE uuid = p_uuid AND json_key = v_un_field;
|
|
END IF;
|
|
END IF;
|
|
|
|
-- 检查update_date字段是否存在
|
|
SELECT COUNT(*) INTO v_cnt
|
|
FROM information_schema.columns
|
|
WHERE table_name = p_tablename AND column_name = v_ud_field;
|
|
|
|
IF v_cnt > 0 THEN
|
|
SELECT COUNT(*) INTO v_cnt
|
|
FROM orm_json_tmp
|
|
WHERE uuid = p_uuid AND json_key = v_ud_field;
|
|
|
|
IF v_cnt = 0 THEN
|
|
INSERT INTO orm_json_tmp (uuid, parent_id, json_key, json_value, ValueType)
|
|
VALUES (p_uuid, v_maxcount, v_ud_field, DATE_FORMAT(NOW(), '%Y-%m-%d'), 'string');
|
|
ELSE
|
|
UPDATE orm_json_tmp
|
|
SET json_value = DATE_FORMAT(NOW(), '%Y-%m-%d')
|
|
WHERE uuid = p_uuid AND json_key = v_ud_field;
|
|
END IF;
|
|
END IF;
|
|
|
|
-- 日期欄位要格式化處理(待驗證)
|
|
UPDATE orm_json_tmp
|
|
SET json_value = DATE_FORMAT(substr(json_value,1,10), '%Y-%m-%d')
|
|
WHERE uuid = p_uuid AND json_key in (select column_name from information_schema.columns WHERE table_name = p_tablename and substr(data_type,1,4) = 'date')
|
|
and json_value is not null;
|
|
|
|
-- 判断是否有多笔资料
|
|
IF v_rec > 1 THEN -- v_maxcount
|
|
SET v_currid = 1;
|
|
WHILE v_currid <= v_rec DO
|
|
-- 执行核心程序
|
|
CALL orm_api_kernel_v2(p_tablename, p_pk, p_action, p_uuid, v_maxcount*1000 + v_currid);
|
|
|
|
-- 取得下一笔资料
|
|
SET v_currid = v_currid + 1;
|
|
END WHILE;
|
|
ELSE
|
|
-- 單筆資料傳入
|
|
CALL orm_api_kernel_v2(p_tablename, p_pk, p_action, p_uuid, 1);
|
|
END IF;
|
|
END //
|
|
|
|
DELIMITER ; |