MySQL语法错误
执行时:MySQL语法错误,sql,mysql,stored-procedures,Sql,Mysql,Stored Procedures,执行时: BEGIN DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN ROLLBACK; SELECT 1; END; DECLARE EXIT HANDLER FOR SQLWARNING BEGIN ROLLBACK; SELECT 1; END; -- delete all users in the main profile t
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
ROLLBACK;
SELECT 1;
END;
DECLARE EXIT HANDLER FOR SQLWARNING
BEGIN
ROLLBACK;
SELECT 1;
END;
-- delete all users in the main profile table that are in the MaineU18 by email address
DELETE FROM ap_form_1 WHERE element_5 IN (SELECT email FROM MaineU18);
-- delete all users from the MaineU18 table
DELETE from MaineU18;
COMMIT;
END;
我得到:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'e1:
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
ROLLBACK' at line 2
有什么想法吗?谢谢
更新2:
I have tried putting the script into a PROCEDURE:
DELIMITER |
DROP PROCEDURE IF EXISTS temp_clapro|
CREATE PROCEDURE temp_clapro()
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION, SQLWARNING ROLLBACK;
SET AUTOCOMMIT=0;
-- delete all users in the main profile table that are in the MaineU18 by email address
DELETE FROM ap_form_1 WHERE element_5 IN (SELECT email FROM MaineU18);
-- delete all users from the MaineU18 table
DELETE from MaineU18;
COMMIT;
SET AUTOCOMMIT=1;
END
|
DELIMITER ;
CALL temp_clapro();
我仍然有问题:
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (2.40 sec)
Query OK, 0 rows affected (2.40 sec)
Query OK, 0 rows affected (2.40 sec)
Query OK, 0 rows affected (2.40 sec)
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'END;
|
DELIMITER ;
CALL temp_clapro()' at line 1
更新3:
I have tried putting the script into a PROCEDURE:
DELIMITER |
DROP PROCEDURE IF EXISTS temp_clapro|
CREATE PROCEDURE temp_clapro()
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION, SQLWARNING ROLLBACK;
SET AUTOCOMMIT=0;
-- delete all users in the main profile table that are in the MaineU18 by email address
DELETE FROM ap_form_1 WHERE element_5 IN (SELECT email FROM MaineU18);
-- delete all users from the MaineU18 table
DELETE from MaineU18;
COMMIT;
SET AUTOCOMMIT=1;
END
|
DELIMITER ;
CALL temp_clapro();
我的许多问题似乎都是因为我使用“SOURCE”命令从文件运行脚本。如果我在文件中只有DROP和CREATE命令,并在文件外运行DELIMITER和CALL命令,那么一切都不会出错
是否可以从单个脚本文件运行此脚本?您似乎正在使用
BEGIN
作为临时语句块的开头,就像在Oracle中一样
MySQL不支持这个。只能在存储过程、存储函数或触发器的主体中声明
:
DECLARE
仅允许在BEGIN中使用
... 结束
复合语句,并且必须是
开始时,在任何其他
声明
:
开始。。。结束语法用于
编写复合语句,可以
显示在存储程序中
这是你的评论和更新的问题:我不知道为什么它失败了。我自己就试过了,效果很好。我在Macbook上使用MySQL 5.0.75。您正在使用哪个版本的MySQL?您在语句分隔符的过程中使用分号,因此您必须更改客户端中的分隔符。参见比尔:你指的是SQL Server,不是Oracle。Oracle仅在程序和函数体中使用BEGIN/END;SQL Server喜欢它的BEGIN/END语句……感谢你们的帮助,但即使在将脚本放入过程块之后,我仍然有问题。谢谢你迄今为止的帮助。“更新1”在上面。@rexem,谢谢提醒。我以为我见过Oracle脚本使用裸开始/结束块,但也许我只是把它与Microsoft混淆了。谢谢你的建议。我有点接近了,但仍然看到了错误。