创建时mysql存储过程错误

时间:2013-12-23 15:25:57

标签: mysql sql stored-procedures

我是学习存储过程的新手。现在我正在尝试创建一个生成随机数的过程并将其存储在变量中,然后将该值插入另一个表中。

create procedure getRand() 
begin 
delcare rc varchar(255); 
SELECT CHAR(ROUND(65 + FLOOR( RAND() * 57 ))) into rc; 
insert into Rand_loader (snum,rnum) values (rc,rc);
end//

但是当我尝试在mysql上运行它时,它会出现此错误

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 'rc varchar(255); 
SELECT CHAR(ROUND(65 + FLOOR( RAND() * 57 ))) into rc; 
insert' at line 3

我无法理解这个错误。感谢您的帮助。请帮我解决此问题

3 个答案:

答案 0 :(得分:2)

尝试以下代码。它对我有用

DELIMITER $$

CREATE
    /*[DEFINER = { user | CURRENT_USER }]*/
    PROCEDURE `yourdatabasename`.`getRand`()
    /*LANGUAGE SQL
    | [NOT] DETERMINISTIC
    | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
    | SQL SECURITY { DEFINER | INVOKER }
    | COMMENT 'string'*/
    BEGIN
 DECLARE rc VARCHAR(255); 
SELECT CHAR(ROUND(65 + FLOOR( RAND() * 57 ))) INTO rc; 
INSERT INTO Rand_loader (snum,rnum) VALUES (rc,rc);

    END$$

DELIMITER ;

您可以从此处下载SQLyog

https://code.google.com/p/sqlyog/downloads/list

使用可视化工具创建表和存储过程

答案 1 :(得分:1)

你写的“声明”错了。

CREATE PROCEDURE `getRand`()
    LANGUAGE SQL
    NOT DETERMINISTIC
    CONTAINS SQL
    SQL SECURITY DEFINER
    COMMENT ''
BEGIN
declare rc varchar(255); 
SELECT CHAR(ROUND(65 + FLOOR( RAND() * 57 ))) into rc; 
insert into Rand_loader (snum,rnum) values (rc,rc);
END

答案 2 :(得分:0)

您只需要将declare替换为DECLARE,并在编写SQL命令时始终尝试使用大写字母。