2014-04-01 4 views
0

MySQL에서 DROP CREATE 저장 프로 시저를 수행하려고합니다.MySQL 너무 많은 의견이 있습니까?

첫 번째 코드 블록은 정상적으로 실행됩니다.

DELIMITER // 
-- IMPORTANT: Change to ecom_prod 
USE ecom_dev; 


DROP PROCEDURE IF EXISTS `usp_getDetails`; 

번째 블록 --DROP 근처 문 # 2에서 에러 절차 DROP PROCEDURE IF가 usp_getDetails 존재 CREATE 제공; 1 호선에서

DELIMITER // 
-- IMPORTANT: Change to ecom_prod 
USE ecom_dev; 

-- DROP CREATE Procedure 
DROP PROCEDURE IF EXISTS `usp_getDetails`; 

유일한 차이점은 추가 의견입니다. 여분의 설명으로 인해이 오류가 발생한 원인을 이해할 수 없습니다.

모든 모든 도움은 새로운 구분은 세미콜론 대신에 사용되어야 DELIMITER이 세미콜론 이외로 변경되면

+0

줄 바꿈은 생각하는 위치에 확실합니까? – EJP

+0

주석은 오류를 일으키지 않아야합니다. 아마도 주석으로 인식하지 못할 수도 있습니다. 여러분과 메모 사이에 공백이 있는지 확인하십시오. 어쩌면 탭을 넣고 주석과 줄 사이에 여분의 줄을 입력하십시오. EXCOTS IF EXISTS –

답변

1

환영합니다. 예를 들어

:

DELIMITER $$ 

-- IMPORTANT: Change to ecom_prod 
USE ecom_dev$$ 

DROP PROCEDURE IF EXISTS `usp_getDetails`$$ 

DELIMITER ; 

난 당신의 코드가 세미콜론으로 작업하는 방법을 모르겠어요. 나는이 문제가 그 논평과 관련이 없다고 생각한다. 그러나 나는 그것을 시험하지 않았다. 나는 항상 DELIMITER 앞뒤에 빈 줄이있다. 그리고 내가 DELIMITER을 사용하는 유일한 시간은 CREATE <stored_program_type>입니다.

+0

당신이 그것을 못 박았습니다. mysql 커맨드 라인 클라이언트는 'USE' 명령을 처리 할 때 약간의 일관성이 없습니다 (사용자가 엔터를 치더라도 구분 기호없이 처리됩니다) (잘못, imho) 그리고 기본적으로 적어도 일부 SQL 주석은 잘못되었습니다 다시) 클라이언트에 의해 선언문을 제거했습니다. 그래서 코드가 최소한 오류를 발생시키지 않았을 수 있습니다 ... 그렇습니다. 단락 기호를 세미콜론으로 변경할 때까지 모든 명령문 (저장된 프로그램 외부 body)는 구분 기호로 끝나야합니다. –

+0

나는'msyql' 커맨드 라인 클라이언트에서'-c' 옵션을 사용합니다. (저의 근거는 저장된 프로그램에서 코멘트가 보존된다는 것입니다. 주석 옵션이 없으면 주석이 제거됩니다.) 여러분이 관찰 한 행동은 영향을받을 수도 있습니다 '-c' 옵션으로. – spencer7593

관련 문제