游标(光标)

来源:互联网 发布:pc安全软件 编辑:程序博客网 时间:2024/06/03 19:51

cursor 光标名 [(参数名 数据类型[参数名,数据类型]…)] is select 语句
例:cursor c1 is select ename from emp;
打开光标;
-open c1;
关闭光标;
-close c1;(释放资源)
取一行光标的值;
- fetch c1 into pename(取一行到变量中)
例:使用光标查询员工的姓名和薪资,并打印;

/*1.光标的属性%found %not found*/declare  --定义一个光标  cursor cemp is    select ename, sal from emp;  pename emp.ename%type;  psal   emp.sal%type;begin  --打开光标  open cemp;  loop    fetch cemp      into pename, psal;    --当没有取到记录时结束    exit when cemp%notfound;    --打印    dbms_output.put_line(pename || '的薪水是' || psal);  end loop;  --关闭光标  close cemp;end;

按员工的职位涨工资,总裁1000,经理800,其他400

/*按员工的职位涨工资,总裁1000,经理800,其他400*/declare  cursor cemp is    select empno, job from emp;  pempno emp.empno%type;  pjob   emp.job%type;begin  open cemp;  loop    fetch cemp      into pempno, pjob;    exit when cemp%notfound;    if pjob = 'president' then      update emp set sal = sal + 1000 where empno = pempno;    elsif pjob = 'manager' then      update emp set sal = sal + 800 where empno = pempno;    else      update emp set sal = sal + 400 WHERE empno = pempno;    end if;  end loop;  close cemp;  commit;--需要提交事务  dbms_output.put_line('涨工资完成');end;

1.光标的属性
%found %notfound
%isopen 判断光标是否打开
%rowcount 影响的行数
2.光标数的限制
默认情况下,oracle数据库只允许在同一个会话中,打开300个光标

原创粉丝点击