假设我有一个充满SQL命令的SQL文件commands.sql
。目的是用户可以使用here所述的SOURCE
命令在文件中运行命令。但是假设用户已经选择了数据库。如果用户未选择数据库,则会看到大量“未选择数据库”错误。
有没有办法使用IF
语句来检查是否选择了数据库,如
IF a database is selected THEN
(statements)
ELSE
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'You need to select a database';
END IF;
答案 0 :(得分: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
命令不能通过准备好的语句执行。)
答案 1 :(得分:0)
IF ... THEN ...
只能用于存储过程或函数,而不能用于简单查询。您必须创建一个存储过程并从SQL文件中运行它。
要检查是否选择了数据库,您可以执行以下操作:
SELECT @is_selected:=database();
IF @is_selected IS NULL THEN ...