我在创建存储过程时遇到错误,它说我有语法错误,但我找不到它的位置......
MySql错误:
“您的SQL语法有错误;请查看手册 对应于您的MySQL服务器版本,以便使用正确的语法 靠近'$$ DELIMITER
CREATE PROCEDURE'entradas_sai'(IN ID_VEICULO VARCHAR(45),OUT'at at 第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列意味着那辆车在那个时候加入了 时间,以及“sayas”列“data”和“hora”中的值 意思是插入,因为我点击一个按钮,插入当前 日期和时间。我正在请求一个可以插入的SQL语法 值“data”和“hora”进入表“saidas”并更新值 “entradas”称为“sai”,等于0,我希望它改为 按下按钮1 ...任何消化?
答案 0 :(得分:2)
分隔符符号($$
)来自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 ;
答案 1 :(得分:1)
如果我是对的,您错误输入了$$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 ;
答案 2 :(得分:0)
我想到了什么是错的,并且它不仅仅是关于" 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 $$"和"分隔符;"然后重新构建UPDATE查询。这是主要的问题,因为语法不在现场......感谢所有试图帮助的人。
在这种情况下," 1"的值不是我想要的值......所以,我将它改为@sai,这意味着该值是在按钮点击时给出的,这是参数@sai的增量,等于1,2, 3,4等等。