Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我能否巧妙地跳过mySQL脚本的全部或部分内容(特别是包含存储过程创建的脚本)?_Mysql_Stored Procedures - Fatal编程技术网

我能否巧妙地跳过mySQL脚本的全部或部分内容(特别是包含存储过程创建的脚本)?

我能否巧妙地跳过mySQL脚本的全部或部分内容(特别是包含存储过程创建的脚本)?,mysql,stored-procedures,Mysql,Stored Procedures,我有一个mySQL脚本,我必须执行它,但出于一些无用的原因(更重要的是,很无聊),我可能希望它跳过大部分脚本 假设在脚本的每个部分之前,我想检查从选项中选择okToRun在运行脚本之前返回true 所以我的脚本看起来像这样 DELIMITER $$ DROP PROCEDURE IF EXISTS procedure1$$ CREATE PROCEDURE procedure1() BEGIN IF (select okToRun from options) THEN ... -

我有一个mySQL脚本,我必须执行它,但出于一些无用的原因(更重要的是,很无聊),我可能希望它跳过大部分脚本

假设在脚本的每个部分之前,我想检查
从选项中选择okToRun
在运行脚本之前返回true

所以我的脚本看起来像这样

DELIMITER $$

DROP PROCEDURE IF EXISTS procedure1$$
CREATE PROCEDURE procedure1()
  BEGIN
  IF (select okToRun from options) THEN 
  ... -- do some stuff
  END IF;
END$$

CALL procedure1()$$

DROP PROCEDURE IF EXISTS procedure2$$
CREATE PROCEDURE procedure2()
  BEGIN
  IF (select okToRun from options) THEN 
  ... -- do some other stuff
  END IF;
END$$

DROP PROCEDURE IF EXISTS procedure3$$
CREATE PROCEDURE procedure3()
  BEGIN
  IF (select okToRun from options) THEN 
  ... -- do even more stuff!
  END IF;
END$$

CALL procedure2()$$
CALL procedure3()$$
我讨厌重复的代码,所以我怎样才能在脚本的开头正确地检查代码,而不必不断地重复自己的代码呢

我想我会很聪明,将整个过程封装在一个存储过程中,然后在那里执行if语句。。。但是您不能在另一个存储过程中创建存储过程。我需要将其他内容保存在它们自己的存储过程中

我也意识到最好在执行脚本之前进行检查,但是,我不能;)


如果答案仅仅是我做不到这一点,那就很公平了。但在像一个大胖子一样重复代码之前,我想确认一下。

MySQL客户端脚本语法不支持条件、循环或其他编程逻辑

我能想到的最好办法是使用预先准备好的语句,但不幸的是,
CREATE PROCEDURE
不支持这种方式

SET @do_create := true;
SET @create_proc1 := IF(@do_create, 'CREATE PROCEDURE ...', 'DO 1');
PREPARE stmt FROM @create_proc1
我得到了这个错误:

ERROR 1295 (HY000): This command is not supported in the prepared statement protocol yet
此处记录了以这种方式支持的命令列表:

在MySQL 5.7中,他们引入了一个新的客户端shell,名为,它应该支持一个更具特色的脚本环境,允许您编写Python代码等等。我还没有试过这个工具


但是,您可以通过使用Python或任何其他您想要的语言编写自己的脚本来完成同样的事情。然后,您可以编写条件逻辑来创建过程或任何东西。这是你最好的选择。

我想你是想让你的
IF
包围掉/重新创建块否?没有嵌入到创建中。啊,我一直在读。你给你的问题加上标签
mysql
,然后你链接到一篇关于MicrosoftSQLServer2008的文章。你实际使用的是这些数据库产品中的哪一种?我的坏@Bill Karwin,我扫描了这篇文章,然后匆忙发布了这篇文章。我认为这是指准备和执行下面提到的语句。已删除linkThank@Bill Karwin,很高兴接受“没有办法”,因为您已经想出了唯一可行的方法(使用准备好的语句),而且它不受支持。顺便说一句,我明白了,我至少可以将对存储过程的调用包装在一个单独的存储过程中,然后在其中使用一个if块。。。但这无助于跳过脚本中的其他语句(存储过程之外)。正如您所说,脚本可能是未来的发展方向。