mysql存储过程 游标
- - ITeye博客end if;
insert into table3 (name)
select name from table2 where id =i;
end loop cursor_loop;
CLOSE c1;
end
$
delimiter ;. 已有 0 人发表留言,猛击->> 这里<<-参与讨论.
mysql 存储过程的简单例子
-- 定义新的语句分隔符// delimiter // create procedure pd016() begin -- ---------------------------------- -- 本存储过程主要实现以下操作 -- 1.查询游戏表的数据 -- 2.根据游戏表数据去获取类型表的信息 -- ---------------------------------- -- 创建一个临时表 create temporary table if not exists tmpTable ( id int(11) NOT NULL AUTO_INCREMENT, game_id int(11), catalog_name varchar(100), primary key(id) ) engine=memory; -- 显示临时表数据 select * from tmpTable; begin -- declare 必须紧跟着在begin之后定义 declare m_ga_id int; declare m_game_name_cn varchar(100); declare m_catalog_game_id int; declare m_catalog_name varchar(100); -- 定义游标结束标志 declare m_stop_flag int default 0; -- 定义需要使用的游标 declare cursor_game cursor for select ga_id,ga_name_cn from t021_game; declare cursor_catalog cursor for SELECT ca_game_id,ca_name FROM t025_catalog where ca_game_id=m_ga_id; -- 如果用了游标cursor,则必须定义这个游标结束标志,用来判读游标是否到底 -- 如果有多个游标,那么这些游标共用这个结束标志 -- 在读取游标所在记录时,必须先判断结束标志 -- 如果多个游标是嵌套关系,那么内层游标结束之后,必须将结束标志恢复为0,否则会影响外层游标的使用 declare continue handler for not found set m_stop_flag=1; -- 打开前面定义的游标 open cursor_game; -- 循环开始 -- 从游标当前位置取出1条记录,执行后游标会自动会移动到下一条记录 -- 将取出的字段赋给定义好的变量,注意游标字段与变量的一一对应关系 repeat fetch cursor_game into m_ga_id,m_game_name_cn; -- 判读游标是否到底 if m_stop_flag=0 then -- 打开游标 open cursor_catalog; -- 内层循环开始 repeat fetch cursor_catalog into m_catalog_game_id,m_catalog_name; -- 判读游标是否到底 if m_stop_flag=0 then -- 将数据存入临时表中 insert into tmpTable(game_id,catalog_name) values(m_ga_id,m_catalog_name); end if; -- 游标结束标志为1,表示游标到底,内层循环结束。 until m_stop_flag=1 end repeat; -- 关闭游标 close cursor_catalog; -- 设置游标结束标志为0(0=未结束),这样可以让外层循环继续执行。 set m_stop_flag=0; end if; -- 游标结束标志为1,表示游标到底,循环结束。 until m_stop_flag=1 end repeat; -- 关闭游标 close cursor_game; end; -- 显示临时表数据 select * from tmpTable; -- 结束前清除临时表数据 truncate table tmpTable; end; -- //表示创建存储过程语句的结束 // -- 恢复语句分隔符为; delimiter ;