繁体   English   中英

$$ DELIMITER附近的语法错误

[英]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的截图:

MySql WorkBench

编辑:这是日志:

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM