したがって、データが存在するかどうかを確認し、両方のテーブルに値を挿入しない場合は、このプロシージャを作成しようとしていました。Procを作成すると、ENDステートメントで1064/42000エラーが返される
しかし、私は、コードを実行したときに、私は次のエラーを取得する:ここで
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;
` 私が作ったコードは異なる位置で同じエラーを修正しようとしていたが、今私はそれが動作するようにする方法を伝えることはできません。
私はインサートを独立したケースにテストしましたが、うまくいきましたが、何も言えない場所でこれらの "デフォルト"エラーメッセージを保持する理由はわかりません。
EDIT:
私はIF..ELSE
文でそれをやりました。
しかし、なぜ私はこれらのエラーが発生していたのか、そして(可能であれば)それが書かれている方法をどのようにしてできるのかを理解したいと思います。
おかげさまで、ありがとうございます。
通常、良いアイデアは、機能するまでコメントアウトしてから、壊れるまで徐々に追加していくことです。これは間違いを見つけた –
私はそれが唯一のパラメータ( 'IF EXISTS')であったときに私が一度それをすることを管理して以来、私はエラーを与えているラベルの' BEGIN..END'だと信じています。内容をコメントしようとする –
「INSERT」とコメントしました。同じエラーが表示されました。 –