【问题标题】:error in mysql stored proceduremysql存储过程中的错误
【发布时间】:2013-12-17 07:28:42
【问题描述】:

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

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

这是代码。

  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 行

【问题讨论】:

    标签: php mysql sql sql-server


    【解决方案1】:

    错误出现在您的 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;
    

    更新:

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

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

    【讨论】:

    • END IF; 已经存在于 OP 的代码中。他/她只是在DELIMITER.上方的代码末尾有额外的END声明
    • 感谢@vinodadhikary.. 另一件事,如果程序已经存在,我该如何删除它?我想在创建这个 sp 之前添加它。
    猜你喜欢
    • 2016-02-08
    • 2023-03-23
    • 1970-01-01
    • 2019-07-08
    • 2015-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多