mysql存储过程中的错误

Eri*_*tos 1 php mysql sql sql-server

我正在尝试创建一个存储过程,检查表是否存在.

如果确实如此,我想删除它并创建一个新的.否则,只需创建它.

这是代码.

  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 ;
Run Code Online (Sandbox Code Playgroud)

它抛出此错误:
您的SQL语法中有错误; 检查与您的MySQL服务器版本对应的手册,以便在'附近使用正确的语法; 万一; 在第18行结束

vee*_*vee 5

错误发生在您的else区块中.您缺少该create table...语句的右括号.

用以下内容更新你的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;
Run Code Online (Sandbox Code Playgroud)

更新:

要删除已存在的过程,您需要执行以下操作:

DROP PROCEDURE IF EXISTS `spCheckGraph`;
DELIMITER \\
CREATE PROCEDURE spCheckGraph (OUT var1 INT)  
  BEGIN
    ...
  END;
\\
DELIMITER ;
Run Code Online (Sandbox Code Playgroud)