所谓光标就好比java中的一个集合,将查询出来的大量的记录装到一个集合里。
关于游标的一个简单运用:
set serveroutput on;
declare
cursor c1(dno number) is SELECT ename,sal from emp where deptno=dno;--定义光标
c_ename emp.ename% TYPE;
c_sal emp.sal% TYPE;
Num number :=10;--定义了一个变量
begin
OPEN c1(num);--打开光标,并传递了一个变量
loop
EXIT when c1%notfound;--如果游标里没有了记录就退出
FETCH c1 into c_ename, c_sal;--赋值
dbms_output.put_line(c_ename || ';' || c_sal);
end loop;
CLOSE c1;--关闭光标
end;
查看游标的属性show parameters cursor--需要时管理员用户才能查看。
范例:给懂事长(PRESIDENT)工资加1000,总经理(MANAGER)工资加800,其它加400。
set serveroutput on;
declare
cursor c1 is SELECT ename,sal, empno, job from emp;--定义光标
c_ename emp.ename% TYPE;
c_sal emp.sal% TYPE;
c_empno emp.empno% TYPE;
c_job emp.job% TYPE;
begin
OPEN c1;--打开光标
loop
EXIT when c1%notfound;
FETCH c1 into c_ename, c_sal, c_empno, c_job;
if c_job='PRESIDENT' then
c_sal:=c_sal+1000;
ELSIF c_job='MANAGER' then
c_sal:= c_sal+800;
else
c_sal:= c_sal+400;
end if;
dbms_output.put_line(c_ename || ';' || c_sal || ',' || c_empno || ',' || c_job);
end loop;
CLOSE c1;--关闭光标
end;