then insert else update)

eagi6jfj  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(317)

我使用mysql来管理数据库。
在一个名为wifi的数据库中,我有两个名为identity和options的表。
标识包含两个字段:用户名和密码。
选项包含3个字段:用户名、wifi\ ssid和wifi\密码。
有一个程序接受这些变量作为参数:
arg01\u用户名
arg02\u密码
arg03\u wifi\u ssid
arg04\u wifi\u密码
我想在phpmyadmin中构建一个过程来执行此操作:
此过程应检查arg01\u用户名和arg02\u密码是否与标识中的数据匹配。如果找不到数据,则不执行任何操作。否则在表选项中搜索arg01\u用户名,并使用arg03\u wifi\u ssid和arg04\u wifi\u密码更新wifi\u ssid和wifi\u密码。如果在选项中找不到arg01\u用户名,则在选项中插入新记录。
以下是用于定义过程的sql查询:

CREATE DEFINER=`WIFI`@`localhost` PROCEDURE `INSERT`(IN `arg01_USERNAME` INT(20) UNSIGNED, IN `arg02_PASSWORD` VARCHAR(32), IN `arg03_WIFI_SSID` VARCHAR(32) CHARSET utf8, IN `arg04_WIFI_PASSWORD` VARCHAR(32) CHARSET utf8)
    NO SQL
IF EXISTS (
    SELECT COUNT(*) 
    FROM `WIFI`.`IDENTITY` 
    WHERE `USERNAME` = arg01_USERNAME AND `PASSWORD` = arg02_PASSWORD)
THEN
    INSERT INTO `WIFI`.`OPTIONS` (
        `USERNAME`,
        `WIFI_SSID`,
        `WIFI_PASSWORD`
    ) VALUES (
        arg01_USERNAME,
        arg03_WIFI_SSID,
        arg04_WIFI_PASSWORD
    )
    ON DUPLICATE KEY UPDATE
        `WIFI_SSID` = arg03_WIFI_SSID,
        `WIFI_PASSWORD` = arg04_WIFI_PASSWORD
END IF;
ENGINE=InnoDB DEFAULT CHARSET=utf8

你能告诉我这个代码有什么问题吗?
当我尝试使用此代码定义过程时,phpmyadmin告诉我在代码的“endif”部分附近有一个语法错误(错误1064)。
对不起,我的英语不好。

t40tm48m

t40tm48m1#

您需要将分隔符重新定义为其他内容,例如: $$ ,这样解析器在看到 ; 最后,将分隔符重新定义回 ; .
尝试:

DELIMITER $$

CREATE DEFINER=`WIFI`@`localhost` PROCEDURE `INSERT`(IN `arg01_USERNAME` INT(20) UNSIGNED, IN `arg02_PASSWORD` VARCHAR(32), IN `arg03_WIFI_SSID` VARCHAR(32) CHARSET utf8, IN `arg04_WIFI_PASSWORD` VARCHAR(32) CHARSET utf8)
    NO SQL
IF EXISTS (
    SELECT COUNT(*) 
    FROM `WIFI`.`IDENTITY` 
    WHERE `USERNAME` = arg01_USERNAME AND `PASSWORD` = arg02_PASSWORD)
THEN
    INSERT INTO `WIFI`.`OPTIONS` (
        `USERNAME`,
        `WIFI_SSID`,
        `WIFI_PASSWORD`
    ) VALUES (
        arg01_USERNAME,
        arg03_WIFI_SSID,
        arg04_WIFI_PASSWORD
    )
    ON DUPLICATE KEY UPDATE
        `WIFI_SSID` = arg03_WIFI_SSID,
        `WIFI_PASSWORD` = arg04_WIFI_PASSWORD;
END IF $$

DELIMITER ;

相关问题