oracle pl/sql 程序块,游标,生成测试数据

pl/sql 程序块,在此做了一个小例子,所有的关键步骤都有注释,

有兴趣的读者,可以自行设计出更加灵活的程序

第一个小例子

declare
  -- Local variables here
   myemp rm_ftprate_res%ROWTYPE; --myemp 定义为表名为rm_ftprate_res的一行数据ROWTYPE
   cursor c_job   ---通过一定条件限定的表名为rm_ftprate_res的数据集。游标c_job可以操作这些数据
       is
       select *
       from rm_ftprate_res
       where rate_type = 0 and year_month = '2016-01' and pk_dept='1003F610000000002W63' and pk_coa='0001F610000000009B2I';
       s char(7); --s是表rm_ftprate_res第一列year_month
       d char(10); --d是表rm_ftprate_res第二列data_date
begin
  -- Test statements here
  for myemp in c_job loop
   s:=concat(substr(myemp.year_month,1,4),'-02'); --substr(myemp.year_month,1,4)取第一列的年,然后和-02结合生成二月份的数据
   d:=concat(concat(substr(myemp.data_date,1,4),'-02'),substr(myemp.data_date,8,10));--和s处理一样,多加了哪一天
   if myemp.data_date < '2016-01-30' then --前提是这张表里已经有了一月份的数据,为了防止循环超过2月29好,所以在这里做了判断
   ---select to_char(last_day(to_date('2016-02','yyyy-mm')),'dd') from dual;第三个例子有实现,可以获取某年某月的天数
   ---select add_months(to_date('2016-01-01','yyyy-mm-dd'),1) FROM dual;第三个例子有实现,多了这两个sql你可以自己写出更灵活的程序块
   insert into  rm_ftprate_res ---插入二月份的数据,利用dbms_random.value(0.1,0.9)生成 0.1到0.9之间的随机数,这两列是利率

values(s,d,'0001AA1000000002UUXN','1001AA10000000029WAX','0001F61000000000KN4O','0001AA1000000002UU5V',dbms_random.value(0.1,0.9),dbms_random.value(0.1,0.9),'0',null,null,null,null,null,'2016-09-18 09:15:53',0);---dbms_random.value(0.1,0.9) 0.1到0.9之间的随机数
  end if;
  end loop;
  commit;
end;


 第二个小例子

declare
  -- Local variables here
   myemp rm_ftprate_res%ROWTYPE;
    i integer;
       s char(7);
       d char(10);
begin
  -- Test statements here
  for i in 4..12 loop ---生成4月到12月的数据
    if i<10 then
   s:=concat(concat('2016','-0'),i);---10月之前多个0
   ELSE s:=concat(concat('2016','-'),i);
   END IF;
  
   insert into  rm_ftprate_res--生成月份数据时,天数列就不需要了

values(s,null,'0001AA1000000002UUXN','1001AA10000000029WAX','0001F61000000000KN4O','0001AA1000000002UU5V',dbms_random.value(0.1,0.9),dbms_random.value(0.1,0.9),'1',null,null,null,null,null,'2016-09-18 09:15:53',0);
 
  end loop;
  commit;
end;


第三个小例子

declare
  -- Local variables here
   myemp cfe_alm_res_pmt%ROWTYPE; --myemp 定义为表名为cfe_alm_res_pmt的一行数据ROWTYPE
   cursor c_job   ---通过一定条件限定的表名为cfe_alm_res_pmt的数据集。游标c_job可以操作这些数据
       is
       select * from cfe_alm_res_pmt where acct_no = '11043-1001-69300';
     s varchar2(100);
      AMORT_DATE char(10);
      AS_OF_DATE char(10);
begin
  -- Test statements here
  for myemp in c_job loop
    s:=concat('20',substr(myemp.acct_no,3,16));--修改11043-1001-69300为20043-1001-69300
 
 AMORT_DATE:=to_char(add_months(to_date(myemp.Pmt_dt,'yyyy-mm-dd'),-1),'yyyy-mm-dd');--日期减一个月
  AS_OF_DATE:=to_char(add_months(to_date(myemp.data_date,'yyyy-mm-dd'),-1),'yyyy-mm-dd');--日期减一个月

   insert into  LN_PAY_PLAN
   values(s,AMORT_DATE,myemp.prin_pmt,myemp.int_pmt,AS_OF_DATE,null,null);--其他值直接取
 
 
  end loop;
  commit;
end;


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值