Mysql - 创建存储过程

时间:2016-07-08 18:39:32

标签: mysql stored-procedures command-line

使用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 ;

我已尝试使用以下命令执行此命令行:

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 for the right syntax to use near 'limitStr

然而,StackOverflow上的另一个question使用了这种确切的语法,它适用于其他所有人吗?

1 个答案:

答案 0 :(得分:4)

您使用的是保留字table。请尝试以下方法。经测试可以正常工作。如果你需要使用像保留字这样的if-y字,那么用反向标记围绕它。这包括列名和包含空格或连字符的表的单词。

<强>架构:

drop table if exists mytable123;
create table mytable123
(
    id int auto_increment primary key,
    date_lastmodified datetime not null
);

insert mytable123(date_lastmodified) values ('2006-07-23'),('2006-07-27 13:10:09');

存储过程:

drop procedure if exists loadDashboard;
DELIMITER //
CREATE PROCEDURE loadDashboard 
(
    IN limitStr int(11)
)
BEGIN
    DECLARE theLimit int;   -- to maintain compatibility (see comment from user wchiquito)

    set theLimit=limitStr;

    SELECT  ID
    FROM mytable123
    ORDER BY date_lastmodified 
    LIMIT theLimit; -- use the local variable for this
END //

DELIMITER ;

<强>试验:

call loadDashboard(1);
call loadDashboard(17);

MySQL Reserved Words ...带有(R)的那些。