Mysql 在一个存储过程My Sql中插入多个查询

Mysql 在一个存储过程My Sql中插入多个查询,mysql,stored-procedures,insert,Mysql,Stored Procedures,Insert,我必须为每个查询创建许多例程(存储过程),如何将以下过程集成到一个过程中,同样的方法我需要放置大约八个这样的过程,任何想法都可能有帮助,提前感谢 程序1 INSERT INTO public_holidays (user_id, department_id,designation_id,date_cur,clock_in,clock_out) SELECT cl.user_id, des.department_id , us.designation_id, cl.date,cl.clock_in

我必须为每个查询创建许多例程(存储过程),如何将以下过程集成到一个过程中,同样的方法我需要放置大约八个这样的过程,任何想法都可能有帮助,提前感谢

程序1

INSERT INTO public_holidays (user_id, department_id,designation_id,date_cur,clock_in,clock_out)
SELECT cl.user_id, des.department_id , us.designation_id, cl.date,cl.clock_in, cl.clock_out
FROM clock cl 
INNER JOIN holidays AS hol ON hol.date = cl.date
INNER JOIN users AS us ON cl.user_id = us.id
INNER JOIN designations AS des ON des.id = us.designation_id
WHERE date(cl.created_at) = cur_dat
AND TIMESTAMPDIFF(second,cl.clock_in, cl.clock_out) = 28800;
程序2

INSERT INTO public_holidays_nine (user_id, department_id,designation_id,date_cur,clock_in,clock_out)
SELECT clo.user_id, design.department_id , uses.designation_id, clo.date,clo.clock_in, clo.clock_out 
FROM clock clo
INNER JOIN holidays AS holl ON holl.date = clo.date
INNER JOIN users AS uses ON clo.user_id = uses.id
INNER JOIN designations AS design ON design.id = uses.designation_id
WHERE date(clo.created_at) = cur_dat
AND TIMESTAMPDIFF(second,clo.clock_in, clo.clock_out) = 32400;
试试这个

CREATE PROCEDURE `sp_test`(IN _date datetime)
BEGIN
    #Routine body goes here...
INSERT INTO public_holidays (user_id, department_id,designation_id,date_cur,clock_in,clock_out)
SELECT cl.user_id, des.department_id , us.designation_id, cl.date,cl.clock_in, cl.clock_out
FROM clock cl 
INNER JOIN holidays AS hol ON hol.date = cl.date
INNER JOIN users AS us ON cl.user_id = us.id
INNER JOIN designations AS des ON des.id = us.designation_id
WHERE date(cl.created_at) = cur_dat
AND TIMESTAMPDIFF(second,cl.clock_in, cl.clock_out) = 28800;


INSERT INTO public_holidays_nine (user_id, department_id,designation_id,date_cur,clock_in,clock_out)
SELECT clo.user_id, design.department_id , uses.designation_id, clo.date,clo.clock_in, clo.clock_out 
FROM clock clo
INNER JOIN holidays AS holl ON holl.date = clo.date
INNER JOIN users AS uses ON clo.user_id = uses.id
INNER JOIN designations AS design ON design.id = uses.designation_id
WHERE date(clo.created_at) = cur_dat
AND TIMESTAMPDIFF(second,clo.clock_in, clo.clock_out) = 32400;

END
您可以将此过程称为

CALL sp_test(param1)

您可以使用类似于
@Mode
的模式作为过程中的参数。并将其传递为1,2,3,。。。从你的代码后面。如果@Mode=1 Begin query1 End对所有模式都相同,则程序内部的条件将是
。@RahulHendawe任何示例,先生,谢谢你。可能一个问题是,你有
公共假日
公共假日九个
等表格,而你应该有更少的,比如1个,而不是10个(至少可能)对于those@Drew我不明白?也许你有这么多sp的原因是因为你有太多的表,你不应该有太多的表。只是可能。它在创建时显示以下错误,以下查询已失败:“创建定义器=
root
@
localhost
过程
pros
(在
cur\u dat
VARCHAR(40))不确定无SQL安全定义插入到公共假日中。并且只有一个参数cur_dat。从何处添加此过程?通过运行脚本还是手动?通过从laravel、DB::语句(DB::raw('CALL public_LOIDES(?))、数组($current_date))运行脚本,您的数据库引擎是什么;我的数据库引擎是InnoDB。在这里,您只能传递一个参数,因为它期望6。请通过在phpmyadmini中运行过程进行检查和验证。我只需要发送一个参数,一个参数与一个过程配合使用。