创建 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;