2013-12-17 68 views
1

我想创建一个存储过程,检查一个表是否存在。mysql存储过程中的错误

如果是这样,我想放下它并创建一个新的。否则,只需创建它。

这是代码。

DELIMITER \\ 
    CREATE PROCEDURE spCheckGraph (OUT var1 INT) 
    BEGIN 
    DECLARE var0 INT; 
    SELECT COUNT(*) INTO var1 FROM GRAPH_SUMMARY; 
     IF var1 =0 THEN 
      CREATE TABLE GRAPH_SUMMARY(
      id int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, 
      gender varchar(10), 
      purpose_abroad_as_per_recorded_travel varchar(255), 
      country_name varchar(255) 
     ); 
     ELSE 
      Drop table GRAPH_SUMMARY; 

      CREATE TABLE GRAPH_SUMMARY(
      id int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, 
      gender varchar(10), 
      purpose_abroad_as_per_recorded_travel varchar(255), 
      country_name varchar(255) ; 
     END IF; 
    END \\ 
DELIMITER ; 

它抛出这个错误:
您的SQL语法错误;检查与您的MySQL服务器版本对应的手册,以找到在';'附近使用的正确语法。万一; END'在线18

回答

5

错误出现在您的else区块中。您错过了​​声明的右括号。

更新您与其他块:

ELSE 
    Drop table GRAPH_SUMMARY; 

    CREATE TABLE GRAPH_SUMMARY(
    id int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    gender varchar(10), 
    purpose_abroad_as_per_recorded_travel varchar(255), 
    country_name varchar(255) 
); 
END IF; 

更新:

,如果它已经存在,你会做以下步骤下降:

DROP PROCEDURE IF EXISTS `spCheckGraph`; 
DELIMITER \\ 
CREATE PROCEDURE spCheckGraph (OUT var1 INT) 
    BEGIN 
    ... 
    END; 
\\ 
DELIMITER ; 
+1

的'END IF; '已经在OP的代码中。他/她只是在'DELIMITER.' –

+0

感谢@vinodadhikary的代码末尾添加了额外的'END'语句..另一件事,我如何删除一个过程,如果它已经存在?我想在创建这个sp之前添加它。 –

+0

@EricSantos,请参阅更新。 – vee