oracle中的几种循环

   1,简单的循环
     以loop关键字开始,exit when子句确定何时推出循环,end loop子句为循环结束标志。
     declare
      pi       constant NUMBER(9,7) :=3.1415727
      radius   INTEGER(5);
      area     NUMBER(14,2);
     begin
      radius:=3;
      loop
       area:=pi*power(radius,2);
        insert into AREAS values (radius,area);
       radius:=radius+1;
       exit when area >100;
      end loop;
     end;
     
   2,简单的游标循环
    %FOUND       可在游标中取一个记录
    %NOTFOUND    不能从游标中再取一个记录
    %ISOPEN      游标已经打开
    %ROWCOUNT       迄今为止从游标中取出的行数
    
    exit when rad_cursor%NOTFOUND;/*如果游标中取不到值则推出循环*/ 
    
   3,FOR循环
    for循环是指循环次数已经指定的循环
     declare
      pi       constant NUMBER(9,7) :=3.1415727
      radius   INTEGER(5);
      area     NUMBER(14,2);
     begin
      for radius in 1..7 loop
         area:=pi*power(radius,2);
        insert into AREAS values (radius,area);
      end loop;
     end;    
  
   4,游标For循环
     declare
      pi       constant NUMBER(9,7) :=3.1415727
      area     NUMBER(14,2);
      cursor rad_cursor is
          select * from RADIUS_VAS;
          
     begin  
      for rad_val in rad_cursor
       loop
         area:=pi*power(rad_val.radius,2);
        insert into AREAS values (rad_val.radius,area);
       end loop;
     end;
  5,WHILE循环
     declare
      pi       constant NUMBER(9,7) :=3.1415727
      radius   INTEGER(5);
      area     NUMBER(14,2);
     begin
      radius:=3;
      while radius<=7
      loop
         area:=pi*power(radius,2);
        insert into AREAS values (radius,area);
         radius:=radius+1;
      end loop;
     end;       
---------------------------------------------------------------------------------------------------
CASE语句
     declare
      pi       constant NUMBER(9,7) :=3.1415727
      area     NUMBER(14,2);
      cursor rad_cursor is
        select * from RADIUS_VALS;
      rad_val rad_cursor%ROWTYPE;
      
     begin
      open rad_cursor;
      loop
        fetch rad_cursor into rad_val;
        exit wehn rad_cursor%NOTFOUND;
         area:=pi*power(rad_val.radius,2);
         case
          when rad_val.Radius=3 then insert into AREAS values (rad_val.radius,area);
         when rad_val.Radius=4 then insert into AREAS values (rad_val.radius,area);
         when rad_val.Radius=10 then insert into AREAS values (0,0);
         else raise CASE_NOT_FOUND;
        end case;
      end loop;
     end; 
---------------------------------------------------------------------------------------------------
exception异常:
  exception
    when ZERO_DIVIDE
     then insert into AREAS values(0,0);
  当PL/SQL块产生一个错误时,它会扫描定义的异常处理过程。 ZERO_DIVIDE是一个系统定义的异常。
  可以用when other子句处理在异常处理部分未定义过的异常。 
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Oracle数据库,常见的几种执行计划包括全表扫描、索引扫描、索引范围扫描和连接(Join)操作等。它们的区别如下: 1. 全表扫描(Full Table Scan): 全表扫描是指对整个表进行顺序读取,适用于需要读取大部分或全部数据的情况。它会遍历整个表,并将相关数据读入内存进行处理。全表扫描适用于数据量较小或查询条件无法使用索引的情况。 2. 索引扫描(Index Scan): 索引扫描是通过使用索引来定位符合查询条件的数据。它会使用B树或位图索引来快速定位所需的数据块,然后读取相应的数据。索引扫描适用于查询条件与索引列匹配的情况,能够快速定位所需的数据。 3. 索引范围扫描(Index Range Scan): 索引范围扫描是在索引扫描的基础上,根据查询条件的范围进行进一步的筛选。它可以通过索引的有序性,有效地定位满足范围条件的数据块,并读取相应的数据。索引范围扫描适用于查询条件涉及范围查询(如BETWEEN、大于或小于等)的情况。 4. 连接操作(Join): 连接操作是在多个表之间根据关联条件进行数据匹配和合并。它可以通过嵌套循环连接、哈希连接或合并连接等方式来执行。连接操作通常需要使用索引来加快匹配过程,以避免全表扫描。 这些不同的执行计划适用于不同的查询条件和数据访问方式。Oracle优化器会根据查询语句、表结构和统计信息等因素,选择最合适的执行计划来执行查询操作。理解不同执行计划的特点及其适用场景,可以帮助优化查询性能和提高数据库的响应速度。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值