– cursor (游标),游标不是数据对象,是数据类型,结果集引用
– 类似于ResultSet(游标)
DROP PROCEDURE IF EXISTS proc
DELIMITER C R E A T E P R O C E D U R E p r o c ( ) B E G I N D E C L A R E s t u I d I N T ; D E C L A R E s t u N a m e V A R C H A R ( 20 ) ; D E C L A R E s t u A g e I N T ; D E C L A R E c i d I N T ; D E C L A R E d o n e I N T D E F A U L T 0 ; − − 定 义 游 标 变 量 并 指 向 结 果 D E C L A R E s t u c u r s o r C U R S O R F O R S E L E C T ∗ F R O M s t u d e n t ; − − 定 义 游 标 读 取 不 到 数 据 的 时 候 的 处 理 方 式 把 d o n e 赋 值 为 1 , 该 句 之 后 不 能 再 定 义 变 量 D E C L A R E C O N T I N U E H A N D L E R F O R N O T F O U N D S E T d o n e = 1 ; − − 打 开 游 标 , 产 生 结 果 集 O P E N s t u c u r s o r ; R E P E A T − − 读 取 游 标 的 数 据 F E T C H s t u c u r s o r I N T O s t u I d , s t u N a m e , s t u A g e , c i d ; S E L E C T s t u I d , s t u N a m e , s t u A g e , c i d ; U N T I L d o n e = 1 E N D R E P E A T ; − − 关 闭 游 标 C L O S E s t u c u r s o r ; E N D CREATE PROCEDURE proc() BEGIN DECLARE stuId INT ; DECLARE stuName VARCHAR(20) ; DECLARE stuAge INT ; DECLARE cid INT ; DECLARE done INT DEFAULT 0 ; -- 定义游标变量并指向结果 DECLARE stu_cursor CURSOR FOR SELECT * FROM student ; -- 定义游标读取不到数据的时候的处理方式 把done赋值为1,该句之后不能再定义变量 DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1 ; -- 打开游标,产生结果集 OPEN stu_cursor ; REPEAT -- 读取游标的数据 FETCH stu_cursor INTO stuId , stuName , stuAge , cid ; SELECT stuId , stuName , stuAge , cid ; UNTIL done = 1 END REPEAT ; -- 关闭游标 CLOSE stu_cursor ; END CREATEPROCEDUREproc()BEGINDECLAREstuIdINT;DECLAREstuNameVARCHAR(20);DECLAREstuAgeINT;DECLAREcidINT;DECLAREdoneINTDEFAULT0;−−定义游标变量并指向结果DECLAREstucursorCURSORFORSELECT∗FROMstudent;−−定义游标读取不到数据的时候的处理方式把done赋值为1,该句之后不能再定义变量DECLARECONTINUEHANDLERFORNOTFOUNDSETdone=1;−−打开游标,产生结果集OPENstucursor;REPEAT−−读取游标的数据FETCHstucursorINTOstuId,stuName,stuAge,cid;SELECTstuId,stuName,stuAge,cid;UNTILdone=1ENDREPEAT;−−关闭游标CLOSEstucursor;END
CALL proc()
SELECT * FROM student