游标
游标的概念:游标是用来存放结果集的;
游标的声明和使用:
1.声明游标 cursor cursor_name isquery_sql;
2.打开游标 open cursor_name;
3.提取游标 fetch cursor_name into variable_list;
4.关闭游标 close cursor_name;
游标的四个重要的属性:
1.%found 检验游标成功否.有数据返回true
2.%isopen 检验是否打开
3.%notfound 无条件返回时 返回true 相反与found
4.%rowcount 返回检索出来的行数
实例:
对emp表员工工资进行纳税计算
declare
cursor cursor_emp is select e.sal ,e.ename from emp e;
1.声明游标 is 后是具体的sql语句 这里查询emp 的薪水和ename
v_emp_item cursor_emp%rowtype;
2.因为游标在这里使用的时候需要用到的是is后结果集的每条数据
所以声明变量是游标类型 的每一行类型使用rowtype声明
v_sal emp.sal%type;
v_ename emp.ename%type;
v_sal_tax number:=0;
begin
open cursor_emp;
3.打开游标
loop
fetch cursor_emp into v_emp_item;
4.循环提取游标 给每行数据赋值
v_sal:=v_emp_item.sal;
v_ename:=v_emp_item.ename;
5.将每行数据拆开给具体变量赋值
if
6.判断结果集 按照条件进行计算个税
v_sal>=800 and v_sal <1000 then
v_sal_tax:=(v_sal-800)*0.05;
elsif
v_sal>=1000 and v_sal <2000 then
v_sal_tax:=(v_sal-800)*0.1;
elsif
v_sal>=2000 then
v_sal_tax:=(v_sal-2000)*0.2;
end if;
dbms_output.put_line(v_ename||'个税'||v_sal);
exit when cursor_emp%notfound;
7.注明循环停止条件 是游标拿不到数据为止
end loop;
end;
结果集如下:
SMITH个税800
ALLEN个税1600
WARD个税1250
JONES个税2975
MARTIN个税1250
BLAKE个税2850
CLARK个税2450
SCOTT个税3000
KING个税5000
TURNER个税1500
ADAMS个税1100
JAMES个税950
FORD个税3000
MILLER个税1300
MILLER个税1300
最后的数据重复:修改代码为
将exit when cursor_emp%notfound; 提前到
fetch cursor_emp into v_emp_item;之后一行
游标的概念
最新推荐文章于 2021-03-17 08:46:21 发布