我对存储过程一无所知。不幸的是,我必须自动运行存储过程。
我有一个名为pass的表,我想在一天结束时自动更新已取消的状态。我在wampserver中使用phpmyadmin。
我已经尝试了一些代码,但我不知道此代码正确以及如何自动设置执行。
这是我的代码,
CREATE PROCEDURE MyTask
AS
BEGIN
SET NOCOUNT ON;
SET ANSI_NULLS ON;
SET QUOTED_IDENTIFIER ON;
GO
-- For executing the stored procedure at 1:00 A.M
declare @delayTime nvarchar(50)
set @delayTime = '01:00'
while 1 = 1
BEGIN
waitfor time @delayTime
BEGIN
ALTER PROCEDURE [dbo].[updateDuration] AS
UPDATE pass SET status = 'Cancelled' WHERE duration_type='Daily' && duration = DATE_SUB(CURRENT_DATE(),INTERVAL 1 DAY);
--Name for the stored proceduce you want to call on regular bases
execute [gatepass].[dbo].[updateDuration];
END
END
END
它说要放在代码下面,但我不知道将它们放在哪里。
-- Sets stored procedure for automatic execution.
sp_procoption @ProcName = 'MyTask',
@OptionName = 'startup',
@OptionValue = 'on'
最佳答案
方法1-批处理
创建一个名为runMyTask.sql或任何您想要的脚本。
该脚本应具有您的SQL以运行存储过程:
-- Sets stored procedure for automatic execution.
CALL sp_procoption('MyTask','startup', 'on');
然后,您需要一个批处理脚本,您可以将其命名为runMyTask.bat。
在.bat文件中,添加运行mysql.exe命令行工具的行,并沿类似以下内容的行重定向runMyTask.sql文件的内容
C:/wamp/bin/mysql/mysql..../bin/mysql -u root --password=your_password database_name < C:/path/to/runMyTask.sql
当您从Windows cmd shell set it up in the scheduler测试了批处理脚本是否正确运行时。
方法2:MySQL-事件计划程序
要使用the event scheduler,首先需要确保已在服务器上将其启用。默认情况下不是。在上述mysql命令行中,以root用户身份登录。
SET GLOBAL event_scheduler = ON;
将其打开后,运行
SHOW PROCESSLIST;
命令,您应该看到类似于此行的行,显示用户event_scheduler拥有一个进程。| 10729276 | event_scheduler | localhost | NULL | Daemon | 4 | Waiting on empty queue | NULL | 0.000 |
此时,您可以添加“事件”。要添加存储过程作为事件运行,每小时一次:
USE your_db;
CREATE EVENT IF NOT EXISTS EventRunMyTask
ON SCHEDULE EVERY 1 HOUR
ENABLE
DO CALL sp_procoption('MyTask','startup', 'on');
如果一切顺利,您应该可以使用
SHOW EVENTS;
查看有关计划作业的信息关于mysql - 如何在Wampserver中编写存储过程以自动运行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55932276/