所以我试图创建这个程序,检查数据是否存在,如果不这样做,则将值插入两个表中。
但是当我运行代码时,我收到以下错误:
您的SQL语法有错误;查看与您的MySQL服务器版本相对应的手册,以获得在''附近使用的正确语法。在第40行。错误1064. SQLSTATE 42000
这是程序代码。
CREATE PROCEDURE PRI_NEW_CLI(
IN TELEFONE VARCHAR(20),
IN EMAIL VARCHAR(50),
IN CPF VARCHAR(11),
IN SENHA VARCHAR(255),
IN NOME VARCHAR(255),
IN SOBRENOME VARCHAR(255),
OUT NEW_ID INT,
OUT C_ERR VARCHAR(5),
OUT T_ERR VARCHAR(255)
)
BEGIN
newcli:BEGIN
IF EXISTS( SELECT (1) FROM USERS u WHERE u.T_URS_TEL = TELEFONE ) THEN
SET C_ERR = '10001';
SET T_ERR = 'TELEFONE EXISTENTE NA BASE DE DADOS';
LEAVE newcli;
END IF;
IF EXISTS( SELECT 1 FROM USERS u WHERE u.T_USR_EMAIL = EMAIL) THEN
SET C_ERR = '10002';
SET T_ERR = 'EMAIL EXISTENTE NA BASE DE DADOS';
LEAVE newcli;
END IF;
IF EXISTS( SELECT 1 FROM F_USERS f WHERE f.T_DOC_CPF = CPF) THEN
SET C_ERR = "10003";
SET T_ERR = "CPF EXISTENTE NA BASE DE DADOS";
LEAVE newcli;
END IF;
INSERT INTO USERS (T_USR_EMAIL, T_URS_TEL, T_USR_PASS, F_TYPE)
SELECT EMAIL, TELEFONE, MD5(SENHA), 'C';
SET NEW_ID = LAST_INSERT_ID();
INSERT INTO F_USERS (USER_ID, T_FIRSTNAME, T_LASTNAME, T_DOC_CPF)
SELECT NEW_ID, NOME, SOBRENOME, CPF;
END newcli;
END;
` 我制作的代码试图在不同的位置修复相同的错误,但现在我无法告诉如何让它工作。
我将插件测试到了孤立的情况下它工作得很好,但我不知道为什么我保留这些"默认"错误消息,无法告知任何内容。
编辑:
我用IF..ELSE
语句做了。
但我仍然想知道为什么我会收到这些错误,以及如何(如果可能的话)我可以或多或少地按照它的方式来做。
感谢您的帮助,伙计们。
答案 0 :(得分:0)
可悲的是,我无法找出它为什么会出错。
我更改了代码,但它确实有效。
但是我仍然有兴趣让代码按照我编写的方式工作。
这里是新代码。
CREATE PROCEDURE PRI_NEW_CLI(
IN TELEFONE VARCHAR(20),
IN EMAIL VARCHAR(50),
IN CPF VARCHAR(11),
IN SENHA VARCHAR(255),
IN NOME VARCHAR(255),
IN SOBRENOME VARCHAR(255),
OUT NEW_ID INT,
OUT C_ERR VARCHAR(5),
OUT T_ERR VARCHAR(255)
)
BEGIN
IF NOT EXISTS( SELECT (1) FROM USERS u WHERE u.T_URS_TEL = TELEFONE ) THEN
IF NOT EXISTS( SELECT (1) FROM USERS u WHERE u.T_USR_EMAIL = EMAIL) THEN
IF NOT EXISTS( SELECT (1) FROM F_USERS f WHERE f.T_DOC_CPF = CPF) THEN
INSERT INTO USERS (T_USR_EMAIL, T_URS_TEL, T_USR_PASS, F_TYPE)
SELECT EMAIL, TELEFONE, MD5(SENHA), 'C';
SET NEW_ID = LAST_INSERT_ID();
INSERT INTO F_USERS (USER_ID, T_FIRSTNAME, T_LASTNAME, T_DOC_CPF)
SELECT NEW_ID, NOME, SOBRENOME, CPF;
ELSE
SET C_ERR = "10003";
SET T_ERR = "CPF EXISTENTE NA BASE DE DADOS";
END IF;
ELSE
SET C_ERR = '10002';
SET T_ERR = 'EMAIL EXISTENTE NA BASE DE DADOS';
END IF;
ELSE
SET C_ERR = '10001';
SET T_ERR = 'TELEFONE EXISTENTE NA BASE DE DADOS';
END IF;
END;