oracle---游标使用


--案例一通过游标处理多个返回集
DECLARE
  --定义游标
  CURSOR cursor_polno is
  select contno,polno,appflag,riskcode from lcpol where contno='886814401718';
  t_contno lcpol.contno%type;
  t_polno lcpol.polno%type;
  t_appflag lcpol.appflag%type;
  t_riskcode lcpol.riskcode%type;
begin 
  --打开游标
  open cursor_polno;
  --提取数据
  loop 
    fetch cursor_polno into t_contno,t_polno,t_appflag,t_riskcode;
    exit when cursor_polno%NOTFOUND;
    update lcpol a set a.appflag='1',a.operator='VSB2101737',modifydate=trunc(sysdate)
    where a.polno=t_polno and contno=t_contno and riskcode=t_riskcode;    
  end loop;
  close cursor_polno;
  commit;
end;  




--案例二:通过游标处理不同的结果集
alter session set nls_date_format ='YYYY-MM-DD';
DECLARE
  CURSOR cursor_a1 is
  select contno,edorno,edorvalidate from lpedoritem where edoracceptno = '6120210219017342';
  t_contno lcpol.contno%type;
  t_edorno lppol.edorno%type;
  t_edorvalidate lpedoritem.edorvalidate%type;
begin
  open cursor_a1;
  loop
    fetch cursor_a1 into t_contno,t_edorno,t_edorvalidate;
    exit when cursor_a1%NOTFOUND;
    if trim(t_contno)='130330003783095' THEN 
      UPDATE lcpol  a  SET cvalidate = date'2020-04-01',signdate = date'2020-04-01',firstpaydate =date'2020-04-01',paytodate = date'2020-04-01',
      operator='VSB2103517',MODIFYDATE=to_date(SYSDATE, 'YYYY-MM-DD'), modifytime   = to_char(SYSDATE, 'HH24:MI:SS')
      WHERE contno =t_contno;
      UPDATE LPPOL  a  SET cvalidate = date'2020-04-01',signdate = date'2020-04-01',firstpaydate =date'2020-04-01',paytodate = date'2020-04-01',
      operator='VSB2103517',MODIFYDATE=to_date(SYSDATE, 'YYYY-MM-DD'), modifytime   = to_char(SYSDATE, 'HH24:MI:SS')
      WHERE contno =t_contno;
    elsIF trim(t_contno)='130330003783089' THEN 
      UPDATE lcpol  a  SET cvalidate = date'2020-04-04',signdate = date'2020-04-04',firstpaydate =date'2020-04-04',paytodate = date'2020-04-04',
      operator='VSB2103517',MODIFYDATE=to_date(SYSDATE, 'YYYY-MM-DD'), modifytime   = to_char(SYSDATE, 'HH24:MI:SS')
      WHERE contno =t_contno;
      UPDATE LPPOL  a  SET cvalidate = date'2020-04-04',signdate = date'2020-04-04',firstpaydate =date'2020-04-04',paytodate = date'2020-04-04',
      operator='VSB2103517',MODIFYDATE=to_date(SYSDATE, 'YYYY-MM-DD'), modifytime   = to_char(SYSDATE, 'HH24:MI:SS')
      WHERE contno =t_contno;
    elsIF trim(t_contno)='130330003783090' THEN 
      UPDATE lcpol  a  SET cvalidate = date'2020-12-07',signdate = date'2020-12-07',firstpaydate =date'2020-12-07',paytodate = date'2020-12-07',
      operator='VSB2103517',MODIFYDATE=to_date(SYSDATE, 'YYYY-MM-DD'), modifytime   = to_char(SYSDATE, 'HH24:MI:SS')
      WHERE contno =t_contno;
      UPDATE LPPOL  a  SET cvalidate = date'2020-12-07',signdate = date'2020-12-07',firstpaydate =date'2020-12-07',paytodate = date'2020-12-07',
      operator='VSB2103517',MODIFYDATE=to_date(SYSDATE, 'YYYY-MM-DD'), modifytime   = to_char(SYSDATE, 'HH24:MI:SS')
      WHERE contno =t_contno;
    ELSE 
      UPDATE lcpol  a  SET cvalidate = date'2020-01-01',signdate = date'2020-01-01',firstpaydate =date'2020-01-01',paytodate = date'2020-01-01',
      operator='VSB2103517',MODIFYDATE=to_date(SYSDATE, 'YYYY-MM-DD'), modifytime   = to_char(SYSDATE, 'HH24:MI:SS')
      WHERE contno =t_contno;
      UPDATE LPPOL  a  SET cvalidate = date'2020-01-01',signdate = date'2020-01-01',firstpaydate =date'2020-01-01',paytodate = date'2020-01-01',
      operator='VSB2103517',MODIFYDATE=to_date(SYSDATE, 'YYYY-MM-DD'), modifytime   = to_char(SYSDATE, 'HH24:MI:SS')
      WHERE contno =t_contno;
     end if;
  end loop;
  close cursor_a1;
  commit;
