mysql - 使用某些输入参数创建过程时出错,稍后在数据库中插入,在 MYSQL 中验证后
问题描述
我的问题是,我正在尝试创建一个接收输入参数并检查数据是否存在的过程,以便能够插入到一个或另一个表中。我尝试了不同的方式,但找不到声明语法中出现的错误。
请我需要帮助。
提前一千感谢。
/*接下来我展示程序的代码*/
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 - 第 25 行的 'IF EXISTS (select id_cliente from tb_cliente where email = pEMAIL) THEN' 附近的语法有问题
解决方案
- 您不能
IF EXISTS
在存储过程中使用,因为您试图这样做。 - 在声明变量
vIDCLI
时,您可以将其默认值设置为null
- 现在,获取 Select 结果
Into
变量。 - 然后,检查变量是否
vIDCLI
IS NOT NULL
(在if
条件内)。
尝试以下操作:
/*declare variable - default it to null*/
DECLARE vIDCLI int(11) DEFAULT NULL;
select id_cliente into vIDCLI
from tb_cliente
where email = pEMAIL;
/*check if the pEMAIL parameter exists*/
IF vIDCLI IS NOT NULL THEN
您的存储过程中还有其他错误。修复它们后,您的更正过程如下所示:
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 variable - default it to null*/
DECLARE vIDCLI int(11) DEFAULT NULL;
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 vIDCLI IS NOT NULL THEN
/*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*/
select id_cliente into vIDCLI
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 ;
推荐阅读
- bluez - Bluetoothctl GATT 神秘输出字节
- python - 删除模式python 3末尾的逗号
- android - VUE Js Cordova,navigator.device 未定义
- c# - c# 将多列列表框转换回结构
- angular - 如何保存语句输入Angular?
- c# - .Net Framework 4.8 for asp.net 中是否包含 C# 7.3 编译器?
- python - 当您同时显式和隐式地使用同一个夹具两次时会发生什么?
- python - Django,在将表单数据提交到数据库后,使用电子邮件转发表单数据
- javascript - 将 $and 和 $or 查询添加到 MongoDB 查询的结构 - 必须是非空数组
- sql-server - 增加 MS SQL 恢复操作的响应时间