命令行下创建这个存储过程: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
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);但是参数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 没分号,中间有2008-01-24
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