Bug #33856 LIMIT clause doesn't accept any variable or other, just constant numbers
| Submitted: | 14 Jan 2008 0:35 | Modified: | 26 Mar 2008 10:18 |
|---|---|---|---|
| Reporter: | Stéphane GRAZIANO | Email Updates: | |
| Status: | Duplicate | Impact on me: | |
| Category: | MySQL Server: Parser | Severity: | S4 (Feature request) |
| Version: | Any | OS: | Any |
| Assigned to: | CPU Architecture: | Any | |
| Tags: | LIMIT CLAUSE VARIABLE STORED PROCEDURE | ||
[14 Jan 2008 13:27]
Susanne Ebrecht
Many thanks for writing a feature request.
[14 Jan 2008 13:28]
Susanne Ebrecht
I looked through SQL Standard, but I couldn't found something contra or pro this.
[14 Jan 2008 13:30]
Stéphane GRAZIANO
test
[14 Jan 2008 13:33]
Stéphane GRAZIANO
Thanks Susanne ^^ It will be great if this were implemented in the next build... Humn, Just a little mistake in my bug description (correction in uppercase), Suggested fix: In order to fix, go to the parser file sql_yacc.yy to the LIMIT_OPTION line and change
[26 Mar 2008 10:18]
Susanne Ebrecht
Many thanks for writing a feature request. Some others also have had the same wish as you. This bug is a duplicate of bug #6673 and bug #8094.
[9 Jul 2008 3:10]
Ilkka Huotari
Please add this. Not having this leads to horrible code in stored procedures.
[24 Oct 2008 13:31]
Franck Andriano
Idem, add something that works... nothing in 6.0 alpha!
[17 Feb 2010 16:14]
Pat McGee
Gert's suggestion earlier works nicely as a workaround. Here it is again with slightly different syntax. DELIMITER $$ CREATE PROCEDURE get_product_range ( IN _START INTEGER, IN _LIMIT INTEGER ) BEGIN PREPARE STMT FROM " SELECT * FROM tblProduct LIMIT ?,? "; SET @START = _START; SET @LIMIT = _LIMIT; EXECUTE STMT USING @START, @LIMIT; END $$ DELIMITER ;
Portions of this website are copyright © 2001, 2002 The PHP Group
Page generated in 0.044 sec. using MySQL 8.4.7-u6-cloud
Timestamp references displayed by the system are UTC.
Content reproduced on this site is the property of the
respective copyright holders.
It is not reviewed in advance
by Oracle and does not necessarily represent the opinion of
Oracle or any other party.
Description: AS you know, LIMIT clause doesn't accept any variable or other, just constant numbers. It is very poor to use prepared statement to do this...so I was looking for a solution. I found one ! It's working but incomplete and could be crashy ^^. So this solution works BUT it could crash the server if the variable name is unknown. If somebody could help me to resolve this issue, that would be a very great functionnality for mysql developers ! Stéphane from France How to repeat: SET @limit1 := 1; SET @limit2 := 2; SELECT * FROM mysql.user LIMIT (@limit1+@limit2); Suggested fix: In order to fix, go to the parser file sql_yacc.yy to the option_value line and change like this : limit_option: param_marker { ((Item_param *) $1)->set_strict_type(INT_RESULT); } | simple_expr // this is the fix which allow expressions and variables ! ;