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

CREATEPROCEDUREp7()BEGINSET@a=5;SET@b=5;INSERTINTOtVALUES(@a);SELECTs1*@aFROMtWHEREs1... 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认为结束了?
展开
 我来答
小汤圆2008
2008-01-24 · TA获得超过366个赞
知道小有建树答主
回答量:279
采纳率:0%
帮助的人:189万
展开全部
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);但是参数X并不影响你的存储过程,但是必须传一个。
问题2,你没有声明a,b,变量必须声明- -
问题3,我是从5.0开始用MYSQL的,所以我不太清楚以前MYSQL变量的表现形式,但是在存储过程内,declare a char(4);声明一个变量a,我要用它的时候,set a='abcd';就行了,不用带@
还是上面的代码
我把insert into t values(a) 改为@a,那就插入的是空值
最后end 后面没有分号,最后一个END后面没分号,中间的有分号的比如

CREATE PROCEDURE p7 (IN X INTEGER(12))
begin
declare a INTEGER(12);
declare b integer(12);
set a=5;
set b=5;
if(a=b)
then
begin
INSERT INTO t VALUES (a);
SELECT s1*a FROM t WHERE b<=s1;
end;
else
INSERT INTO t VALUES (b);
SELECT s1*a FROM t WHERE a<=s1;
end;
end if;
end

最后一个end 没分号,中间有
仝臻恽清宁
2019-03-18 · TA获得超过3703个赞
知道大有可为答主
回答量:3131
采纳率:34%
帮助的人:217万
展开全部
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);但是参数X并不影响你的存储过程,但是必须传一个。
问题2,你没有声明a,b,变量必须声明-
-
问题3,我是从5.0开始用MYSQL的,所以我不太清楚以前MYSQL变量的表现形式,但是在存储过程内,declare
a
char(4);声明一个变量a,我要用它的时候,set
a='abcd';就行了,不用带@
还是上面的代码
我把insert
into
t
values(a)
改为@a,那就插入的是空值
最后end
后面没有分号,最后一个END后面没分号,中间的有分号的比如
CREATE
PROCEDURE
p7
(IN
X
INTEGER(12))
begin
declare
a
INTEGER(12);
declare
b
integer(12);
set
a=5;
set
b=5;
if(a=b)
then
begin
INSERT
INTO
t
VALUES
(a);
SELECT
s1*a
FROM
t
WHERE
b<=s1;
end;
else
INSERT
INTO
t
VALUES
(b);
SELECT
s1*a
FROM
t
WHERE
a<=s1;
end;
end
if;
end
最后一个end
没分号,中间有
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式