Oracle 中游标的使用方法练习(自我心得)

 

游标是一个内存工作区,将数据库中读取的东西放入缓存中,不需要反复读取数据库。

我的emp表


1、显示游标 用户自己定义一个显示游标,通过与游标有关的语句进行处理,返回结果为多行多列的select语句。

显示游标分为4个部分:
1、声明游标 DECLEAR部分
2、打卡游标 BEGIN 定义部分
3、提取游标 FETCH 游标名 INTO 变量名
4、关闭游标 CLOSE

declare --定义部分,创建变量常量游标以及异常等
avg_sal number(7,2);
begin  --执行部分,sql流程控制语句
select avg(t.薪水) into avg_sal from VIEW_2 t;
--select * into avg_sal from EMP2 t;没有数据报错
dbms_output.put_line('Oracle Hello World!');
dbms_output.put_line('程序员的平均工资为:'||avg_sal);
exception --例外处理部分——处理运行的各种错误
WHEN NO_DATA_FOUND Then
  dbms_output.put_line('未查找到任何行!');
End;

FOR I IN 1..3 LOOP

//定义一个循环下面还可以引用I

END LOOP;


如果我想实现,将学生成绩表中分类,用游标统计选修表SC中分数段在0~59、60~79、80~89、90~100各个区间中人数及人名。那我应该怎么做呢?

   DECLARE  
      CURSOR emp_cursor IS    
      SELECT SNO,sname FROM cs where grade>=90;   
    BEGIN  
        DBMS_OUTPUT.PUT_LINE('上了90分的人有:');
    FOR CS_record IN emp_cursor LOOP      
        DBMS_OUTPUT.PUT_LINE(CS_record.SNO|| CS_record.Sname);   
        END LOOP;   
        END;  

这里是将分数大于90的人取出放入缓冲区内,***——record是隐含定义的记录变量,即内置函数。

若要达到上面的效果,则是要将所有数据取到缓冲区内然后进行筛选分类输出。


  DECLARE  
      CURSOR emp_cursor IS    
      SELECT SNO,SNAME,GRADE FROM cs;   
    BEGIN  
    FOR CS_record IN emp_cursor LOOP 
      IF  CS_RECORD.GRADE>=90 THEN   
        DBMS_OUTPUT.PUT_LINE('90分以上的人'||CS_record.SNO|| CS_record.Sname);   
        ELSIF  CS_RECORD.GRADE>=80 AND CS_RECORD.GRADE<90 THEN
          DBMS_OUTPUT.PUT_LINE('80-90的人'||CS_record.SNO|| CS_record.Sname);
          ELSIF CS_RECORD.GRADE>=70 AND CS_RECORD.GRADE<80 THEN
             DBMS_OUTPUT.PUT_LINE('70-80的人'||CS_record.SNO|| CS_record.Sname);
          ELSIF CS_RECORD.GRADE>=60 AND CS_RECORD.GRADE<70 THEN
             DBMS_OUTPUT.PUT_LINE('60-70的人'||CS_record.SNO|| CS_record.Sname);
          ELSE  DBMS_OUTPUT.PUT_LINE('60分以下的人'||CS_record.SNO|| CS_record.Sname);
        END IF;
        END LOOP;   
        END;  


2、隐式游标 一次只能读取一行数据,如select 系统自动完成

如DML操作,和单行select语句,隐式游标可以通过游标的属性来了解当前操作的结果。
访问:通过名字sql来访问,每次只能访问前面的一个操作游标属性。
SQL%ROWCOUNT 返回成功执行的数据行数
SQL%FOUND 操作是否成功
SQL%NOTFOUND 与上面的相反

SQL%ISOPEN 判断sql语句是否结束,正在执行为true,结束为false


BEGIN  
             UPDATE emp SET sage=sage+100 WHERE e#=1234;   
            IF SQL%FOUND THEN    --隐式游标可以通过游标的属性来了解当前操作的结果。
            DBMS_OUTPUT.PUT_LINE('成功修改雇员工资!');   
            COMMIT;    
            ELSE  
            DBMS_OUTPUT.PUT_LINE('修改雇员工资失败!');   
             END IF;    
            END;  



子程序


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
游标是一种用于在数据库处理查询结果集的数据结构。在Oracle,可以使用游标在存储过程处理查询结果。引用\[1\]的代码是一个示例,展示了如何在Oracle存储过程使用游标。在这个示例,存储过程selectStudent接受一个输入参数v_id,并返回两个输出参数v_result和v_list。存储过程的v_list是一个SYS_REFCURSOR类型的游标,用于存储查询结果。通过调用存储过程时,可以设置输入参数的值,并注册输出参数的类型。然后,执行存储过程,并通过getInt方法获取输出参数v_result的值。最后,通过getObject方法获取游标v_list,并遍历结果集进行操作。引用\[2\]的代码展示了如何通过连接调用Oracle存储过程,并获取存储过程的输出结果。在这个示例使用CallableStatement对象调用存储过程selectStudent,并设置输入参数和注册输出参数的类型。然后,执行存储过程,并通过getInt方法获取输出参数的值,通过getObject方法获取游标,并遍历结果集进行操作。引用\[3\]的代码展示了一个数据库操作工具类JdbcUtil,用于获取数据库连接。这个工具类可以在Java程序使用,以便连接到Oracle数据库并执行相应的操作。 #### 引用[.reference_title] - *1* *2* *3* [Java调用Oracle存储过程,以及Oracle游标使用](https://blog.csdn.net/it_boy_elite/article/details/77711682)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值