我正在将开发数据库复制到Web制作服务器,该工作服务器可以正常工作,直到以下情况:
CREATE PROCEDURE sprc_list_user_accounts
(
int_page_number INT,
int_recs_per_page INT
)
BEGIN
DECLARE int_record_first INT;
IF int_page_number = 0
THEN SELECT record_identifier,
name_account,
name_last,
name_first,
flag_disabled
FROM acs_accounts
ORDER BY name_last,
name_first;
ELSE SET int_record_first = ((int_page_number - 1) * int_recs_per_page);
SELECT record_identifier,
name_account,
name_last,
name_first,
flag_disabled
FROM acs_accounts
ORDER BY name_last,
name_first
LIMIT int_record_first, int_recs_per_page;
END IF;
END $$
这在我自己的机器上完美运行 - Win7 / 64 MySQL 5.5.24,但在网络机器上窒息 - Linux / 64 MySQL 5.1.55。令人讨厌的是,所有上述表格和程序都显示得很好。结果是一个不太有帮助的1064没有解释。
确切的回答是
Error
SQL query: Documentation
-- =====
-- LISTS
-- =====
CREATE PROCEDURE sprc_list_user_accounts(
int_page_number INT,
int_recs_per_page INT
) BEGIN DECLARE int_record_first INT;
SELECT COUNT( * )
FROM acs_accounts;
IF int_page_number =0 THEN SELECT record_identifier, name_account, name_last, name_first
FROM acs_accounts
WHERE flag_disabled =0
ORDER BY name_last, name_first;
ELSE SET int_record_first = ( (
int_page_number -1
) * int_recs_per_page ) ;
SELECT name_account, name_last, name_first, flag_disabled
FROM acs_accounts
ORDER BY name_last, name_first
LIMIT int_record_first, int_recs_per_page;
END IF ;
END $$
MySQL said: Documentation
#1064 -
---结束消息!
答案 0 :(得分:0)
在MySQL 5.5.6。
之前,不支持在LIMIT子句中使用局部变量请参阅Bug #11918 SP does not accept variables in LIMIT clause
早期版本的MySQL中的解决方法是使用动态SQL。也就是说,您必须在存储过程中进行PREPARE和EXECUTE查询。
PS:在您计划部署的相同版本的MySQL上进行开发是一个好主意。