您的位置:首页 > 数据库 > Oracle

oracle游标

2015-08-15 16:38 721 查看

DECLARE

-- 声明游标

CURSOR mycur IS SELECT * FROM emp;

empInfo emp%ROWTYPE;

cou NUMBER;

BEGIN

-- 游标操作使用循环,但是在操作之前必须先将游标打开

FOR empInfo IN mycur LOOP

cou := mycur%ROWCOUNT;

DBMS_OUTPUT.put_line(cou || '雇员编号:' || empInfo.empno);

DBMS_OUTPUT.put_line(cou || '雇员姓名:' || empInfo.ename);

END LOOP;

END;

ROWTYPE 类型,此类型表示可以把一行的数据都装进来。

emp%ROWTYPE;标示把emp一行的数据都装进来







DECLARE

-- 声明游标

CURSOR mycur IS

SELECT * FROM emp; -- List (EmpPo)

empInfo emp%ROWTYPE;

BEGIN

-- 游标操作使用循环,但是在操作之前必须先将游标打开

OPEN mycur;

-- 使游标向下一行

FETCH mycur INTO empInfo;

-- 判断此行是否有数据被发现 mycur%FOUND相当于resultset.hasNext() 判断是否有下一个

WHILE (mycur%FOUND) LOOP

DBMS_OUTPUT.put_line('雇员编号:' || empInfo.empno);

DBMS_OUTPUT.put_line('雇员姓名:' || empInfo.ename);

-- 修改游标,继续向下

FETCH mycur INTO empInfo;----相当于result.next()

END LOOP;

END;







===========================================



也可以使用另外一种方式循环游标:LOOP…END LOOP;

DECLARE

-- 声明游标

CURSOR mycur IS SELECT * FROM emp ;

empInfo emp%ROWTYPE ;

BEGIN

-- 游标操作使用循环,但是在操作之前必须先将游标打开

OPEN mycur ;

LOOP

-- 使游标向下一行

FETCH mycur INTO empInfo ;

EXIT WHEN mycur%NOTFOUND ;

DBMS_OUTPUT.put_line('雇员编号:'||empInfo.empno) ;

DBMS_OUTPUT.put_line('雇员姓名:'||empInfo.ename) ;

END LOOP ;

END ;

/

注意 1:

在打开游标之前最好先判断游标是否已经是打开的。

通过 ISOPEN 判断,格式:游标%ISOPEN

IF mycur%ISOPEN THEN

null ;

ELSE

OPEN mycur ;

END IF ;

注意 2:

可以使用 ROWCOUNT 对游标所操作的行数进行记录。

DECLARE

-- 声明游标

CURSOR mycur IS SELECT * FROM emp ;

empInfo emp%ROWTYPE ;

cou NUMBER ;

BEGIN

-- 游标操作使用循环,但是在操作之前必须先将游标打开

IF mycur%ISOPEN THEN

null ;

ELSE

OPEN mycur ;

END IF ;

LOOP

-- 使游标向下一行

FETCH mycur INTO empInfo ;

EXIT WHEN mycur%NOTFOUND ;

cou := mycur%ROWCOUNT ;

DBMS_OUTPUT.put_line(cou||'雇员编号:'||empInfo.empno) ;

DBMS_OUTPUT.put_line(cou||'雇员姓名:'||empInfo.ename) ;

END LOOP ;

END ;







一次性上涨全部雇员的工资。根据它所在的部门涨工资,规则:

• 10 部门上涨 10%

• 20 部门上涨 20%

• 30 部门上涨 30%

所有部门的上涨工资,最不能超过 5000,如果超过 5000,则工资就为 5000。

declare

cursor mycur is select * from emp;

empInfo emp%rowtype;

s emp.sal%type;

begin

for empInfo in mycur loop

if empInfo.deptno = 10 then

s := empInfo.sal*1.1;

elsif empInfo.deptno = 20 then

s := empInfo.sal*1.2;

elsif empInfo.deptno = 30 then

s := empInfo.sal* 1.3;

end if;

if s > 5000 then

s := 5000;

end if;

update emp set sal = s where empno = empInfo.empno;

end loop;

end;



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: