创建Proc在END语句

时间:2016-07-18 17:33:52

标签: mysql procedure

所以我试图创建这个程序,检查数据是否存在,如果不这样做,则将值插入两个表中。

但是当我运行代码时,我收到以下错误:

  

您的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语句做了。

但我仍然想知道为什么我会收到这些错误,以及如何(如果可能的话)我可以或多或少地按照它的方式来做。

感谢您的帮助,伙计们。

1 个答案:

答案 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;