【发布时间】:2017-06-05 22:03:36
【问题描述】:
我不熟悉 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 ;
任何关于一般问题的帮助将不胜感激!
【问题讨论】:
-
错误是什么?
-
我认为你不需要声明以
@开头的变量 -
这是通用的“你有语法错误”无用的错误。
-
当我尝试它时,错误说它在
@rank INT。
标签: mysql stored-procedures phpmyadmin syntax-error