[英]Syntax error near $$DELIMITER
我在创建存储过程时遇到错误,它说我有语法错误,但我无法找到它的位置...
MySql错误:
“您的SQL语法有错误;请查看与您的MySQL服务器版本对应的手册,以便在'$$ DELIMITER附近使用正确的语法
CREATE PROCEDURE'entradas_sai'(IN ID_VEICULO VARCHAR(45),OUT'在第1行
以下是与主题相关的代码:
$$DELIMITER CREATE PROCEDURE 'entradas_sai'( IN ID_VEICULO VARCHAR(45), OUT retcode INT) BEGIN DECLARE '_rollback' BOOL DEFAULT 0; DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET '_rollback' = 1; START TRANSACTION; INSERT INTO SAIDAS(data, hora) VALUES(CURDATE("yyyy-MM-dd"),CURTIME("hh:mm:ss)) UPDATE ENTRADAS(SAI) WITH VALUES(@SAI) IF '_rollback' THEN SET retcode = 0; ROLLBACK; ELSE SET retcode = 1; COMMIT; END IF; END$$ DELIMITER ;
这是我的MySqlWB的截图:
编辑:这是日志:
>Executing:
>USE `portaria`;
>DROP unknown IF EXISTS `unknown_SYNTAX_ERROR`;
>
>DELIMITER $$
>USE `portaria`$$
>DELIMITER $$
>
>CREATE PROCEDURE 'entradas_sai'(
>IN ID_VEICULO VARCHAR(45), OUT retcode INT)
>BEGIN
> DECLARE '_rollback' BOOL DEFAULT 0;
> DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET '_rollback' = 1;
> START TRANSACTION;
> INSERT INTO SAIDAS(data, hora) VALUES(date(now()) ,time(now()))
> UPDATE ENTRADAS(SAI) WITH VALUES(@SAI)
> IF '_rollback' THEN
> SET retcode = 0;
> ROLLBACK;
> ELSE
> SET retcode = 1;
> COMMIT;
> END IF;
>END$$
>
>DELIMITER ;$$
>
>DELIMITER ;
>
>ERROR 1064: 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 >'unknown IF EXISTS `unknown_SYNTAX_ERROR`' at line 1
>SQL Statement:
>DROP unknown IF EXISTS `unknown_SYNTAX_ERROR`
在这里,我得到了一个我希望我的程序要做的事情......
我有一个名为“Entradas”的表和一个名为“Saidas”的表。 两者都有“数据”和“hora”列。 考虑到这一点,因为“entradas”的“数据”和“hora列”意味着汽车在该日期和时间加入,并且来自“所述”的列“数据”和“hora”的值意味着是当我点击一个按钮插入当前日期和时间时插入。我正在请求一个sql语法,可以将值“data”和“hora”插入表“saidas”并更新“entradas”的值“sa” “这等于0,我希望按钮按下时更改为1 ...任何消化?
delimiter符号( $$
)来自DELIMITER
关键字。 也使用date(now())
而不是CURDATE("yyyy-MM-dd")
和time(now())
而不是CURTIME("hh:mm:ss"))
试试这个
DELIMITER $$
CREATE PROCEDURE `entradas_sai`(IN ID_VEICULO VARCHAR(45), OUT retcode INT)
BEGIN
DECLARE _rollback boolean DEFAULT 0;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET _rollback = 1;
START TRANSACTION;
INSERT INTO SAIDAS(data, hora) VALUES(date(now()) ,time(now()));
UPDATE ENTRADAS SET SAI = @SAI;
IF _rollback = 1 THEN
SET retcode = 0;
ROLLBACK;
ELSE
SET retcode = 1;
COMMIT;
END IF;
END$$
DELIMITER ;
如果我是对的,你错误输入了$$DELIMITER
,它应该是DELIMITER $$
编辑:将截图添加到问题后,我相信你不应该引用程序名称。 我已经更新了代码块,请再试一次。
DELIMITER $$
CREATE PROCEDURE entradas_sai(
IN ID_VEICULO VARCHAR(45), OUT retcode INT)
BEGIN
DECLARE '_rollback' BOOL DEFAULT 0;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET '_rollback' = 1;
START TRANSACTION;
INSERT INTO SAIDAS(data, hora) VALUES(CURDATE("yyyy-MM-dd"),CURTIME("hh:mm:ss"))
UPDATE ENTRADAS(SAI) WITH VALUES(@SAI)
IF '_rollback' THEN
SET retcode = 0;
ROLLBACK;
ELSE
SET retcode = 1;
COMMIT;
END IF;
END$$
DELIMITER ;
我想到了什么是错的,它不仅仅是关于“DELIMITER”,还有更多......
这是固定代码:
CREATE PROCEDURE entradas_sai (
IN ID_VEICULO VARCHAR(45), OUT retcode INT)
BEGIN
DECLARE _rollback BOOL DEFAULT 0;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET _rollback = 1;
START TRANSACTION;
INSERT INTO SAIDAS(data, hora) VALUES(date(now()) ,time(now()));
UPDATE ENTRADAS SET SAI=1;
IF '_rollback' THEN
SET retcode = 0;
ROLLBACK;
ELSE
SET retcode = 1;
COMMIT;
END IF;
END $$
步骤:删除“Delimiter $$”和“Delimiter;” 然后重新构建UPDATE查询。 这是主要问题,因为语法不在现场......感谢所有试图帮助的人。
在这种情况下,“1”的值不是我想要的值...所以,我将其更改为@sai,这意味着该值是在按钮单击时给出的,这是参数@sai的增量,等于1,2,3,4等等。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.