Mysql存储过程不是有吗?

标签 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); }

谢谢。

最佳答案

您想将您的例程创建为 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 ;

关于Mysql存储过程不是有吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10110899/

相关文章:

mysql - MariaDB/MySQL - 如何根据嵌套对象的键查询 JSON

mysql - 谁在 cakephp 中运行自定义查询并以列表形式检索结果

mysql - 为什么sql中多对多关系的联结表同时实现外键作为主键?

java - 将一个 Hibernate 命名查询包含在另一个 Hibernate 命名查询中

sql - Postgres 检查是否有任何数组值在列表中

mysql - 列名前的 '0' 的用途

sql - 如何使用oracle contains 搜索具有特殊字符的整个单词?

c# - MySQL 存储过程和 C# 数据读取器列错误值

SQL 选择 : random order values from one table for each row in another

mysql - 如何在 MySQL *Prepared* 存储过程中使用多个参数