Mysql存储过程不存在?

时间:2012-04-11 17:25:31

标签: mysql sql stored-procedures

我有这个存储过程。当我在Wamp上的PhpMyAdmin中执行它时,它表示已执行并且所有内容都已执行。当我尝试在查询中使用它时,它说功能不存在。我做错了什么?

DELIMITER //

CREATE PROCEDURE `sql_level`(IN exp INT)
BEGIN
    SELECT id
    FROM `levels`
    WHERE experience <= exp DESC LIMIT 1;
      id = id-1;
END //

DELIMITER ;

这是我正在尝试运行的查询。

$id = 1;
if($stmt->prepare("SELECT sql_level(attack) FROM `users` WHERE id = ?")) { 
$stmt->bind_param('i',$id); 
$stmt->execute(); 
$stmt->bind_result($attack); 
$stmt->fetch(); echo "<h1 align='center'>".$attack."</h1>";  } 
else { die($stmt->error); }

感谢。

2 个答案:

答案 0 :(得分:1)

您希望将例程创建为function而不是存储过程。

DELIMITER //

CREATE FUNCTION `sql_level`(exp INT)
RETURNS INT
BEGIN
    DECLARE ReturnId INT;

    SELECT id-1 INTO ReturnId
    FROM `levels`
    WHERE experience <= exp DESC LIMIT 1;

    RETURN ReturnId;
END //

DELIMITER ;

答案 1 :(得分:0)

DELIMITER |
CREATE FUNCTION `sql_level`(exp INT)
RETURNS INT
DETERMINISTIC
BEGIN
DECLARE ReturnId INT;

SELECT id-1 INTO ReturnId
FROM `levels`
WHERE experience <= exp;

RETURN ReturnId;
END;

这是我最终使用它来使其工作。谢谢!希望这有助于某人!