我正在将开发数据库复制到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 7/64 MySQL 5.5.24上运行得非常完美,但在MySQL 5.1.55的web机器上却难以控制。令人讨厌的是,前面所有的表和过程都显示得很好。结果是一个不太有用的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 - -留言结束了!
发布于 2013-08-22 01:50:22
直到MySQL 5.5.6才支持在限制子句中使用局部变量。
MySQL早期版本的解决方法是使用动态SQL。也就是说,您必须在存储过程中准备和执行查询。
PS:在您计划部署到的相同版本的MySQL上进行开发是个好主意。
https://stackoverflow.com/questions/18369572
复制相似问题