DECLARE 游标名称 CURSOR FOR 查询语句 ;
OPEN 游标名称 ;
- create procedure p11(in uage int)
- begin
- declare uname varchar(100);
- declare upro varchar(100);
- -- A. 声明游标, 存储查询结果集
- declare u_cursor cursor for select name,profession from tb_user where age <=uage;
- drop table if exists tb_user_pro;
- -- B. 准备: 创建表结构
- create table if not exists tb_user_pro(
- id int primary key auto_increment,
- name varchar(100),
- profession varchar(100)
- );
- -- C. 开启游标
- open u_cursor;
- while true do
- -- D. 获取游标中的记录
- fetch u_cursor into uname,upro;
- -- E. 插入数据到新表中
- insert into tb_user_pro values (null, uname, upro);
- end while;
- -- F. 关闭游标
- close u_cursor;
- end;
-
- call p11(30);
- DECLARE handler_action HANDLER FOR condition_value [, condition_value]
- ... statement ;
- handler_action 的取值:
- CONTINUE: 继续执行当前程序
- EXIT: 终止执行当前程序
- condition_value 的取值:
- SQLSTATE sqlstate_value: 状态码,如 02000
- SQLWARNING: 所有以01开头的SQLSTATE代码的简写
- NOT FOUND: 所有以02开头的SQLSTATE代码的简写
- SQLEXCEPTION: 所有没有被SQLWARNING 或 NOT FOUND捕获的SQLSTATE代码的简写
通过SQLSTATE指定具体的状态码
- create procedure p11(in uage int)
- begin
- declare uname varchar(100);
- declare upro varchar(100);
- -- A. 声明游标, 存储查询结果集
- declare u_cursor cursor for select name,profession from tb_user where age <=uage;
- -- 声明条件处理程序 : 当SQL语句执行抛出的状态码为02000时,将关闭游标u_cursor,并退出
- declare exit handler for SQLSTATE '02000' close u_cursor;
- drop table if exists tb_user_pro;
- -- B. 准备: 创建表结构
- create table if not exists tb_user_pro(
- id int primary key auto_increment,
- name varchar(100),
- profession varchar(100)
- );
- -- C. 开启游标
- open u_cursor;
- while true do
- -- D. 获取游标中的记录
- fetch u_cursor into uname,upro;
- -- E. 插入数据到新表中
- insert into tb_user_pro values (null, uname, upro);
- end while;
- -- F. 关闭游标
- close u_cursor;
- end;
-
- -- 调用
- call p11(30);
- create procedure p12(in uage int)
- begin
- declare uname varchar(100);
- declare upro varchar(100);
- -- A. 声明游标, 存储查询结果集
- declare u_cursor cursor for select name,profession from tb_user where age <=uage;
- -- 声明条件处理程序 : 当SQL语句执行抛出的状态码为02开头时,将关闭游标u_cursor,并退出
- declare exit handler for not found close u_cursor;
- drop table if exists tb_user_pro;
- -- B. 准备: 创建表结构
- create table if not exists tb_user_pro(
- id int primary key auto_increment,
- name varchar(100),
- profession varchar(100)
- );
- -- C. 开启游标
- open u_cursor;
- while true do
- -- D. 获取游标中的记录
- fetch u_cursor into uname,upro;
- -- E. 插入数据到新表中
- insert into tb_user_pro values (null, uname, upro);
- end while;
- -- F. 关闭游标
- close u_cursor;
- end;
-
- -- 调用
- call p11(30);