mysql程序错误ERROR 1304&错误1305

时间:2010-08-04 01:37:05

标签: sql mysql stored-procedures

我是新手使用程序,似乎无法使我的工作。我正在使用MySQL v5.1.36并在WAMPP服务器上使用MySQL控制台输入我的代码。如果我去(重新)创建程序。我收到错误#1304(42000)。

mysql>  DELIMITER //
mysql>
mysql>  CREATE PROCEDURE modx.getCRID (IN x VARCHAR(255),OUT y INT)
    ->  BEGIN
    ->          DECLARE y INT;
    ->          SELECT id INTO y
    ->          FROM `modx`.coverage_region
    ->          WHERE `coverage_region`.name = x;
    ->  END//
ERROR 1304 (42000): PROCEDURE getCRID already exists
mysql>
mysql>  DELIMITER ;

但是,如果我尝试使用该程序,我会收到错误#1305(42000)。

mysql> USE modx;
Database changed
mysql> SET @crID = modx.getCRID("South East");
ERROR 1305 (42000): FUNCTION modx.getCRID does not exist

如果一个程序存在,另一个程序怎么可能不存在?我做错了什么。

1 个答案:

答案 0 :(得分:4)

我相信问题是

  1. 发生第一个错误是因为您尝试重新创建现有过程。如果您先放弃该过程,则不会出现此错误,
  2. 第二个错误是因为使用CALL语句调用PROCEDURE,而在代码中调用FUNCTION作为函数引用。您必须定义一个FUNCTION而不是PROCEDURE。 (MySQL documentation)说:
  3.   

    CREATE FUNCTION语句也是   在MySQL中用于支持UDF   (用户定义的函数)。见章节   21.2,“向MySQL添加新功能”。 UDF可以被视为外部   存储功能。存储功能   与UDF共享其命名空间。看到   第8.2.3节“函数名称解析   和决议“,对于规则   描述服务器如何解释   引用不同种类的   功能

         

    要调用存储过程,请使用   CALL声明(见第12.2.1节,   “CALL语法”)。要调用存储的   功能,请参考   表达。该函数返回一个   表达评估期间的价值。