【问题标题】:MySQL server stored procedure syntax errorMySQL 服务器存储过程语法错误
【发布时间】:2013-10-04 10:09:33
【问题描述】:

我在为 MySQL 数据库创建存储过程时遇到了一些问题。

这是一个有效的 Select 语句:

use canningi_db_person_cdtest;
SELECT *
FROM pet
WHERE name = 'Puffball';

这是我的存储过程不起作用:

use canningi_db_person_cdtest;
CREATE PROCEDURE GetAllPets() 
BEGIN 
SELECT *
FROM pet
WHERE name = 'Puffball'; 
END

我收到以下错误:

#1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册以获取正确的语法使用 在第 5 行的 '' 附近

我怎样才能让它工作?

编辑

如何调用这个存储过程?我试过这个没有结果:

use canningi_db_person_cdtest;
CALL GetAllPets();

这是错误:

#1312 - PROCEDURE canningi_db_person_cdtest.GetAllPets can't return a result set in the given context 

【问题讨论】:

    标签: mysql database select stored-procedures syntax-error


    【解决方案1】:

    在这种特殊情况下,由于您的过程中只有一条语句,因此您无需更改 DELIMITER 也无需使用 BEGIN...END 块。

    您的程序可能如下所示

    CREATE PROCEDURE GetAllPets() 
      SELECT *
        FROM pet
       WHERE name = 'Puffball'; 
    

    并像这样使用它

    CALL GetAllPets();
    

    这里是SQLFiddle演示

    【讨论】:

      【解决方案2】:

      添加一个分隔符来结束您的过程。示例:

      use canningi_db_person_cdtest;
      
      DELIMITER //
      
      CREATE PROCEDURE GetAllPets() 
      BEGIN 
          SELECT *
          FROM pet
          WHERE name = 'Puffball'; 
      END//
      

      如果您需要更多信息,请参考http://dev.mysql.com/doc/refman/5.1/en/stored-programs-defining.html

      【讨论】:

      • 感谢 rcs。你能看看我对调用存储过程的编辑吗?
      • CALL GetAllPets(); 应该可以正常工作。怎么可能出错:EXEC GetAllPets()?你输入的是 EXEC 而不是 CALL?
      • 对不起,我复制了错误的错误信息。我已经更新了帖子。
      • 您是直接在 mysql 中执行CALL 语句(例如通过 mysql 工作台),还是从您的应用程序中调用它?一些用户在stackoverflow.com/questions/1200193/… 中报告了 PHP 问题。
      • 我正在执行来自 cPanel 一部分的 phpMyAdmin 的 CALL 语句。这行不通吗?
      猜你喜欢
      • 2012-04-12
      • 2014-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-23
      • 1970-01-01
      相关资源
      最近更新 更多