mysql过程出错ERROR 1304&ERROR 1305

Bro*_*ias 5 mysql sql 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 ;
Run Code Online (Sandbox Code Playgroud)

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

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

如果一个程序存在,那么另一个程序不存在?我究竟做错了什么.

Jim*_*son 6

我相信问题是

\n\n
    \n
  1. 第一个错误的发生是因为您试图重新创建现有过程。如果您先删除该过程,则不会出现此错误,
  2. \n
  3. 第二个错误是因为 PROCEDURE 是使用 CALL 语句调用的,而 FUNCTION 是作为函数引用调用的,就像在代码中一样。您必须定义一个函数,而不是一个过程。(MySQL 文档)说:
  4. \n
\n\n
\n

MySQL 中还使用 CREATE FUNCTION 语句来支持 UDF(用户定义函数)。请参见第 21.2 节,\xe2\x80\x9c向 MySQL\xe2\x80\x9d 添加新函数。UDF 可以被视为外部存储函数。存储函数与 UDF 共享其命名空间。请参阅第 8.2.3 节,\xe2\x80\x9c 函数名称解析和解析\n,了解描述服务器如何解释\n 对不同类型函数的引用的规则。

\n\n

要调用存储过程,请使用 CALL 语句(请参阅第 12.2.1 节,\n \xe2\x80\x9cCALL 语法\xe2\x80\x9d)。要调用存储的函数,请在表达式中引用它。该函数在表达式求值期间返回一个\n 值。

\n
\n