mysql存储过程declare报错(求助MySql创建存储过程错误)

本文目录
- 求助MySql创建存储过程错误
- MySql 存储过程遍历游标出错
- mysql 储存过程的一个问题
- 关于MYSQL中Declare报错的问题
- MYSQL存储过程中声明变量那句报错了求高手解答啊
- 第一次写mysql存储过程报错保存不了,求解
- mysql 存储过程提示错误!!求高人解答
求助MySql创建存储过程错误
DECLARE @maxdate DATETIME DEFAULT ’1900-01-01 00:00:00’;
DECLARE @mindate DATETIME DEFAULT ’1900-01-01 00:00:00’;
DECLARE @datatime DATETIME DEFAULT ’1900-01-01 00:00:00’;
DECLARE @jctype VARCHAR DEFAULT ’’;
这些都删掉
mysql的用户变量(@变量名)不用declare来声明,直接用就可以了,如果一开始要默认值,直接set @变量名=值
MySql 存储过程遍历游标出错
MySql 存储过程遍历游标出错
DECLARE CONTINUE HANDLER FOR SQLSTATE ’02000’ SET DONE = 1;
这种语句是异常捕获内容,在mysql中都是使用HANDLER 来捕获异常的。
建议你看下:MySQL存储过程详解
MySQL游标循环遍历的使用
mysql 储存过程的一个问题
下面是一个最简单的MySQL存储过程,实现两个数相加
delimiter $$
create procedure proc_add(in a int,in b int)
begin
declare c int;
if a is null then
set a = 0;
end if;
if b is null then
set b = 0;
end if;
set c = a + b;
select c;
end$$
delimiter ;
需要特别注意的是
1. declare语句只能放在存储过程的开始位置,放在后面就会报错
2. if 语句的后面必须有then,但是不需要begin,在if结束时需要end if
3. 判断是否为NULL倒是和MSSQL一样都有IS NULL
4. delimiter是定界符的意思在结束的end后面要添加定界符
5. end if之后必须跟分号,否则语法错误
下面是一个较常见的场景,判断表中某列是否存在某值,如果存在执行某操作
delimiter $$
create procedure proc_add_book(in $bookName varchar(200),in $price float)
begin
declare $existsFlag int default 0;
select bookId into $existsFlag from book where bookName = $bookName limit 1;
if bookId 》 0 then
#if not exists (select * from book where bookNumber = $bookName) then
insert into book(bookNumber,price) values($bookName,$price);
end if;
end$$
delimiter ;
需要注意的是不能用if exists;exists可以在where后面或者在create object是使用,但是在if语句中不可以使用,只能用变通的方法。
关于MYSQL中Declare报错的问题
很显然你的过程语法有问题,不是DECLARE有问题,是你每个处理语句的后面没有加;号,所以器会报错,你检查一下语法吧,都加上分号再看看。
MYSQL存储过程中声明变量那句报错了求高手解答啊
稍微给你改了下,,,可以了
CREATE PROCEDURE BatchInsert(IN init INT, IN loop_time INT)
BEGIN
DECLARE Var INT;
DECLARE ID INT;
SET Var = 0;
SET ID = init;
WHILE Var 《 loop_time DO
insert into employees(id,fname,lname,birth,hired,separated,job_code,store_id)
values(ID,CONCAT(’chen’,ID),CONCAT(’haixiang’,ID),Now(),Now(),Now(),1,ID);
SET ID = ID + 1;
SET Var = Var + 1;
END WHILE;
END;
你的语句没错误,但是估计是你行间有空格,导致语句错误,排了下版就可以了
第一次写mysql存储过程报错保存不了,求解
有两个问题
1、参数中varchar要定义几个字符,如varchar(20)
2、mysql的注释方式没有//,只有/**/和#
3、存储过程的前后要先定义分隔符DELIMITER ;;
因此最终结果:
DELIMITER ;;
CREATE DEFINER=`root`@`%` PROCEDURE `NewProc`(IN `spid` int,IN `spprice` varchar(20),IN `spnum` varchar(20))
BEGIN
DECLARE wareid INT; #定义三个变量
DECLARE num1 INT;
DECLARE num2 INT;
DECLARE cursor_invent CURSOR FOR SELECT goodsid FROM goods; /*定义游标 返回参数对应的商品 id*/
OPEN cursor_invent;
REPEAT
FETCH cursor_invent INTO wareid; #将id赋值给wareid
IF wareid=spid
THEN
SET num1=CONVERT(inventnum,SIGNED); #varchar转化成int
SET num2=CONVERT(spnum,SIGNED);
UPDATE invent SET inventnum=CONCAT(num1+num2) WHERE inventid=spid; #如果存在同名商品那么原有数量+现有数量
ELSE INSERT INTO invent(goodsid,inventnum,inventprice) values(spid,spprice,spnum); #不存在就直接插入一条记录
END IF;
UNTIL cursor_invent END REPEAT;
CLOSE cursor_invent;
END
;;
DELIMITER ;
mysql 存储过程提示错误!!求高人解答
用过begin——end句块的应该都接触过declare。
declare是用来定义变量和常用处理、声明之类的关键字。在mysql存储过程出现之前declare是一块鸡肋,大家常用declare来定义局部变量,我习惯性的还是使用set来定义变量(虽然是全局的,但是来的方便)。
存储过程出现后declare的标准处理定义就变成了非常强大的工具,可以用来为存储过程添加一些非常强大的错误处理机制。
首先需要提一点的是declare定义变量如果想定义varchar型的,必须注明参数最大长度,即declare varchar(20).
在这里我们不深究它用来定义参数的小细节
我们主要来研究DECLARE Condition 和 DECLARE Handler
DECLARE Condition 和 DECLARE Handler可以说是为了处理错误而生的。
功能上讲DECLARE Condition出现的时间比较早,功能也比较简单,它可以通过错误编号或者SQLSTATE来触发一各名字,说明白一点就是当某个错误编号出现的时候替换一个名字给它。这样调用的时候,我们不用去记一大串错误编号了。
它的标准语法我们可以在mysql的附注中找到。
DECLARE condition_name CONDITION FOR condition_value
condition_value:
例子如下:
DECLARE errname CONDITION FOR SQLSTATE ’23000’
将返回SQLSTATE信息为23000的错误定名为errname
这个名字就可以被我们的绝对重头戏DECLARE Handler调用了,在DECLARE Handler中可以定义错误的处理办法,可以使用begin和end来标记语句块,可以单独使用rollback。处理的过程也可以定义为继续执行和中断存储过程。
标准语法:
DECLARE handler_type HANDLER FOR condition_value sp_statement
handler_type: 处理的过程。
CONTINUE 继续执行未完成的存储过程,直至结束。(常用,默认)
| EXIT 出现错误即自动跳出所在的begin不再执行后面的语句。
| UNDO 气死我了,不支持为什么写在这里,害我测试了好久都是语法错误。
condition_value: 处理的触发条件
SQLSTATE sqlstate_value 不用说了,最常用的错误定义,自己去查错误列表吧。
| condition_name 我们刚刚定义的那个名字errnmae就是用在这里的。
| SQLWARNING 这个太好用了,从错误编号01开始的错误。相当于错误的通配符。
| NOT FOUND 和上面差不多,从02开始。
| SQLEXCEPTION 上面两个中没有包括的错误它都可以用来触发,就是说你想定义只要出错就触发的话就定义出错条件为SQLWARNING+SQLEXCEPTION。
| mysql_error_code 错误编号,和第一个不一样,不过同样可以在错误列表从中查到,是我比较常用的。
例子
DECLARE errname CONDITION FOR SQLSTATE ’23000’; 给导致错误23000的错误定义名字为errname
DECLARE continue handler for errname 当errname发生时作下面的处理
BEGIN 语句开始
set @x=1; 设置@x=1
select @x; 输出x
END; 结束出错处理。

本文相关文章:
insert语句语法错误(sql语句 insert语法错误)
2026年9月22日 04:00
drop table if exists admin(数据库上传SQL提示语法错误)
2026年7月9日 13:30
更多文章:
gcc编译器参数(深度linux的arm-linux-gnueabihf-gcc编译参数如何配)
2026年10月11日 19:30
asp是什么检查项目(医院血液检验项目RPR、TPPA、HIV-Ab各是什么意思)
2026年10月11日 10:20
汇编输出指令(用汇编语言循环指令在屏幕中间输出红底白字的“hello I am 720“)
2026年10月11日 07:20
本地搭建springboot项目(使用eclipse构建springboot项目)
2026年10月11日 06:20
java入门神器好用吗(java 7入门经典适合初学者自学用吗)
2026年10月11日 02:40
unix文件系统采用(Unix采用树形文件系统,其中“树形文件系统”什么意思)
2026年10月11日 00:50




