小编典典

mysql过程错误ERROR 1304&ERROR 1305

sql

我是使用程序的新手,似乎无法使我的工作正常。我正在使用MySQL v5.1.36,并在WAMPP服务器上使用MySQL
Console输入代码。如果我去(重新)创建程序。我收到错误#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

如果该程序存在于一个程序中,怎么可能不存在于另一程序中呢?我究竟做错了什么。


阅读 720

收藏
2021-04-07

共1个答案

小编典典

我相信问题是

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

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

要调用存储过程,请使用CALL语句(请参见第12.2.1节“ ALL语法”)。要调用存储的函数,请在表达式中引用它。该函数在表达式求值期间返回一个值。

2021-04-07