Моя проблема в том, что я пытаюсь создать процедуру, которая получает входные параметры и проверяет, существуют ли данные или нет, чтобы иметь возможность вставлять их в одну таблицу. Я пробовал по-разному, и я не могу найти ошибку, которая появляется в синтаксисе объявления.
Пожалуйста, мне нужна помощь.
Огромное спасибо.
/* Далее я покажу код процедуры */
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 - Что-то не так в синтаксисе рядом с IF EXISTS (выберите id_cliente из tb_cliente, где email = pEMAIL) THEN 'on line 25
IF EXISTS
внутри хранимой процедуры, поскольку вы пытались это сделать.vIDCLI
вы можете установить значение по умолчанию null
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 ;
Хотя я не разработчик БД, вы, вероятно, могли бы сделать это (это просто идея, точный синтаксис может отличаться!):
select count(id_cliente) into cnt_clients from tb_cliente where email = pEMAIL;
IF cnt_clients > 0 /* EXISTS case */
...
ELSE /* NOT EXISTS case */