我正在尝试运行一个我首先输入的查询:
DELIMITER $$
DROP PROCEDURE IF EXISTS development $$
CREATE PROCEDURE development()
BEGIN
DECLARE i INT DEFAULT 1;
WHILE i <= 500 DO
IF NOT EXISTS ((SELECT * FROM customers WHERE customerID = 500)) THEN INSERT INTO customers (firstName) VALUES (''); END IF;
SET i = i + 1;
END WHILE;
END $$
CALL development() $$
DROP PROCEDURE IF EXISTS development $$
DELIMITER ;
然后&#34;压缩&#34;进入这个:
DELIMITER $$ DROP PROCEDURE IF EXISTS development $$ CREATE PROCEDURE development() BEGIN DECLARE i INT DEFAULT 1; WHILE i <= 500 DO IF NOT EXISTS ((SELECT * FROM customers WHERE customerID = 500)) THEN INSERT INTO customers (firstName) VALUES (''); END IF; SET i = i + 1; END WHILE; END $$ CALL development() $$ DROP PROCEDURE IF EXISTS development $$ DELIMITER ;
在一条线上。问题是第一个(多行)代码有效,并且做了它应该做的事情,而另一个(单行)版本没有。它不会失败或抛出错误,它不会像多行版本那样插入行。为什么是这样?更重要的是,如何使单行版本有效?
提前致谢!
答案 0 :(得分:0)
请这样试试:
DELIMITER $$
DROP PROCEDURE IF EXISTS development $$ CREATE PROCEDURE development() BEGIN DECLARE i INT DEFAULT 1; WHILE i <= 500 DO IF NOT EXISTS ((SELECT * FROM customers WHERE customerID = 500)) THEN INSERT INTO customers (firstName) VALUES (''); END IF; SET i = i + 1; END WHILE; END $$ CALL development() $$ DROP PROCEDURE IF EXISTS development $$
DELIMITER ;
最后一次换行可能不是必要的。
但是我相信,在内联整个代码时,你最终设置的分隔符比“$$”更长。
我刚刚在我的随机sql服务器上执行完全内联的示例,并且总是收到一个肯定的结果,即使我没有设置相关的数据库结构。
有换行符有关于缺少表格的投诉(如预期的那样)
此致 斯蒂芬
答案 1 :(得分:0)
您不能在与delimiter
相同的行上运行任何SQL。 delimiter
是一个内置的mysql客户端命令,用于设置语句分隔符,而不是sql解释器。它需要一个参数,读取第一个空格或换行符。其他一切都被忽略了。
delimiter $$ select now() $$
没有输出,因为$$之后的所有内容都被丢弃了。
或者通过错误的语法说明
delimiter "$$" select; nothing order by from nowhere group , oh forget it $$