我可以在SQL文件中使用IF语句来检查是否选择了数据库吗?

时间:2012-09-03 15:53:52

标签: mysql sql

假设我有一个充满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;

2 个答案:

答案 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 ...