当前位置: 首页 > 知识库问答 >
问题:

在MySQL/MariaDB中创建过程并定义变量原因错误#1064

夏飞掣
2023-03-14

我试图在mysql/mariadb中创建一个SP,里面有一个声明的变量——但我不明白,它有什么问题!?!

DROP PROCEDURE IF EXISTS UpdateReceiverDevice;
DELIMITER $$

CREATE PROCEDURE `UpdateReceiverDevice`(IN `deviceIdentifier` VARCHAR(45), IN `deviceName` VARCHAR(45), IN `deviceLocation` VARCHAR(45), IN `informations` TEXT) NOT DETERMINISTIC MODIFIES SQL DATA SQL SECURITY DEFINER
BEGIN
    DECLARE receiverDeviceId AS INT(11) DEFAULT 0
    SET receiverDeviceId = (SELECT ID FROM ReceiverDevice WHERE DeviceIdentifier = deviceIdentifier);
    IF (receiverDeviceId > 0) BEGIN
        UPDATE ReceiverDevice SET Informations = informations WHERE ID = receiverDeviceId;
    ELSE
        INSERT INTO ReceiverDevice (DeviceName, DeviceLocation, DeviceIdentifier, Informations) VALUES(deviceName, deviceLocation, deviceIdentifier, informations);
    END IF
END $$

DELIMITER ;

MySQL返回以下错误:

  • 服务器类型:MariaDB
  • 服务器-版本: 10.3.11-MariaDB-1:10.3.11 maria~仿生-mariadb.org二进制分布
  • ProTokoll-版本:10
  • 服务器-Zeichensatz:UTF-8 Unicode(utf8)

共有1个答案

谷梁宁
2023-03-14

评论中的提示“每个声明都需要终止”非常有用。

DROP PROCEDURE IF EXISTS UpdateReceiverDevice;
DELIMITER $$

CREATE PROCEDURE `UpdateReceiverDevice`(IN `deviceIdentifier` VARCHAR(45), IN `deviceName` VARCHAR(45), IN `deviceLocation` VARCHAR(45), IN `informations` TEXT) NOT DETERMINISTIC MODIFIES SQL DATA SQL SECURITY DEFINER 
BEGIN
    DECLARE receiverDeviceId INT(11) DEFAULT 0;
    SELECT ID INTO receiverDeviceId FROM ReceiverDevice WHERE DeviceIdentifier = deviceIdentifier;

    IF receiverDeviceId > 0 THEN
        UPDATE ReceiverDevice SET Informations = informations WHERE ID = receiverDeviceId;
    ELSE
        INSERT INTO ReceiverDevice (DeviceName, DeviceLocation, DeviceIdentifier, Informations) VALUES(deviceName, deviceLocation, deviceIdentifier, informations);
    END IF;
END $$

DELIMITER ;
 类似资料:
  • 我试图在MariaDB 10.2中创建一个简单的过程,但遇到了有关变量定义的问题。 我收到(conn:107)您的SQL语法有错误;查看与您的MariaDB服务器版本对应的手册,了解在我声明变量时,在第3行消息的“”附近使用的正确语法。 我读了MariaDB留档,它说一个变量是这样定义的DECLAREvar_name[,var_name]... type[DEFAULT value] 我错在哪里?

  • 我正试图在MySQL中创建一个存储过程,但我一直收到错误消息 #1064年的今天,您的SQL语法出现错误;查看与您的MariaDB服务器版本对应的手册,以了解第1行“DELIMITER”附近使用的正确语法 预期分隔符。(在位置10的“”附近) 我做错了什么?编辑:去掉错误后,现在我的程序只是插入空值,知道为什么吗?

  • 我试图创建一个存储过程,但不断出现错误: #1064年的今天,您的SQL语法出现错误;查看与您的MySQL服务器版本对应的手册,以了解第3行“NOT DETERMINISTIC CONTAINS SQL SECURITY DEFINER COMMENT”“B”附近使用的正确语法 我的SQL如下: 我尝试过包含分隔符,但没有结果。我想问题可能出在引号里。有人能给我指出解决办法吗?谢谢 MySQL 5

  • 我正在为MariaDB中的拆分字符串创建一个过程,但它给出了一个错误 “#1064-您的SQL语法有错误;请查看与您的MariaDB服务器版本相对应的手册,以了解使用近‘TRUNCATE TABLE的正确语法。”

  • MySQL说:文档 1064年的今天,您的SQL语法出现错误;查看与您的MariaDB服务器版本对应的手册,了解第2行“@id INT AS BEGIN SET NO COUNT ON”附近使用的正确语法

  • 我想知道你能在MySQL中创建一个数组变量吗?我知道你可以创建一个普通变量,比如so