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

命令行下创建这个存储过程: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
mengvlog 阅读 342 次 更新于 2025-09-07 07:59:58 我来答关注问题0
  • MySQL存储过程报“no data”错误通常是因为游标没有查询到数据,导致在循环遍历时出现错误。以下是几个可能的解决方案和检查点:检查游标查询:确保查询正确:首先确认游标中的SQL查询语句是正确的,并且确实能够返回数据。可以在存储过程外部单独执行该查询,验证其返回结果。添加非空判断:在循环中判断数据是...

  • 存储过程需要参数才能执行。如果提供的参数不正确,存储过程将无法正常执行。请确保提供与存储过程定义匹配的参数。二、解决方案 1.检查权限 如果存储过程无法运行,请检查您是否有足够的权限。如果不是,请联系数据库管理员以获取必要的权限。确保在创建存储过程时指定了超级用户。2.检查语法 在创建存储过程...

  •  翡希信息咨询 mysql存储过程 和 触发器的优缺点 问题

    MySQL存储过程和触发器的优缺点 存储过程的优点: 提高代码重用性:存储过程可以将一系列复杂的SQL操作封装起来,供多次调用,从而提高代码的重用性。 性能优化:由于存储过程在服务器端执行,减少了客户端和服务器之间的数据传输量,同时数据库可以对存储过程进行预编译和优化,从而提高执行效率。 安全性增强...

  • MySQL存储过程报1064错误通常是因为语法错误或结束符问题。针对你提供的代码片段和参考信息,以下是可能导致1064错误的原因及解决方法:结束符问题:原因:MySQL默认以;作为语句的结束符。在创建存储过程时,由于存储过程包含多条语句,且中间可能包含;,因此直接使用默认结束符会导致MySQL在遇到第一个;时就尝...

  • 存储过程是一段可以被调用的SQL语句集合,可以实现复杂的业务逻辑和数据操作。然而,在MySQL中,存储过程并不是一种被广泛使用的数据处理方式,反而被建议避免使用。那么,为什么MySQL不建议使用存储过程呢?1.性能问题 存储过程需要在数据库中编写和存储,相比于应用程序的代码,存储过程的执行效率相对较低。

檬味博客在线解答立即免费咨询

mySQL相关话题

Copyright © 2023 WWW.MENGVLOG.COM - 檬味博客
返回顶部