您当前的位置:首页 > 互联网教程

mysql创建存储过程出错,怎么解决

发布时间:2025-05-13 22:02:15    发布人:远客网络

mysql创建存储过程出错,怎么解决

一、mysql创建存储过程出错,怎么解决

Warning: Procedure created with compilation errors创建存储过程出现错误,是设置错误造成的,解决方法如下:

1、打开mysql的客户端管理软件,找到想要创建存储过程的数据库,在【Stored Procedures】菜单上点击鼠标右键,选择【Create Stored Procedure】菜单项。

2、点击之后,右侧会出现一个存储过程编辑界面,并且会有默认的创建存储过程的基本结构。

3、在CREATE PROCEDURE后面的是存储过程的名字,可以改成喜欢的任何名字。

4、在存储过程名字后面有个括号,这里是放置存储过程的传入、传出参数的,当然存储过程也可以没有参数,保留一个空括号即可。

5、调用存储过程使用call关键字,后面是存储过程的名称,括号中是传入的参数值。最后点击顶部的闪电符号,就可以执行存储过程,在下方显示存储过程返回的结果。

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

CREATE PROCEDURE p7(IN b INTEGER(12))

SELECT s1*a FROM t WHERE b<=s1;

这一段可以执行的--~~~难道没有BEGIN没有END么--,这段代码你用不了?

哦......你难道是在命令行里面创建存储过程!!!?

那这样不行,我从来没在命令行里面试过,有很多软件可以用啊,而且没软件也可以写SQL脚本,然后直接执行啊,在命令行里面创建不是很方便。

CREATE PROCEDURE p7(IN b INTEGER(12))

SELECT s1*a FROM t WHERE b<=s1;

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

你的问题1在于没有传参数,就上上面这段代码,要是把参数去掉还是会报错,MYSQL好像不允许执行不传参数的存储过程,但是你也可以随便声明一个,因为你可以把b定义在存储过程内,参数不使用就是了,比如:

CREATE PROCEDURE p7(IN X INTEGER(12))

SELECT s1*a FROM t WHERE b<=s1;

然后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))

SELECT s1*a FROM t WHERE b<=s1;

SELECT s1*a FROM t WHERE a<=s1;

三、mysql 存储过程

存储过程是数据库存储的一个重要的功能,但是MySQL在5.0以前并不支持存储过程,这使得MySQL在应用上大打折扣。好在MySQL 5.0终于开始已经支持存储过程,这样即可以大大提高数据库的处理速度,同时也可以提高数据库编程的灵活性。

MySQL存储过程创建的格式:CREATE PROCEDURE过程名([过程参数[,...]])

mysql>CREATEPROCEDUREproc1(OUTsint)

->SELECTCOUNT(*)INTOsFROMuser;

注:

(1)这里需要注意的是DELIMITER//和DELIMITER;两句,DELIMITER是分割符的意思,因为MySQL默认以";"为分隔符,如果我们没有声明分割符,那么编译器会把存储过程当成SQL语句进行处理,则存储过程的编译过程会报错,所以要事先用DELIMITER关键字申明当前段分隔符,这样MySQL才会将";"当做存储过程中的代码,不会执行这些代码,用完了之后要把分隔符还原。

(1)这里需要注意的是DELIMITER//和DELIMITER;两句,DELIMITER是分割符的意思,因为MySQL默认以";"为分隔符,如果我们没有声明分割符,那么编译器会把存储过程当成SQL语句进行处理,则存储过程的编译过程会报错,所以要事先用DELIMITER关键字申明当前段分隔符,这样MySQL才会将";"当做存储过程中的代码,不会执行这些代码,用完了之后要把分隔符还原。

(2)存储过程根据需要可能会有输入、输出、输入输出参数,这里有一个输出参数s,类型是int型,如果有多个参数用","分割开。

(3)过程体的开始与结束使用BEGIN与END进行标识。