gpt4 book ai didi

mysql - 创建 Proc 在 END 语句上返回 1064/42000 错误

转载 作者:行者123 更新时间:2023-11-29 20:45:41 27 4
gpt4 key购买 nike

因此,我尝试创建此过程,检查数据是否存在,如果不存在,则将值插入到两个表中。

但是当我运行代码时出现以下错误:

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;

`我编写的代码试图修复不同位置的相同错误,但现在我不知道如何使其工作。

我在孤立的情况下测试了插入,它工作得很好,但我不知道为什么我要保留那些“默认”错误消息,而什么也不能告诉。

编辑:

我用 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;

关于mysql - 创建 Proc 在 END 语句上返回 1064/42000 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38442779/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com