仅当mysql中不存在该过程时才创建存储过程

时间:2014-04-16 11:18:22

标签: mysql sql stored-procedures dynamic-sql

在SQL Server中我能够使用动态sql字符串来实现这一点,但是现在我需要为mysql做同样的事情,但是我无处可去,有没有办法实现这个

IF  NOT EXISTS (SELECT 1 FROM mysql.proc p WHERE NAME = 'stored_proc_name')
BEGIN
  DELIMITER $$
    CREATE PROCEDURE justATest()
    BEGIN
 -- some SP logic here
    END$$
END

我将整个sql作为字符串存储在数据库列中,并使用另一个存储过程中的预准备语句Execute执行该语句。

2 个答案:

答案 0 :(得分:0)

IF NOT EXISTS(SELECT 1 from mysql.proc p WHERE db ='db_name'AND name ='stored_proc_name')THEN ....

取自

Older Post

答案 1 :(得分:0)

只有if then的控制语句才允许在MySQL中的存储过程中使用(不幸的是)。通常有这种方法,但它取决于为什么你有条件地创建了sproc。

E.g。如果您在运行构建脚本时尝试避免错误,因为sprocs已经存在,那么您可以在创建之前使用条件drop语句,如下所示:

DROP PROCEDURE IF EXISTS justATest;
CREATE PROCEDURE justATest()
BEGIN
  -- enter code here

END;

这将确保运行任何更改的代码(而不是跳过)。