java怎么得到oracle的游标,oracle中游标

1. oracle游标

1) 游标简介

使用游标,我们可以对具体操作数据,比如查询的结果,对行,列数据进行更加细致的处理。以及对其他DML操作进行判断等操作。

2) 显示游标

SQL> set serverout on;

declare cursor cu_emp is select empno,ename,sal from emp;

e_no number;

e_name varchar2(10);

e_sal number;

begin

open cu_emp;

fetch cu_emp into e_no,e_name,e_sal;

while cu_emp%found loop

dbms_output.put_line('编号:'||e_no||',姓名:'||e_name||',基本薪资:'||e_sal);

fetch cu_emp into e_no,e_name,e_sal;

end loop;

close cu_emp;

end;

使用%type匹配类型

SQL> set serverout on;

declare cursor cu_emp is select empno,ename,sal from emp;

e_no emp.empno%type;

e_name emp.ename%type;

e_sal emp.sal%type;

begin

open cu_emp;

fetch cu_emp into e_no,e_name,e_sal;

while cu_emp%found loop

dbms_output.put_line('编号:'||e_no||',姓名:'||e_name||',基本薪资:'||e_sal);

fetch cu_emp into e_no,e_name,e_sal;

end loop;

close cu_emp;

end;

使用行,查询要使用*查询要使用*查询

SQL> set serverout on;

declare cursor cu_emp is select * from emp;

e emp%rowtype;

begin

open cu_emp;

fetch cu_emp into e;

while cu_emp%found loop

dbms_output.put_line('编号:'||e.empno||',姓名:'||e.ename||',基本薪资:'||e.sal);

fetch cu_emp into e;

end loop;

close cu_emp;

end;

带条件查询

SQL> set serverout on;

declare cursor cu_emp is select * from emp where sal>2000 and sal<3000;

e emp%rowtype;

begin

open cu_emp;

fetch cu_emp into e;

while cu_emp%found loop

dbms_output.put_line('编号:'||e.empno||',姓名:'||e.ename||',基本薪资:'||e.sal);

fetch cu_emp into e;

end loop;

close cu_emp;

end;

3) 隐式游标

隐式游标的属性 返回值类型 意义

SQL%ROWCOUNT 整型 代表DML语句成功执行的数据行数

SQL%FOUND 布尔型 值为true代表插入、删除、更新或单行查询操作成功

SQL%NOTFOUND 布尔型 与SQL%FOUND 属性返回值相反

SQL%ISOPEN 布尔型 DML执行过程中为真,结束后为假

SQL> begin

if sql%isopen then

dbms_output.put_line('sql游标已打开');

else

dbms_output.put_line('sql游标未打开');

end if;

end;

运行结果:

sql游标未打开

隐式游标rowcount属性

SQL> declare e_count number;

begin

select count(*) into e_count from emp;

dbms_output.put_line('游标捕获的记录数:'||sql%rowcount);

end;

运行结果:

1

使用rowcount判断是否更新

SQL> begin

update emp set ename='newname' where empno=111;

if sql%rowcount=1 then

dbms_output.put_line('已更新');

else

dbms_output.put_line('未更新');

end if;

end;

使用found判断是否更新

SQL> begin

update emp set ename='newname' where empno=111;

if sql%found then

dbms_output.put_line('已更新');

else

dbms_output.put_line('未更新');

end if;

end;

4) 动态游标

强类型动态游标

job='PRESIDENT'或者job='PRESIDENT1'

SQL> declare type emptype is ref cursor return emp%rowtype;

cu_emp emptype;

e_count number;

e emp%rowtype;

begin

select count(*) into e_count from emp where job='PRESIDENT1';

if e_count=0 then

open cu_emp for select * from emp;

else

open cu_emp for select * from emp where job='PRESIDENT';

end if;

fetch cu_emp into e;

while cu_emp%found loop

dbms_output.put_line('编号:'||e.empno||',姓名:'||e.ename||',基本薪资:'||e.sal);

fetch cu_emp into e;

end loop;

close cu_emp;

end;

弱类型动态游标

job='PRESIDENT'或者job='PRESIDENT1'

SQL> declare type customType is ref cursor;

e_count number;

e emp%rowtype;

s salgrade%rowType;

cType customType;

begin

select count(*) into e_count from emp where job='PRESIDENT1';

if e_count=0 then

open cType for select * from salgrade;

fetch cType into s;

while cType%found loop

dbms_output.put_line('等级:'||s.grade||',最低薪资:'||s.losal||',最高工资:'||s.hisal);

fetch cType into s;

end loop;

close cType;

else

open cType for select * from emp where job='PRESIDENT';

fetch cType into e;

while cType%found loop

dbms_output.put_line('编号:'||e.empno||',姓名:'||e.ename||',基本薪资:'||e.sal);

fetch cType into e;

end loop;

close cType;

end if;

end;

分享到:

sina.jpg

tec.jpg

2018-12-20 09:26

浏览 9

分类:数据库

评论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值