MySql 条件停止脚本执行

Posted

技术标签:

【中文标题】MySql 条件停止脚本执行【英文标题】:MySql conditional stop script execution 【发布时间】:2016-11-14 10:24:09 【问题描述】:

我需要编写 SQL 脚本,如果在 DB 中找不到某些值,该脚本就会停止。 像这样的东西(伪代码):

BEGIN;
...
set @a = (select ... );
if @a IS NULL THEN STOP_WITH_ERROR_AND_ROLLBACK();
...
COMMIT;

有人可以帮帮我吗?

更新:由于某些原因,我不能使用存储过程或函数。

更新 2: 注意:我不需要显式回滚。脚本执行的中断就足够了。它会自动回滚未提交事务的更改。

【问题讨论】:

mysql 允许您在存储的程序中声明错误处理程序(例如DECLARE EXIT HANDLER FOR NOT FOUND...;参见here,它可以在退出之前执行您可能需要的特定代码。您是说您不能使用存储的过程/功能。你能解释一下原因吗? 我编写脚本,我们的数据库管理员将使用它来编辑我们的数据库。通常,脚本从远程计算机运行,但出于安全原因,从我们的 MySql 服务器禁用的远程连接更改和/或创建存储过程。注意:我不需要显式回滚。脚本执行的中断就足够了。它会自动回滚未提交事务的更改。 Kumar 发布的解决方案有效吗? 没有。它不起作用。 【参考方案1】:
    start transaction;

    set @a=(select ...);
     -- whatever you want to execute your code like insert, update

    set @b=(select if(@a is null,'ROLLBACK','COMMIT'));
    -- @b is store **ROLLBACK** if @a is null nither store **COMMIT**

    prepare statement1 from @b;
    -- now statement1 store as @a value
    execute statement1;

希望它能解决你的问题。

【讨论】:

【参考方案2】:

这应该会让你继续前进。研究一下如何使用事务是mySQL。

START TRANSACTION
...
set @a = (select ... );
IF @a IS NULL 
THEN
 SELECT 'Error Message' as ErrorMsg
 ROLLBACK;
END IF;
...
COMMIT;

【讨论】:

如果我没记错的话,“IF”语句只能用于存储过程。我收到错误消息:“您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册,以获取正确的语法,以便在 'IF @CplxSecDirHdrId IS NULL THEN SELECT 'Error Message' as ErrorMsg ROLLBACK' 行附近使用2" 检查语法。可能错过了什么。 这个简单的脚本出错了:use test;开始交易;设置@a =(选择1); IF @a IS NULL THEN SELECT 'Error Message' as ErrorMsg ROLLBACK;万一;提交;

以上是关于MySql 条件停止脚本执行的主要内容,如果未能解决你的问题,请参考以下文章

mysql根据条件执行sql

编写mysql多实例启动脚本

pgsql无法执行sql语句

Shell语法—— while 条件语句

在shell脚本中使用 isql 执行SQL语句 查询sybase数据库中满足条件的记录条数,怎么把查询结果赋给变量?

cmd怎么执行sql脚本