mysql - $$DELIMITER 附近的语法错误

标签 mysql

我在创建存储过程时遇到错误,它说我有语法错误,但我找不到它在哪里...

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

CREATE PROCEDURE 'entradas_sai'(IN ID_VEICULO VARCHAR(45), OUT' at line 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 ;

Here is a screenshot of my 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`

在这里,我得到了我希望我的程序执行的操作的场景...

I have a table called "Entradas" and one called "Saidas". Both have the column "data" and "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?

最佳答案

分隔符 ($$) 出现在 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 ;

关于mysql - $$DELIMITER 附近的语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35840487/

相关文章:

mysql - 从 XML 文件批量插入 MYSQL

php - 当我们使用 Raw SQL 时,如何在 Laravel 中使用 like 子句?

mysql - 是否有类似 LIKE 但不需要周围百分号的 SQL 运算符?

MYSQL 选择查询最频繁的产品?

mysql - 带有 Elastic Beanstalk 和 Tomcat 的 AWS RDS - "The last packet successfully received from the server was ___ seconds ago"

Mysql - 未选择数据库

mysql - 无法从 delpi Xe5 TSqlConnection 连接到 Mysql 数据库

mysql - 获取有关主键和外键的信息

php - 如何在一个查询中更新来自不同表的两条记录?

mysql - 根据MySQL中的两列查找最小值