其实游标就是把查询的结果放入游标中,然后在去游标里边读取。相当于使用游标做了一个中转,而游标是可以作为参数进行传递的,所以游标可以在存储过程中起来数据集的桥梁作用。
游标介绍
1、游标是在内存中开辟的一块区域。
2、游标通过select语句确定从数据库中读取数据的记录集。
3、通过打开(Open)语句把确定的记录集读入到游标开辟的内存区。
4、游标又充当指针的作用。通过执行fetch语句向下移动指针,同时把指针所指的行数据赋给指定的变量中。
5、通过close语句关闭数据库,并释放游标所占的内存区。
使用游标的一般步骤
1、定义一个游标,也就是申明一块内容地址
注意游标只能使用is,不能使用as
2、给游标关联一个sql语句
3、使用open打开游标,就会执行sql语句,把集合放入内存
4、循环使用fecth去读取游标的内容放入变量中
5、关闭游标,释放内存资源
使用游标查询emp表中的ename与sal字段declare cursor cursor_emp --1:定义游标
is
select ename,sal from scott.emp where deptno = 20;--2:给游标关联一个sql语句
v_ename scott.emp.ename%type; --定义一个和emp表中ename字段一样的遍历
v_sal scott.emp.sal%type; --定义一个和emp表中sal字段一样的遍历
begin
open cursor_emp; --3:打开游标
loop
fetch cursor_emp into v_ename,v_sal;--4:使用fecth去读取游标的内容放入变量中
exit when cursor_emp%notfound; --退出条件:当游标读取完内容时退出
dbms_output.put_line(v_ename||':'||v_sal);
end loop;
close cursor_emp;--5、关闭游标,释放内存资源
end;
结果如下:
使用游标查询emp表中所有的字段
其实就是直接查询所有字段
然后使用scott.emp%rowtype;取一个整行的数据类型就行了declare cursor cursor_emp --1:定义游标
is
select * from scott.emp where deptno = 20;--2:给游标关联一个sql语句
v_row scott.emp%rowtype; --定义一个和emp表中行一样的数据类型
begin
open cursor_emp; --3:打开游标
loop
fetch cursor_emp into v_row;--4:使用fecth去读取游标的内容放入变量中
exit when cursor_emp%notfound; --退出条件:当游标读取完内容时退出
dbms_output.put_line(v_row.ename||':'||v_row.sal||':'||v_row.job);
end loop;
close cursor_emp;--5、关闭游标,释放内存资源
end;
结果如下:
游标使用参数declare cursor cursor_emp(p_deptno number) --1:定义游标
is
select * from scott.emp where deptno = p_deptno;--2:给游标关联一个sql语句
v_row scott.emp%rowtype; --定义一个和emp表中行一样的数据类型
begin
open cursor_emp(20); --3:打开游标,传递参数
loop
fetch cursor_emp into v_row;--4:使用fecth去读取游标的内容放入变量中
exit when cursor_emp%notfound; --退出条件:当游标读取完内容时退出
dbms_output.put_line(v_row.ename||':'||v_row.sal||':'||v_row.job);
end loop;
close cursor_emp;--5、关闭游标,释放内存资源
end;
使用游标更新和删除数据
非常忙空了在写┭┮﹏┭┮
游标配合存储过程使用
超级忙空了在写┭┮﹏┭┮
欢迎加群讨论技术,群号:677373950