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 阅读 7 次 更新于 2025-07-19 13:51:31 我来答关注问题0
  • 存储过程需要参数才能执行。如果提供的参数不正确,存储过程将无法正常执行。请确保提供与存储过程定义匹配的参数。二、解决方案 1.检查权限 如果存储过程无法运行,请检查您是否有足够的权限。如果不是,请联系数据库管理员以获取必要的权限。确保在创建存储过程时指定了超级用户。2.检查语法 在创建存储过程...

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

  • 解决MySQL无法创建存储过程的问题,需要在MySQL配置文件中添加配置项,具体步骤如下:Step 1. 通过以下命令查看MySQL是否已打开binary log功能:SHOW VARIABLES LIKE ‘log_bin%’;如果结果中没有“log_bin”,则说明未开启binary log功能,无需进行以下配置。Step 2. 修改 MySQL 配置文件 my...

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

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

  •  翡希信息咨询 mysql存储过程为什么不推荐使用

    不推荐使用MySQL存储过程的原因主要有以下几点:移植性问题:MySQL存储过程是特定于数据库的,如果项目需要迁移到另一个数据库系统,存储过程可能需要大量的重写工作。这对于保持代码的可移植性和灵活性是一个挑战,增加了迁移成本和风险。调试和维护困难:存储过程的调试相比其他编程环境来说较为困难,尤其是...

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

mySQL相关话题

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