我正在编写一个存储过程,其中有一个名为my_size的输入参数,它是一个INTEGER.我希望能够LIMIT在SELECT声明中的子句中使用它.显然这是不支持的,有没有办法解决这个问题?
# I want something like:
SELECT * FROM some_table LIMIT my_size;
# Instead of hardcoding a permanent limit:
SELECT * FROM some_table LIMIT 100;
Run Code Online (Sandbox Code Playgroud) 我有一个存储过程,如果我在没有变量的情况下编写以下查询,则all:运行良好
CREATE PROCEDURE `some_proc` ()
BEGIN
SELECT blabla FROM mytable ORDER BY id LIMIT 3,1
.....
Run Code Online (Sandbox Code Playgroud)
但是,如果我在LIMIT表达式中使用变量作为起始编号,我会收到错误:
CREATE PROCEDURE `some_proc` ()
BEGIN
DECLARE start INT;
SET start = 3;
SELECT blabla FROM mytable ORDER BY id LIMIT start,1
.....
Run Code Online (Sandbox Code Playgroud)
有没有办法在存储过程内的LIMIT表达式中使用变量?
如何选择表格中的最后一行?
我知道我可以选择最后一个,SELECT item FROM table ORDER BY id DESC LIMIT 1但我想选择ALL而不是最后一个.
我怎样才能做到这一点?
选择一定数量并使用ASC将无效,因为我不知道有多少行.
我考虑过进行行计数并获取该数量并选择-1并使用ORDER BY id ASC但是有没有更简单的方法?
谢谢.
使用Ver 14.12 Distrib 5.0.45(我知道它很旧),
文件:storedprocedure.sql包含:
DELIMITER //
CREATE PROCEDURE loadDashboard
(
IN limitStr int(11)
)
BEGIN
SELECT table123.ID
FROM table123
ORDER BY date_lastmodified LIMIT limitStr;
END //
DELIMITER ;
Run Code Online (Sandbox Code Playgroud)
我已经尝试使用以下命令执行此命令行:
mysql -u root -p -h localhost DB < storedprocedure.sql
并从内部
mysql -u root -p -h localhost DB
mysql> *copied the code in from storedprocedure.sql
我得到的错误是: ERROR 1064 (42000) You have an error in your SQL Syntax; check the manual that corresponds to your MySQL server version …