zoukankan      html  css  js  c++  java
  • Oracle游标示例

    -- 声明游标;CURSOR cursor_name IS select_statement
    
    --For 循环游标
    --(1)定义游标
    --(2)定义游标变量
    --(3)使用for循环来使用这个游标
    declare
           --类型定义
           cursor c_job
           is
           select empno,ename,job,sal
           from emp
           where job='MANAGER';
           --定义一个游标变量v_cinfo c_emp%ROWTYPE ,该类型为游标c_emp中的一行数据类型
           c_row c_job%rowtype;
    begin
           for c_row in c_job loop
             dbms_output.put_line(c_row.empno||'-'||c_row.ename||'-'||c_row.job||'-'||c_row.sal);
           end loop;
    end;

    实际工作中的例子:

    declare 
           v_temp NUMBER;           --定义变量
           v_part_id VARCHAR2(20);  --定义变量
           cursor c_job            --定义游标
           is
           SELECT DEPT_ID,DEPT_CODE,DEPT_TYPE 
           from PUB_DEPART_INFO
           ORDER BY DEPT_ID;
           c_row c_job%rowtype;     --定义变量c_row,类型为游标c_job中的一行数据
    begin
           open c_job;              --打开游标
             
             loop                            --开始循环
               fetch c_job into c_row;      --读取一行数据
               exit when c_job%notfound;    --数据为空时退出(即:循环完成时)
                  if c_row.DEPT_CODE is NULL then   --字段数据的调用方式c_row.DEPT_CODE,其中DEPT_CODE为数据库中的列名
                     IF c_row.DEPT_TYPE = 1 then
                          v_temp := 0;
                          select Max(DEPT_CODE)+1 into v_part_id from  PUB_DEPART_INFO WHERE DEPT_TYPE = '1';
                                            
                          update PUB_DEPART_INFO set DEPT_CODE = v_part_id
                          where DEPT_ID = c_row.DEPT_ID;
    
                      ELSE
                          v_temp := v_temp + 1;
                          IF v_temp < 10 THEN
                               update PUB_DEPART_INFO set DEPT_CODE = (v_part_id || '0000' || v_temp)
                               where DEPT_ID = c_row.DEPT_ID;
                          ELSE
                               update PUB_DEPART_INFO set DEPT_CODE = (v_part_id || '000' || v_temp)
                               where DEPT_ID = c_row.DEPT_ID;
                          END IF;
                       END IF;
                  end if;
             end loop;                      --结束循环
          close c_job;                       --关闭游标
    end;
  • 相关阅读:
    Evanyou Blog 彩带
    Evanyou Blog 彩带
    Evanyou Blog 彩带
    Evanyou Blog 彩带
    Evanyou Blog 彩带
    Evanyou Blog 彩带
    Evanyou Blog 彩带
    Evanyou Blog 彩带
    数论12——浅谈指数与对数
    数论11——大组合数
  • 原文地址:https://www.cnblogs.com/zhangpengshou/p/4766409.html
Copyright © 2011-2022 走看看