end;  
/



--案例三:通过for循环使用游标
alter session set nls_date_format ='YYYY-MM-DD';
DECLARE
  CURSOR cursor_a2 is
  select contno,edorno,edorvalidate from lpedoritem where edoracceptno = '6120210219017342';
begin
	for s_record in cursor_a2 loop
	if trim(s_record.contno)='130330003783095' THEN   
	  UPDATE lcpol  a  SET cvalidate = date'2020-04-01',signdate = date'2020-04-01',firstpaydate =date'2020-04-01',paytodate = date'2020-04-01',
      operator='VSB2103517',MODIFYDATE=to_date(SYSDATE, 'YYYY-MM-DD'), modifytime   = to_char(SYSDATE, 'HH24:MI:SS')
      WHERE contno =s_record.contno;
      UPDATE LPPOL  a  SET cvalidate = date'2020-04-01',signdate = date'2020-04-01',firstpaydate =date'2020-04-01',paytodate = date'2020-04-01',
      operator='VSB2103517',MODIFYDATE=to_date(SYSDATE, 'YYYY-MM-DD'), modifytime   = to_char(SYSDATE, 'HH24:MI:SS')
      WHERE contno =s_record.contno and edorno=s_record.edorno;
    elsIF trim(s_record.contno)='130330003783089' THEN 
      UPDATE lcpol  a  SET cvalidate = date'2020-04-04',signdate = date'2020-04-04',firstpaydate =date'2020-04-04',paytodate = date'2020-04-04',
      operator='VSB2103517',MODIFYDATE=to_date(SYSDATE, 'YYYY-MM-DD'), modifytime   = to_char(SYSDATE, 'HH24:MI:SS')
      WHERE contno =s_record.contno;
      UPDATE LPPOL  a  SET cvalidate = date'2020-04-04',signdate = date'2020-04-04',firstpaydate =date'2020-04-04',paytodate = date'2020-04-04',
      operator='VSB2103517',MODIFYDATE=to_date(SYSDATE, 'YYYY-MM-DD'), modifytime   = to_char(SYSDATE, 'HH24:MI:SS')
      WHERE contno =s_record.contno and edorno=s_record.edorno;
    elsIF trim(s_record.contno)='130330003783090' THEN 
      UPDATE lcpol  a  SET cvalidate = date'2020-12-07',signdate = date'2020-12-07',firstpaydate =date'2020-12-07',paytodate = date'2020-12-07',
      operator='VSB2103517',MODIFYDATE=to_date(SYSDATE, 'YYYY-MM-DD'), modifytime   = to_char(SYSDATE, 'HH24:MI:SS')
      WHERE contno =s_record.contno;
      UPDATE LPPOL  a  SET cvalidate = date'2020-12-07',signdate = date'2020-12-07',firstpaydate =date'2020-12-07',paytodate = date'2020-12-07',
      operator='VSB2103517',MODIFYDATE=to_date(SYSDATE, 'YYYY-MM-DD'), modifytime   = to_char(SYSDATE, 'HH24:MI:SS')
      WHERE contno =s_record.contno and edorno=s_record.edorno;
    ELSE 
      UPDATE lcpol  a  SET cvalidate = date'2020-01-01',signdate = date'2020-01-01',firstpaydate =date'2020-01-01',paytodate = date'2020-01-01',
      operator='VSB2103517',MODIFYDATE=to_date(SYSDATE, 'YYYY-MM-DD'), modifytime   = to_char(SYSDATE, 'HH24:MI:SS')
      WHERE contno =s_record.contno;
      UPDATE LPPOL  a  SET cvalidate = date'2020-01-01',signdate = date'2020-01-01',firstpaydate =date'2020-01-01',paytodate = date'2020-01-01',
      operator='VSB2103517',MODIFYDATE=to_date(SYSDATE, 'YYYY-MM-DD'), modifytime   = to_char(SYSDATE, 'HH24:MI:SS')
      WHERE contno =s_record.contno and edorno=s_record.edorno;
     end if;
  end loop
  commit;
