Oracle显式游标小例子

 转:http://blog.csdn.net/woshisap/article/details/7039935

    1:游标实例,显示出姓名和部门

    DECLARE

         name VARCHAR2(50);

         department_name varchar(20);   --定义两个变量来存放employees表和departments表中的内容

         CURSOR emp_cur IS   --定义游标emp_cur

                  SELECT name, department_name

                  FROM employees e, departments d

                  WHERE e.department_id = d.department_id;   --选出所有员工的姓名和所在部门

         BEGIN

               OPEN emp_cur;    --打开游标

               LOOP

                      FETCH  emp_cur INTO name, department_name;   --每次将一行数据放入到变量中,游标后移

                      EXIT  WHEN emp_cur%NOTFOUND;   --当游标取不到数据时退出循环

                      dbms_output.put_line(name || ' 在 ' || department_name);   --输出姓名和所在部门

              END LOOP;

              CLOSE emp_cur;

      END;


    2:第二个例子,

       公司上市,决定给员工提高薪资,入职时间没超过1年涨100,1000元封顶

       DECLARE

          hire_date DATE;      --定义2个变量存放employee表中的内容

          e_id  NUMBER;

          CURSOR emp_cur IS       --定义游标emp_cur

              SELECT id, hire_date

               FROM employees;        --选出所有员工的姓名和入职时间

           BEGIN

                OPEN emp_cur;    --打开游标

               LOOP

                    FETCH emp_cur INTO e_id, hire_date;    --每次将一行数据存入变量中,游标后移

                    EXIT WHEN emp_cur % NOTFOUND;

                    IF 100*(2010 - to_char(hire_date, 'yyyy')) < 1000 THEN      --判断年限和工资的关系

                       UPDATE salary

                        SET salaryvalue = salaryvalue + 100*(2010 - to_char(hire_date, 'yyyy'))

                        WHERE employeeid = e_id;

                   ELSE

                        UPDATE salary

                        SET salaryvalue = salaryvalue + 1000;

                        WHERE employeeid = e_id;

                    END IF;

                  END LOOP;

          END;

    3:使用循环游标简化游标的读取

        语法:

             FOR  <类型>  IN  <游标名>  LOOP

             --操作各行数据

            END LOOP;

          例子:

         DECLARE 

               TYPE  employee_record IS  RECORD    --定义一个RECORD类型的变量,里面包含name和department_name两个变量

                 (

                      name VARCHAR2(50),

                      department_name varchar(20)

                 );

                 CURSOR  emp_cur IS 

                          SELECT name, department_name

                         FROM employee e, departments d

                         WHERE e.department_id = d.department_id;

                BEGIN

                     FOR  employee_record IN emp_cur LOOP

                     dbms_output.put_line

                         (employee_record.name || ' 在 ' || employee_record.department_name);

                     END LOOP;

                END;

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值