gpt4 book ai didi

MySQL 5.7 存储过程语法错误,通过 phpadmin 和 Ubuntu 16.04

转载 作者:行者123 更新时间:2023-11-28 23:20:38 24 4
gpt4 key购买 nike

我是 MySQL 5.7 中的存储过程和有用的弹出式编辑器的新手。我有一个查询在放入常规 SQL 编辑框中时有效,但在我尝试从中创建存储过程时失败。我怀疑 @rank:=@rank+1 是问题所在,但当然 MySQL 在缩小范围方面帮助不大。

重点是简单地按字段 (ccstr) 对某些行进行排序,然后选择项目 #N,其中 N 是输入参数。

这就像直接 SQL 一样,用一个值替换 N,比如 3

SET @rank:=0;
SELECT ccstr FROM
( SELECT @rank:=@rank+1 AS rank, ccstr
FROM cards
ORDER BY ccstr ASC) as B
WHERE B.rank = N;

我试过使用弹出式编辑器,以及我能想到的各种混合搭配,例如以下,但都失败了:

DELIMITER //
CREATE PROCEDURE readnth
(IN NDX INT)
DECLARE @rank INT;
SET @rank := 0;
SELECT ccstr FROM
(select @rank:=@rank +1 as rank, ccstr from cards
order by ccstr ASC)
as b where b.rank=ndx;
end //
delimiter ;

对于这里的一般问题是什么的任何帮助将不胜感激!

最佳答案

删除行:

DECLARE @rank INT;

不能声明以@开头的变量。

另一种编码方式是使用准备好的语句:

PREPARE stmt FROM CONCAT('SELECT ccstr FROM cards ORDER by ccstr LIMIT ', (ndx+1), ', 1');
EXECUTE stmt;

您必须使用准备好的语句,因为 LIMIT 的参数必须是常量,而不是表达式。

关于MySQL 5.7 存储过程语法错误,通过 phpadmin 和 Ubuntu 16.04,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41771727/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com