end;
/


--案例四:通过for循环使用游标(使用子查询代替定义游标)
alter session set nls_date_format ='YYYY-MM-DD';
/* DECLARE
  CURSOR cursor_a2 is
  select contno,edorno,edorvalidate from lpedoritem where edoracceptno = '6120210219017342'; */
begin
	for s_record in (select contno,edorno,edorvalidate from lpedoritem where edoracceptno = '6120210219017342') loop
	if trim(s_record.contno)='130330003783095' THEN   
	  UPDATE lcpol  a  SET cvalidate = date'2020-04-01',signdate = date'2020-04-01',firstpaydate =date'2020-04-01',paytodate = date'2020-04-01',
      operator='VSB2103517',MODIFYDATE=to_date(SYSDATE, 'YYYY-MM-DD'), modifytime   = to_char(SYSDATE, 'HH24:MI:SS')
      WHERE contno =s_record.contno;
      UPDATE LPPOL  a  SET cvalidate = date'2020-04-01',signdate = date'2020-04-01',firstpaydate =date'2020-04-01',paytodate = date'2020-04-01',
      operator='VSB2103517',MODIFYDATE=to_date(SYSDATE, 'YYYY-MM-DD'), modifytime   = to_char(SYSDATE, 'HH24:MI:SS')
      WHERE contno =s_record.contno and edorno=s_record.edorno;
    elsIF trim(s_record.contno)='130330003783089' THEN 
      UPDATE lcpol  a  SET cvalidate = date'2020-04-04',signdate = date'2020-04-04',firstpaydate =date'2020-04-04',paytodate = date'2020-04-04',
      operator='VSB2103517',MODIFYDATE=to_date(SYSDATE, 'YYYY-MM-DD'), modifytime   = to_char(SYSDATE, 'HH24:MI:SS')
      WHERE contno =s_record.contno;
      UPDATE LPPOL  a  SET cvalidate = date'2020-04-04',signdate = date'2020-04-04',firstpaydate =date'2020-04-04',paytodate = date'2020-04-04',
      operator='VSB2103517',MODIFYDATE=to_date(SYSDATE, 'YYYY-MM-DD'), modifytime   = to_char(SYSDATE, 'HH24:MI:SS')
      WHERE contno =s_record.contno and edorno=s_record.edorno;
    elsIF trim(s_record.contno)='130330003783090' THEN 
      UPDATE lcpol  a  SET cvalidate = date'2020-12-07',signdate = date'2020-12-07',firstpaydate =date'2020-12-07',paytodate = date'2020-12-07',
      operator='VSB2103517',MODIFYDATE=to_date(SYSDATE, 'YYYY-MM-DD'), modifytime   = to_char(SYSDATE, 'HH24:MI:SS')
      WHERE contno =s_record.contno;
      UPDATE LPPOL  a  SET cvalidate = date'2020-12-07',signdate = date'2020-12-07',firstpaydate =date'2020-12-07',paytodate = date'2020-12-07',
      operator='VSB2103517',MODIFYDATE=to_date(SYSDATE, 'YYYY-MM-DD'), modifytime   = to_char(SYSDATE, 'HH24:MI:SS')
      WHERE contno =s_record.contno and edorno=s_record.edorno;
    ELSE 
      UPDATE lcpol  a  SET cvalidate = date'2020-01-01',signdate = date'2020-01-01',firstpaydate =date'2020-01-01',paytodate = date'2020-01-01',
      operator='VSB2103517',MODIFYDATE=to_date(SYSDATE, 'YYYY-MM-DD'), modifytime   = to_char(SYSDATE, 'HH24:MI:SS')
      WHERE contno =s_record.contno;
      UPDATE LPPOL  a  SET cvalidate = date'2020-01-01',signdate = date'2020-01-01',firstpaydate =date'2020-01-01',paytodate = date'2020-01-01',
      operator='VSB2103517',MODIFYDATE=to_date(SYSDATE, 'YYYY-MM-DD'), modifytime   = to_char(SYSDATE, 'HH24:MI:SS')
      WHERE contno =s_record.contno and edorno=s_record.edorno;
     end if;
  end loop
  commit;
end;
/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值