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;

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