Oracle的PL/SQL编程前奏之基础技能实战一(匿名子程序)
生活随笔
收集整理的這篇文章主要介紹了
Oracle的PL/SQL编程前奏之基础技能实战一(匿名子程序)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Oracle的PL/SQL編程之基礎技能實戰一????
一>基礎代碼檢查檢查以bm_開頭的系統初始化編碼表是否有空值。與業務系統相關的編碼項不能存在空值,會導致系統業務無法辦理。為初始化數據表、在做測試數據和正式上線前檢查。上線運行后、仍存在空值表、需要進行核實、可能存在不經常辦理的業務。也可能是冗余表。
PL/SQL代碼塊:
declare
v_table_name?????varchar(40);
v_sql_str????????varchar(4000):='?';
v_cnt????????????smallint:=0?;
v_jgbm???????????varchar(10):='01%';
cursor?tmp_cur?is?select?table_name??from?user_tables
where?table_name?like?'BM_%'?;
begin
open?tmp_cur?;
loopfetch??tmp_cur?into?v_table_name?;exit?when?tmp_cur%notfound;select?count(*)?into?v_cnt?from?user_tab_columnswhere?table_name=v_table_name?and?column_name='JGBM';if?v_cnt<>0?thenv_sql_str:='select?count(*)?from?'||v_table_name||'?where?jgbm='''||v_jgbm||'''';elsev_sql_str:='select?count(*)?from?'||v_table_name;end?if;execute?immediate?v_sql_str?into?v_cnt;if?v_cnt=0?theninsert?into?tmp_hfsc_sy40_chk(ywms)?values(v_table_name||'表記錄為空');end?if;commit;
end?loop;
close?tmp_cur;
end;二>財務業務核對
業務關于資金的結算都是自動生成憑證,財務和業務應是保持一致的。如存在特殊業務可能會有不平衡的情況。如果有人調整數據也會造成不平。主要檢查?歸集余額、單位未分配金額、貸款余額、逾期貸款、業務流水金額和財務憑證金額是否相等。直接影響到系統的報表業務和財務的一致性。
PL/SQL代碼塊:
declare?v_fpzd?smallint;v_ztbh?number(20);v_cwnd?smallint;v_kmye?number(18,2);v_gjye?number(18,2);v_jgbm?varchar(10):='01%';v_msg??varchar(100);v_ret??smallint:=0;
beginselect?nvl(max(value1),0)?into?v_fpzd?from?bm_xtcs?where?bm1=v_jgbm?and?bm2='0301'?and?bm3='03010903'?and?bm='04'?and?sfqy=1;for?a?in(select?id?from?cw_ztml?where?ztxz='01'?and?jgbm=v_jgbm)?loopselect?max(nd)?into?v_cwnd?from?cw_nd?where?ztbh=a.id;select?nvl(sum(nce+ljdf-ljjf),0)?into?v_kmye?from?cw_kmbh?where?kmbh='201'?and?ztbh=a.id?and?nd=v_cwnd;select?v_kmye+nvl(sum(fl.dffse-fl.jffse),0)?into?v_kmye?from?cw_pz_fl?fl?inner?join?cw_pz_ml?b?on?fl.pzid=b.pzid?where?kmbh?like?'201%'?and?b.ztbh=a.id?and?b.nd=v_cwnd?and?b.zfbz=0;if?v_fpzd<>0?thenselect?nvl(sum(dwzhye),0)?into?v_gjye?from?gjzf_dw_zz?where?jgbm=v_jgbm;elseselect?nvl(sum(zckye+dwzhye),0)?into?v_gjye?from?gjzf_dw_zz?where?jgbm=v_jgbm;end?if;if?v_kmye<>v_gjye?theninsert?into?tmp_hfsc_sy40_chk(ywms)?values(to_char(a.id)||'賬套'||'201科目余額與業務歸集余額不一致');end?if;commit;end?loop;
end;三>跟新im_zhsz_dw中的yhmc使得同一銀行賬號和grdk_xm_zhlr中的skyhmc相等.
declarev_yhmc???varchar2(40)?:=?'?';v_skyhzh?varchar2(50)?:=?'?';v_count??number(20):=0;cursor?tmp_cur?isselect?distinct?a.yhmc,b.skyhmc,?b.skyhzhfrom?im_zhsz_dw?ainner?join?grdk_xm_zhlr?bon?a.yhzhhm?=?b.skyhzhand?a.yhmc=b.skyhmc;
beginopen?tmp_cur;loopfetch?tmp_curinto?v_yhmc,?v_skyhzh;exit?when?tmp_cur%notfound;update?im_zhsz_dw?aset?a.yhmc?=?v_yhmcwhere?a.yhzhhm?=?v_skyhzhand?a.yhmc?<>?v_yhmc;v_count:=v_count+1;end?loop;close?tmp_cur;dbms_output.put_line('一共更新了'||v_count||'行');
end;
總結:PL/SQL編程解決問題的一般步驟:
? ? ? 1>創建存儲空間表,要定義哪些字段以及類型以及約束;
? ? ? 2>如果這些表里面沒有數據,要向這些表里面準備數據;
???? ?3>理清業務邏輯,操作這些表里面的數據邏輯;
? ? ? 4>獲得結果數據;
轉載于:https://blog.51cto.com/11218855/2353943
總結
以上是生活随笔為你收集整理的Oracle的PL/SQL编程前奏之基础技能实战一(匿名子程序)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Flask 教程 第十六章:全文搜索
- 下一篇: java8 - 新的时间日期API示例