创建 Proc returns END 语句时出现 1064/42000 错误
Creating Proc returns a 1064/42000 error on END statement
所以我试图创建这个过程,我检查数据是否存在,如果不存在,则将值插入到两个表中。
但是当我 运行 代码时,我得到以下错误:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 40. Error 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;
`
我做的代码试图在不同的位置修复相同的错误,但现在我不知道如何让它工作。
我在孤立的情况下测试了插入,它工作得很好,但我不知道为什么我保留那些 "default" 错误消息,但什么也说不出来。
编辑:
我用 IF..ELSE
语句做到了。
但我仍然想了解为什么会出现这些错误,以及如何(如果可能的话)或多或少地按照它所写的方式来做。
谢谢你们的帮助,伙计们。
遗憾的是,我无法找出它给出该错误的原因。
我更改了代码并且成功了。
但我仍然有兴趣让代码按照我编写的方式工作。
这是新代码。
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;
所以我试图创建这个过程,我检查数据是否存在,如果不存在,则将值插入到两个表中。
但是当我 运行 代码时,我得到以下错误:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 40. Error 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;
` 我做的代码试图在不同的位置修复相同的错误,但现在我不知道如何让它工作。
我在孤立的情况下测试了插入,它工作得很好,但我不知道为什么我保留那些 "default" 错误消息,但什么也说不出来。
编辑:
我用 IF..ELSE
语句做到了。
但我仍然想了解为什么会出现这些错误,以及如何(如果可能的话)或多或少地按照它所写的方式来做。
谢谢你们的帮助,伙计们。
遗憾的是,我无法找出它给出该错误的原因。
我更改了代码并且成功了。
但我仍然有兴趣让代码按照我编写的方式工作。
这是新代码。
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;