文章目录
使用mysql数据库存储过程 实例:保存任务工作单方法实现
点击“保存”的时候,创建任务工作单
任务工作单表
CREATE TABLE `tn_work_task` (
`task_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '任务单号',
`task_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '(0新增1修改2解冻3冻结)',
`status` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '编制0审核1通过2退回3终止4上传5',
`applicant_id` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '申请人工号',
`factory_id` varchar(4) NOT NULL COMMENT '申请工厂编号',
`apply_count` int DEFAULT '0' COMMENT '申请条目个数',
`apply_time` datetime DEFAULT NULL COMMENT '申请时间',
`end_time` datetime DEFAULT NULL COMMENT '结束时间',
`current_wf_instance` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '当前流程实例ID',
`create_by` varchar(20) DEFAULT '' COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(20) DEFAULT '' COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
`del_flag` char(1) DEFAULT '0' COMMENT '删除标记 0正常 1删除',
PRIMARY KEY (`task_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='申请工作单表';
调用的创建任务单方法:
MySQL的存储过程(call):
MySQL 存储过程是从 MySQL 5.0 开始增加的新功能。
目的:提高执行效率和SQL 代码封装
如果没有存储过程,在外部程序访问数据库时,要组织很多 SQL 语句。特别是业务逻辑复杂的时候,一大堆的 SQL 和条件夹杂在代码中
有了 MySQL 存储过程,业务逻辑可以封装存储过程中,这样不仅容易维护,而且执行效率也高。
存储过程语句:
# 查询当前数据库有哪些存储过程
show procedure status where db = 'tn_mdm_test';
SHOW procedure STATUS WHERE db = 'tn_mdm_test' and NAME='insert_create_work_task';
# 创建一个简单的存储过程
create procedure hi() select 'hello';
# 存储过程创建完成,看怎么调用他
call hi();
# 删除数据库中存在的存储过程
drop PROCEDURE if exists hi
# 创建存储过程函数
# 查看存储过程函数
实例:
业务逻辑存储过程函数:
CREATE DEFINER=`root`@`%` PROCEDURE `insert_create_work_task`(
IN p_taskType VARCHAR(20),
IN p_status VARCHAR(20),
IN p_applicantId VARCHAR(30),
IN p_factoryId VARCHAR(4),
IN p_applyCount INT,
OUT p_task_id VARCHAR(20))
BEGIN
DECLARE ftaskId VARCHAR(20);
DECLARE fsn VARCHAR(10);
DECLARE fdate VARCHAR(10);
DECLARE fint INT;
SET @fsn = 'WT';
CALL for_sn_kt(@fsn,@fdate,@fint);
SET ftaskId = CONCAT(@fsn,REPLACE(@fdate, "-", ""),LPAD(@fint, 3, 0));
SET @ctime = NOW();
INSERT INTO tn_work_task
(task_id, task_type, status, applicant_id, factory_id, apply_count,create_time)
VALUES(ftaskId, p_taskType, p_status, p_applicantId, p_factoryId, p_applyCount,@ctime);
SET p_task_id = ftaskId;
END