简体   繁体   English

$$ DELIMITER附近的语法错误

[英]Syntax error near $$DELIMITER

i'm getting an error while creating a stored procedure, where it says that i have a syntax error, but i can't find where it is... 我在创建存储过程时遇到错误,它说我有语法错误,但我无法找到它的位置...

MySql Error: MySql错误:

"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 '$$DELIMITER “您的SQL语法有错误;请查看与您的MySQL服务器版本对应的手册,以便在'$$ DELIMITER附近使用正确的语法

CREATE PROCEDURE 'entradas_sai'(IN ID_VEICULO VARCHAR(45), OUT' at line 1 CREATE PROCEDURE'entradas_sai'(IN ID_VEICULO VARCHAR(45),OUT'在第1行

Here is the code related to the topic: 以下是与主题相关的代码:

$$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 ;

Here is a screenshot of my MySqlWB: 这是我的MySqlWB的截图:

MySql WorkBench

EDIT: Here is the log: 编辑:这是日志:

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

Here i got a scenarion of what i want my procedure to do... 在这里,我得到了一个我希望我的程序要做的事情......

I have a table called "Entradas" and one called "Saidas". 我有一个名为“Entradas”的表和一个名为“Saidas”的表。 Both have the column "data" and "hora". 两者都有“数据”和“hora”列。 With that in mind, since the "data" and "hora column of "entradas" mean that a car joined at that date and time, and the values from the columns "data" and "hora" of "saidas" are mean to be inserted as i click a button, inserting the current date and time. I'm requesting a sql syntax that could insert the values "data" and "hora" into the table "saidas" and update a value of "entradas" called "sai" which is equal to 0 and i want it to change to 1 on button press... Any sugestion? 考虑到这一点,因为“entradas”的“数据”和“hora列”意味着汽车在该日期和时间加入,并且来自“所述”的列“数据”和“hora”的值意味着是当我点击一个按钮插入当前日期和时间时插入。我正在请求一个sql语法,可以将值“data”和“hora”插入表“saidas”并更新“entradas”的值“sa” “这等于0,我希望按钮按下时更改为1 ...任何消化?

delimiter symbol ( $$ ) come after DELIMITER keyword. delimiter符号( $$ )来自DELIMITER关键字。 also use date(now()) instead CURDATE("yyyy-MM-dd") and time(now()) instead CURTIME("hh:mm:ss")) Try This 也使用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 ;

If i'm right, you mistyped $$DELIMITER , it should be DELIMITER $$ 如果我是对的,你错误输入了$$DELIMITER ,它应该是DELIMITER $$

EDIT: after adding the screenshot to the question, i believe you shouldn't quote the procedure name. 编辑:将截图添加到问题后,我相信你不应该引用程序名称。 I have update the code-block, try it again please. 我已经更新了代码块,请再试一次。

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 ;

I figured what was wrong, and it wasn't only about "DELIMITER" but with a couple things more... 我想到了什么是错的,它不仅仅是关于“DELIMITER”,还有更多......

Here is the fixed code: 这是固定代码:

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

Steps: Removed the "Delimiter $$" and "Delimiter ;" 步骤:删除“Delimiter $$”和“Delimiter;” and then restructured the UPDATE query. 然后重新构建UPDATE查询。 That was the main problem, because the syntax wasn't on the spot... Thanks all who tryied to help. 这是主要问题,因为语法不在现场......感谢所有试图帮助的人。

In this case the value of "1" wasn't the value i want... So, i changed it to @sai, which means that the value is given at a button click, which is a increment of the parameter @sai, being equal to 1,2,3,4 and so on. 在这种情况下,“1”的值不是我想要的值...所以,我将其更改为@sai,这意味着该值是在按钮单击时给出的,这是参数@sai的增量,等于1,2,3,4等等。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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