first commit
This commit is contained in:
@@ -0,0 +1,99 @@
|
||||
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 ;
|
||||
Reference in New Issue
Block a user