mysql - 创建带有某些输入参数的过程并在 MYSQL 中验证后稍后插入数据库时​​出错

标签 mysql stored-procedures

我的问题是这样的,我正在尝试创建一个过程来接收输入参数并检查数据是否存在,以便能够插入到一个表或另一个表中。 我尝试了不同的方法,但找不到声明语法中出现的错误。

拜托,我需要帮助。

预先致以千谢万谢。

/*接下来我展示一下程序的代码*/

DELIMITER //

CREATE PROCEDURE InsertMensaje(IN pNOMBRE varchar(50), IN pTLFN varchar(9), IN pEMAIL varchar(50), IN pASN varchar(15), IN pMSG varchar(500))

BEGIN

    /*declare valiable*/
    DECLARE vIDCLI int;

/*THESE OPTIONS I HAVE ALSO TESTED*/
/*SET vIDCLI = (select id_cliente from tb_cliente where email = pEMAIL);*/
/*select id_cliente into vIDCLI from tb_cliente where email = pEMAIL;*/

/* DECLARE vAUX varchar(50)*/ 
/* SET vAUX = (select email from tb_cliente where email = pEMAIL);*/
/* select email into vAUX from tb_cliente where email = pEMAIL; */

/* IF (vAUX <=> NULL) THEN  */

    /*check if the pEMAIL parameter exists*/
    IF EXISTS (select id_cliente from tb_cliente where email = pEMAIL) THEN

    /*retrieve the ID and assign it to the variable*/
    select id_cliente into vIDCLI from tb_cliente where email = pEMAIL;

        /*insert in BD menssage table*/
        INSERT INTO `tb_msg`(`asn`, `msg`, `id_cli`) VALUES ('pASN','pMSG','vIDCLI');

    ELSE
        /*insert new cliente*/
        INSERT INTO `tb_cliente`(`nombre`, `tlfn`, `email`) 
                        VALUES ('pNOMBRE','pTLFN','pEMAIL');

        /*recovernew IdCli*/
        SET vIDCLI = (select id_cliente from tb_cliente where email = pEMAIL);

        /*insert in message table*/
        INSERT INTO `tb_msg`(`asn`, `msg`, `id_cli`) VALUES ('pASN','pMSG',vIDCLI);
    END IF;
END; //

DELIMITER //

MySQL 说过:

1064 - Something is wrong in its syntax near 'IF EXISTS (select id_cliente from tb_cliente where email = pEMAIL) THEN' on line 25

最佳答案

虽然我不是数据库开发人员,但您可能可以这样做(这只是一个想法,确切的语法可能有所不同!):

select count(id_cliente) into cnt_clients from tb_cliente where email = pEMAIL;
IF cnt_clients > 0 /* EXISTS case */
...
ELSE /* NOT EXISTS case */

关于mysql - 创建带有某些输入参数的过程并在 MYSQL 中验证后稍后插入数据库时​​出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52479596/

相关文章:

php - 使用一条语句从多个表中删除多个mysql行

mysql - 什么时候用sql,什么时候用存储过程?

php - 无法用php更新mysql数据库

mysql - SQL 将 2 个表连接到 1 个表

NHibernate GetNamedQuery 执行存储过程但返回空列表

sql-server - 在动态 SQL 中使用 OUTPUT 参数调用存储过程

mysql - MySQL bigint转UUID的存储过程

oracle - ORA-06550 : wrong number or types of arguments

php - 防止通过 PHP 重复上传图片

php - 选择 csv 字符串中的 id - 如果行丢失如何处理