그래서 데이터가 있는지 확인하고 두 테이블에 값을 삽입 할 경우이 절차를 만들려고했습니다.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;
` 내가 다른 위치에 동일한 오류를 해결하기 위해 노력했지만, 지금은 그것을 작동하는 방법을 말할 수 없다 만든 코드입니다.
격리 된 케이스에 인서트를 테스트했지만 정상적으로 작동했지만 아무런 이유없이 "기본"오류 메시지가 표시되는 이유를 알 수 없습니다.
편집 :
내가 IF..ELSE
진술로했다.
그러나 나는 아직도 내가 왜 그 오류를 얻었는지 이해하고 싶다. 그리고 가능하다면 어떻게 쓰는지를 이해할 수있다.
도움을 주셔서 감사합니다.
일반적으로 좋은 생각은 작동 할 때까지 내용을 주석으로 처리하고 휴식 할 때까지 점차적으로 물건을 추가하기 시작하는 것입니다. 이것은 실수를 찾는다 –
나는 그것이 오류를 내고있는'BEGIN..END'라고 믿는다. 왜냐하면 나는 그것을 검증하기위한 하나의 매개 변수 일 때만 관리했기 때문에 ('IF EXISTS'), 나는 물건을 주석하려고 시도하십시오 –
'INSERT's에 댓글을 달았습니다. 동일한 오류가 발생했습니다. –