Oracle游标 隐视游标、显示游标

游标

1. 游标的属性(重点----记)

%FOUND             SQL语句影响一行或者多行的时候为true;

%NOTFOUND          SQL语句没有影响到任何一行的时候为true(常用)

%ROWCOUNT SQL语句影响的行(返回为数字,数字是几就返回几)

%ISOPEN 游标是否打开始终,为false(游标一结束就自动关闭,要是想测试,可以试试在触发器中测试)

 

2. 静态游标

静态游标是指结果集已经确定(静态定义)的游标

静态游标分:隐视游标和显示游标

 

2.1隐视游标

在PL\SQL中隐视游标在执行MDL  SQL(Insert/Delete/Update/Select)时自动创建、自动声明、打开和关闭。其名SQL(注:所有隐视游标名都叫SQL)

 

使用游标的属性:

BEGIN
UPDATE EMP SET SAL = 900 WHERE EMPNO = 7369;
IF SQL%FOUND THEN
DBMS_OUTPUT.PUT_LINE(‘存在’);
END IF;
END;

 

提示:

在java中,如对表进行增删改操作(没有查询因为查询不会有多少行受影响提示),结果会返回n,表示多少行在数据库中收影响。

我们通过 n>0 and n=0 来判断SQL代码是否执行成功

这个n即是%ROWCOUNT属性。

 

2.2显示游标

显示游标用于处理SELECT时返回多行的查询

·增删改不会使用显示游标

显示游标需要手动去做:声明、打开、提取、关闭操作;

演示:

·显示游标操作

DECLARE 
CURSOR  C_SAL  IS  - - 声明游标
SELECT SALFROM EMP WHERE EMPNO = 7369;
MY_SAL  EMP.SAL%TYPE;  - - 声明变量(有用接收游标中的数据)
BEGIN
OPEN    C_SAL;  - - 打开游标
FETCH   C_SAL  INTO  MY_SAL; - - 提取游标(将游标中的值提取出来,要对应上面游标接收的列)
DBMS_OUTPUT.PUT_LINE(MY_SAL); - - 打印输出
CLOSE  C_SAL;  - - 关闭游标
END;

 

·带参的游标

DECLARE
CURSOR C_NAME(DOM NUMBER) IS   - - 声明游标
SELECT * FROM EMP WHERE EMPNO = DOM;
MY_ROWS EMP%ROWTYPE;      - - 声明变量
BEGIN
OPEN (‘&请输入你要查询的部门’);   - - 打开游标
LOOP
FETCH C_NAME INTO MY_ROWS;     - - 将游标中的值赋给表里
EXIT LOOP C_NAME%NOTFOUND;           --如果都没没数据了就退出循环
DBMS_OUTPUT.PUT_LINE(MY_ROWS.ENAME ||’   ’||MY_ROWS.EMPNO ......);
END LOOP;
CLOSE C_NAME;
END;

 

FOR IN循环游标

作用:简化游标代码处理(可以省略、打开、提取、关闭)

基本语法:

FOR  I  IN  (游标名)  LOOP

........

END LOOP;

 

实例:

DECLARE
CURSOR  C_NAME IS
SELECT * FROM  EMP ;
BEGIN
FOR  I  IN C_NAME LOOP
DBMS_OUTPUT.PUT_LINE(I.ENAME||’   ‘||I.EMPNO);
END LOOP;
END;

注释:和foreach一样 , I 为行的类型(%rowtype)自动打开、提取、关闭--新手推荐多用loop循环免的忘记、打开、提取、关闭

 

带参的for In循环游标

DECLARE
CURSOR C_NAME(DOM NUMBER) IS
SELECT * FROM EMP
BEGIN
FOR I IN C_NAME(‘&请输入你要查询的部门编号’)  LOOP
DBMS_OUTPUT.PUT_LINE(I.ENAME||’   ’||I.EMPNO);
END LOOP;
END;

 

嵌套游标

DECLARE
CURSOR C_DEMPNO IS
SELECT DEPTNO FROM DEPT;
YM_DEPTNO DEPT.DEPTNO%TYPE;
BEGIN
OPEN C_DEMPNO;
LOOP
FETCH C_DEMPNO INTO YM_DEPTNO
END LOOP;
END;

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值