我是使用程序的新手,似乎无法使我的工作正常。 我正在使用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
如果一个程序存在,那么另一程序不存在? 我究竟做错了什么。
我相信问题是
发生第一个错误是因为您试图重新创建现有过程。 如果您要先删除该过程,则不会出现此错误,
第二个错误是因为PROCEDURE是使用CALL语句调用的,而FUNCTION是作为函数引用调用的,就像在代码中一样。 您必须定义一个功能,而不是一个过程。 (MySQL文档)说:
The CREATE FUNCTION statement is also
used in MySQL to support UDFs
(user-defined functions). See Section
21.2,"Adding New Functions to MySQL". A UDF can be regarded as an external
stored function. Stored functions
share their namespace with UDFs. See
Section 8.2.3,"Function Name Parsing
and Resolution", for the rules
describing how the server interprets
references to different kinds of
functions.
To invoke a stored procedure, use the
CALL statement (see Section 12.2.1,
"CALL Syntax"). To invoke a stored
function, refer to it in an
expression. The function returns a
value during expression evaluation.
谢谢! 它是如此明显,但我无法克服,因为我坚信我正在像SQL Server一样执行SP。:-)