2014-04-22 21 views
0

데이터베이스에서 스크립트를 실행해야합니다. 스크립트는 큰 PL/SQL 블록을 포함합니다. phpmyadmin을 사용하여 스크립트를 실행하려고 시도하고 있지만 오류가 발생하여 항상 잘못된 작업을하고 있다고 생각합니다. 쿼리 실행 중 오류가 발생했습니다.

내가 실행하기 위해 노력하고있어의 예입니다

SET AUTOCOMMIT=0; 
DROP PROCEDURE IF EXISTS proceduretest; 
delimiter // 
CREATE PROCEDURE proceduretest() 
BEGIN 
    SELECT @tableexist:=COUNT(*) FROM information_schema.TABLES WHERE TABLE_NAME = 'tabletest'; 
    IF @tableexist > 0 THEN 
     INSERT INTO docs_id_entidades VALUES(56, 'test IF TRUE', 64); 
    ELSE 
     INSERT INTO docs_id_entidades VALUES(56, 'test IF FALSE', 64); 
    END IF; 
EXCEPTION 
    WHEN OTHERS THEN 
     RAISE_APPLICATION_ERROR(3001, 'Some error ocurred. Implicit rollback'); 
END; 
// 
delimiter ; 
CALL proceduretest(); 
COMMIT; 
DROP PROCEDURE IF EXISTS proceduretest; 

을 그리고 이것은 오류입니다 : VMai 그의 의견에 말했듯이

#1064 - 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 'WHEN OTHERS THEN 
RAISE_APPLICATION_ERROR(3001, 'Some error ocurred. Implicit r' at line 10 
+1

이 당신의 MySQL의 SQL 언어에 포트 PL/SQL에 도착했습니다. – VMai

+0

올바른 방향으로 나를 안내해 주셔서 감사합니다. :디 – Rumpelstinsk

답변

0

, 문제는 내가이었다이었다 MySQL sintax를 사용하지 않습니다.

코드에 대한 권리 sintax은 다음과 같습니다

SET AUTOCOMMIT=0; 
DROP PROCEDURE IF EXISTS proceduretest; 
delimiter // 
CREATE PROCEDURE proceduretest() 
BEGIN 
    DECLARE tableexist INT(1); 
    DECLARE CONTINUE HANDLER FOR SQLEXCEPTION ROLLBACK; 
    SELECT COUNT(*) INTO tableexist FROM information_schema.TABLES WHERE TABLE_NAME = 'tabletest'; 
    IF tableexist > 0 THEN 
     INSERT INTO docs_id_entidades VALUES(56, 'test IF TRUE', 64); 
    ELSE 
     INSERT INTO docs_id_entidades VALUES(56, 'test IF FALSE', 64); 
    END IF; 
END; 
// 
CALL proceduretest()// 
COMMIT// 
DROP PROCEDURE IF EXISTS proceduretest 
관련 문제