我想在 MySQL 数据库中创建一个存储过程,但是我想先检查它是否存在。我知道如何对表进行这样的操作,但是当我对存储过程使用相同的语法时,它无法编译。有人知道吗?
如果存在该存储过程,只需将其删除然后重新添加:
DROP PROCEDURE IF EXISTS my_procedure;
CREATE PROCEDURE my_procedure()
SELECT EXISTS(SELECT 1 FROM mysql.proc p WHERE db = 'db_name' AND name = 'stored_proc_name');
那么你可以这样做:
IF NOT EXISTS(SELECT 1 FROM mysql.proc p WHERE db = 'db_name' AND name = 'stored_proc_name') THEN
....
END IF;
mysql.proc
已不再存在。 - hexedpacketsSELECT 1 FROM information_schema.ROUTINES where routine_name = 'stored_proc_name';
。 - ginman这个功能并不存在。我们不得不编写一个存储过程来模仿相同的功能。基本上,我们通过调用执行“如果存在”的检查的存储过程来创建存储过程。
在创建语句中,mySQL 8 允许使用 IF NOT EXISTS 来检查是否存在。 https://dev.mysql.com/doc/refman/8.0/en/create-procedure.html
CREATE
[DEFINER = user]
PROCEDURE [IF NOT EXISTS] sp_name ([proc_parameter[,...]])
[characteristic ...] routine_body
CREATE
[DEFINER = user]
FUNCTION [IF NOT EXISTS] sp_name ([func_parameter[,...]])
RETURNS type
[characteristic ...] routine_body
只需调用该过程
CALL my_procedure();
如果您遇到特定的错误
PROCEDURE yourDB.my_procedure 不存在
您现在可以根据 "错误代码:1305" 进行反应,并创建缺失的存储过程:
CREATE PROCEDURE my_procedure() BEGIN ... END