oracle--游标
1 游标
显示游标:是有用户声明和操作的一种游标,通常用于查询结果集 步骤为:声明游标,打开游标,读取数据,关闭游标
隐式游标:sql语句执行时,oracle会自动创建一个隐式游标,这个游标是内存中处理该语句的工作区域,主要用于处理数据操纵语句如:update,delete语句
当然也可以用来select查询结果,在实际应用中,用来判断更新数据行数或删除行数
1.1 声明游标
cursor cursor_name(输入参数1 ,输入参数2)(return ret_type)
is select * from emp
cursor_name 游标名
输入参数为可选项,可多个
ret_type 返回值类型 可选
1.2 打开游标
open cursor_name 参数
1.3 读取游标
fatch cursor_name into variable
variable 变量,用来存储游标中的数据
1.4 关闭游标
close cursor_name;
2 游标的属性
%found 布尔型的属性 如果sql影响到至少一行数据,该属性为true 否则为false
%notfound 布尔型属性 与%found属性相反
%rowcount 数字型属性 返回受sql影响的行数
%isopen 布尔型属性 判断游标是否打开,打开则为true 否则为false
应用:例如我需要给一个学校的所有院系和专业添加同一模块,手动点肯定又太慢了,所以直接后台操作
declare
cursor cur_test is --cur_test为游标名
select glyx, zydm from DM_XYZYB; --这是我要查询的一张存储院系和专业的表
begin
for c in cur_test loop --遍历游标
insert into JW_JH_MKB
(MKDM,
NJ,
JHLX,
YXDM,
ZYDM,
ZYFX,
MKMC,
YQMS,
YQXF,
SFBX,
SFZYGCSMK,
KZFS)
values
(seq_jw_jh_mkb.nextval, 2014, '01',c.glyx,c.zydm,'0', '大学英语',
2, 4.0, 1, '0', '1');
end loop; --结束遍历,据说for循环结束遍历就直接关闭游标了,所以我没有关闭
commit; 提交