cursor重要实例应用

cursor 应用:------
create or replace procedure proc_update_wce
--1
( v_adate8 nvarchar2 ) as
--2

 cursor c(c_adate8 attendance.adate8%type) is
 select e.emp_id,a.card_num,a.adate8,a.atime4,a.door,m.in_out
 from employee e,attendance a,atten_machine m
 where e.card_number = a.card_num
 and a.door = m.ma_id
 and a.adate8 = c_adate8
 order by e.emp_id,adate8,atime4;
--3
 v c%ROWTYPE;
begin
    --4     
     open c(v_adate8);
     loop
    --5
         fetch c into v;
   
         exit when c%notfound;

         update work_calen_emp w
         set in_time = v.atime4,
         door_in = v.door
         where w.emp_id = v.emp_id
         and w.bmouth || w.bday = v_adate8
         and v.in_out = 1;
        
         update work_calen_emp w
         set out_time = v.atime4,
         door_out = v.door
         where w.emp_id = v.emp_id
         and w.bmouth || w.bday = v_adate8
         and v.in_out = 2;
 --6
     end loop;
     close c;   
end;

 动态cursor 实例应用:---

 DECLARE
 
    TYPE emp_cur IS REF CURSOR
   
    RETURN emp%ROWTYPE;
 
    empObj emp_cur;
 
    empRecord emp%ROWTYPE;
 
  BEGIN
 
    OPEN empObj FOR
   
      SELECT * FROM emp;
 
    loop
   
      FETCH empObj
        INTO empRecord;
   
      exit when empObj%notfound;
   
      dbms_output.put_line(empRecord.ename);
   
    end loop;
 
    CLOSE empObj;
 
  END;

 

---------动态表名

--用动态sql写
declare
  table_name    varchar(10);
  sql_statement varchar2(1024) beginselect tname into table_name from T1;
  sql_statement := 'select source from ' || table_name;
  execute immediate sql_statement;
end;

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值