mysql存储过程的小问题,无法运行?

来源:百度知道 编辑:UC知道 时间:2024/05/15 17:59:47
CREATE PROCEDURE p7 ()
BEGIN
SET @a = 5;
SET @b = 5;
INSERT INTO t VALUES (@a);
SELECT s1 * @a FROM t WHERE s1 >= @b;
END; // /* I won't CALL this.
这个语句将不会被调用
*/

在做练习的时候出问题了!
如上面的语句,数据库中已存T表了!好像set @a=5;后面的分号就错了?还是begin就错了?请教高手~~~
本人也是初学者耶~所以更多多的不明白了!不过问题还是无法解决。此过程的用意:插入一条记录,(insert into t values(@a)然后将符合条件的一些记录显示出来(select s1*@a from t where s1>=@b),,,s1为表的字段名!!可否写一条带BEGIN...END语句的过程来试试?我还是每打到分号时就报错了,或许是mysql认为结束了?

CREATE PROCEDURE p7 (IN b INTEGER(12))
begin
declare a INTEGER(12);
set a=5;
INSERT INTO t VALUES (a);
SELECT s1*a FROM t WHERE b<=s1;
end
这一段可以执行的- -~~~难道没有BEGIN 没有END么- -,这段代码你用不了?
哦......你难道是在命令行里面创建存储过程!!!?
那这样不行,我从来没在命令行里面试过,有很多软件可以用啊,而且没软件也可以写SQL脚本,然后直接执行啊,在命令行里面创建不是很方便。
命令行下创建这个存储过程:
delimiter //
CREATE PROCEDURE p7 (IN b INTEGER(12))
begin
declare a INTEGER(12);
set a=5;
INSERT INTO t VALUES (a);
SELECT s1*a FROM t WHERE b<=s1;
end;
//
刚刚在命令行下创建成功了的

不过推荐使用EMS FOR MYSQL,DREAMCODE FOR MYSQL,PHPMYADMIN或者使用官方的MYSQL图形化工具

你的问题1在于没有传参数,就上上面这段代码,要是把参数去掉还是会报错,MYSQL好像不允许执行不传参数的存储过程,但是你也可以随便声明一个,因为你可以把b定义在存储过程内,参数不使用就是了,比如:
CREATE PROCEDURE p7 (IN X INTEGER(12))
begin
declare a INTEGER(12);
declare b integer(12);
set a=5;
set b=5;
INSERT INTO t VALUES (a);
SELECT s1*a FROM t WHERE b<=s1;
end
然后call p7(12)