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

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

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)

MySQLdb.connect是python 连接MySQL数据库的方法,在Python中 import MySQLdb即可使用,至于connect中的参数很简单:\x0d\x0ahost:MySQL服务器名\x0d\x0auser:数据库使用者\x0d\x0apassword:用户登录密码\x0d\x0adb: *** 作的数据库名\x0d\x0acharset:使用的字符集(一般是gb2312)\x0d\x0acursor = db.cursor() 其实就是用来获得python执行Mysql命令的方法,也就是\x0d\x0a我们所说的 *** 作游标\x0d\x0a下面cursor.execute则是真正执行MySQL语句,即查询TABLE_PARAMS表的数据。\x0d\x0a至于fetchall()则是接收全部的返回结果行 row就是在python中定义的一个变量,用来接收返回结果行的每行数据。同样后面的r也是一个变量,用来接收row中的每个字符,如果写成C的形式就更好理解了\x0d\x0afor(string row = ''row 回答于 2022-11-16


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7086135.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-01
下一篇 2023-04-01

发表评论

登录后才能评论

评论列表(0条)

保存