您可以试试看这个语句 SELECT * FROM mysql.proc t WHERE t.db = SCHEMA() AND UPPER(t.body) LIKE '%CURSOR%' ;
你这个是查询存储过程中是否有定义Cursor的,我的意思是在同一个存储过程中,先检查某一个cursor是否有被定义或使用,若使用某一cursor在使用,先关闭它。我在一个循环中定义cursor的,所以先要实现下面代码中中文那一行描述的功能,请问怎样写?多谢!SELECT * FROM mysql.proc t WHERE t.db = SCHEMA() AND UPPER(t.body) LIKE '%cur1%' ; DECLARE cur1 CURSOR FOR SELECT * FROM test; open cur1 ;if 检查cur1 是否 存在,若存在就先关闭
谢谢你!没上面复杂,因为我是在一个循环中调用类似下面的代码,我只需要在当前的存储过程中检查cur1是否存在,若存在就关闭。 需要需要实现下面中文描述对应的代码就可以,多谢你!SELECT * FROM mysql.proc t WHERE t.db = SCHEMA() AND UPPER(t.body) LIKE '%cur1%' ; DECLARE cur1 CURSOR FOR SELECT * FROM test; open cur1 ;if cur1 存在 then 关闭 end if
这个也有办法,你在CURSOR的时候,其实就是一个循环每一次循环都要有条件的,例如 OPEN cursor_name; FETCH cursor_name INTO i_1,i_2……; WHILE s <> 1 AND aaa = 1 DO …… FETCH cursor_name INTO i_1,i_2……; -- 如果想跳出循环,在这里给aaa设定一个不等于的值,例如 aaa=2。 END WHILE; CLOSE cursor_name ; 只要给循环里的条件,设置一个可以跳出循环的值即可。
就是Cursor
我是想怎样检查我是否已经在系统中定义(或正在使用)某一cursor,或叫游标吧。谢谢
就是Cursor
我是想怎样检查我是否已经在系统中定义(或正在使用)某一cursor,或叫游标吧。谢谢您说的是游标吧,存储过程里定义的。
SELECT * FROM mysql.proc t WHERE t.db = SCHEMA() AND UPPER(t.body) LIKE '%CURSOR%' ;
你这个是查询存储过程中是否有定义Cursor的,我的意思是在同一个存储过程中,先检查某一个cursor是否有被定义或使用,若使用某一cursor在使用,先关闭它。我在一个循环中定义cursor的,所以先要实现下面代码中中文那一行描述的功能,请问怎样写?多谢!SELECT * FROM mysql.proc t WHERE t.db = SCHEMA() AND UPPER(t.body) LIKE '%cur1%' ;
DECLARE cur1 CURSOR FOR SELECT * FROM test;
open cur1 ;if 检查cur1 是否 存在,若存在就先关闭
1、判断哪个存储过程用到了CURSOR。
2、判断哪个包含CURSOR 的存储过程,正在执行。
3、关闭正在运行的这个包含CURSOR的存储过程。
是这个意思吗。
需要需要实现下面中文描述对应的代码就可以,多谢你!SELECT * FROM mysql.proc t WHERE t.db = SCHEMA() AND UPPER(t.body) LIKE '%cur1%' ;
DECLARE cur1 CURSOR FOR SELECT * FROM test;
open cur1 ;if cur1 存在 then
关闭
end if
但是“SHOW PROCESSLIST;”的查询结果,不能确定是cursor的进程。你可以通过cursor里执行的语句,来判断是否是你需要的进程,但是要能确定唯一性,否则会误杀其它进程。
另外,还要问一下,为什么要结束正在执行的cursor,这样的操作,可能会导致误杀错误的进程,导致数据的不完整行,不建议这样的操作。
最好能详细的说一下您的需求,可能还有其它的方案来处理您的问题。
OPEN cursor_name;
FETCH cursor_name INTO i_1,i_2……;
WHILE s <> 1 AND aaa = 1 DO
……
FETCH cursor_name INTO i_1,i_2……;
-- 如果想跳出循环,在这里给aaa设定一个不等于的值,例如 aaa=2。
END WHILE;
CLOSE cursor_name ;
只要给循环里的条件,设置一个可以跳出循环的值即可。
如果是需要继续接着上次的内循环,标志变量为true。标志变量为true时不再open内循环游标就行了。