3

假设我有一个commands.sql包含 SQL 命令的 SQL 文件。目的是用户可以使用此处SOURCE描述的命令运行文件中的命令。但是假设用户已经选择了一个数据库。如果用户没有选择数据库,那么他们会看到大量的“No database selected”错误。

有没有办法使用IF语句来检查是否选择了数据库,如

IF a database is selected THEN
    (statements)
ELSE
    SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'You need to select a database';
END IF;
4

2 回答 2

0

由于脚本在遇到第一个错误时中止(除非使用该force选项调用),因此可以使用准备好的语句实现一定程度的流控制:

SET @sql := IF(
  DATABASE() IS NULL,
  "SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'You need to select a database'",
  "DO SELECT NULL"
);

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

(但是,我认为该SIGNAL命令不能通过准备好的语句执行)。

于 2012-09-03T16:10:58.490 回答
0

IF ... THEN ...只能用于存储过程或函数,不能用于简单查询。您必须创建一个存储过程并从您的 SQL 文件中运行它。

要检查是否选择了数据库,您可以执行以下操作:

SELECT @is_selected:=database();
IF @is_selected IS NULL THEN ...
于 2012-09-03T16:11:53.567 回答