Mysql 存储过程中如何判断Cursor中结果集是否为空

如题。

第1个回答  2012-11-23
0 通过定义一个上下文管理者(即declare continue handler)来实现
必须在游标定义后定义,并通过使用一个辅助变量来进行判断。

1 示例如下:

delimiter $
drop procedure if exists curdemo $
CREATE PROCEDURE curdemo(pid int)
BEGIN
DECLARE notfound INT DEFAULT 0; #定义一个辅助变量用于判断
DECLARE a int; #定义游标输出值赋予的变量
DECLARE cur1 CURSOR FOR SELECT id FROM test.t where id= pid; #定义游标
DECLARE CONTINUE HANDLER FOR NOT FOUND SET notfound = 1; #定义declare continue handler,这个会根据上下文是否有结果判断是否执行SET notfound = 1

OPEN cur1;
FETCH cur1 INTO a;
if notfound = 1 then
select 'no result';
#写业务逻辑
ELSE
select concat('result:', a);
#写业务逻辑
end if;
CLOSE cur1;
END
$
delimiter ;

call curdemo(240);

数据库中如何判断某参数为空就不执行where条件
以Mysql数据库为例。在存储过程中使用判断一个参数,例参数为vtitleSelect a.from trn_res_courseware a where 1 = 1 and IF (vtitle is NULL, 0 = 0, a.title like CONCAT('%'+vtitle+'%'));vtitle 是参数。如果参数为空,则不执行(0=0永远成立),不为空,则执行 a.title like C...

MySQL高级篇-游标【Cursor】
使用游标通常需遵循四个步骤:声明、打开、使用与关闭。首先,通过`DECLARE`关键字声明游标,此步骤中指定`SELECT`语句获取数据结果集。接下来,使用`OPEN`关键字打开游标,此时`SELECT`语句查询结果集被送至游标工作区,为后续逐条读取记录做准备。接着,通过`FETCH`语句使用游标读取当前行数据,并将数据...

如何在存储过程中判断insert是否成功?
\\x0d\\x0a\\x0d\\x0amysql> INSERT INTO t VALUES(1),(2),(3);\\x0d\\x0a\\x0d\\x0a问询完成, 表中有3 行 (0.00秒)\\x0d\\x0a\\x0d\\x0a记录: 3 重复: 0 警告: 0\\x0d\\x0a\\x0d\\x0amysql> SELECT ROW_COUNT();\\x0d\\x0a\\x0d\\x0a+---+\\x0d\\x0a\\x0d\\x0...

mysql建立存储过程中如何判断一个数字的正负并使用select输出
BEGIN if v_i > 0 then select v_i as '负数';else select v_i as '正数';end if;END delimiter ;

mysql存储过程中分支语句有哪些
存储过程:create procedure p()begin \/*thi procedure does nothing*\/ end;1.参数 Parameters 参数 让我们更进一步的研究怎么在存储过程中定义参数1. CREATE PROCEDURE p5 () ...2. CREATE PROCEDURE p5 ([IN] name data-type) ...3. CREATE PROCEDURE p5 (OUT name data-type) ...4. ...

mysql在存储过程中先判断数据库中是否存在table1表,有就删除,没有就...
是的 这个主要是在增删改查的时候用到 if TABLE1 EXISTING DROP TABLE1;CREATE TABLE

在MySql数据库中实现一个存储过程,在这个存储过程中,需要用游标,动态SQL...
VARCHAR(50); DECLARE flag INT; DECLARE update_cursor CURSOR FOR SELECT stu_name FROM student WHERE id = id; DECLARE CONTINUE HANDLER FOR NOT FOUND SET flag=1; SET flag=0; OPEN update_cursor; REPEAT \/*循环*\/ FETCH update_cursor INTO stuName; ...

mysql 存储过程中update影响行数为0,回滚
使用FOUND_ROWS() 获得影响的行数,再用IF判断是否等于0就行了。-- 开始事务start transaction;call setCoin(zjAmount, 0, `uid`, liqType, `type`, info, _betId, serializeId, '');update blast_bets set lotteryNo=_kjData, zjCount=_zjCount, bonus=zjAmount, fanDianAmount=_fanDianA...

存储过程中用什么可以替代游标
Mysql存储过程优化——使用临时表代替游标。Mysql游标在操作小数据量时比较方便,效率可观,但操作大数据量,速度比较慢,甚至直接产生系统错误。一般说来,当操作的数据超过1万条时,就避免用游标吧。为了测试游标性能,写了下面一个游标对IDC_Gather_Info表中数据进行遍历 下面是当表中数据分别为15万、5...

mysql 一个存储过程中执行第二个游标时候,则提示游标没有打开!_百度知 ...
DECLARE update_cursor CURSOR FOR SELECT stu_name FROM student WHERE id = id;DECLARE CONTINUE HANDLER FOR NOT FOUND SET flag=1;SET flag=0;OPEN update_cursor;REPEAT \/*循环*\/ FETCH update_cursor INTO stuName;SET json = CONCAT(json,',',stuName);UNTIL flag END REPEAT;CLOSE ...

相似回答