資料庫預存程序模板

來源:互聯網
上載者:User

create or replace procedure SP_OM_(過程名應明顯表達程式功能)(IC_STAT_CYCLE in  varchar2,IC_CORP_HEAD in varchar2 default null) as
/***************************************************************************************************************
    版    本: v0.0.1
    功    能: (描述程式功能)
    前置條件:(填寫程式運行所依賴的前置程式)
    源    表:(填寫程式所需要使用到的源表)
    結果  表:(填寫程式產生的結果表名)
    邏輯描述: (描述程式實現邏輯)
    參數說明:IC_STAT_CYCLE :統計周期(月報為:YYYYMM;日報為:YYYYMMDD)
         IC_CORP_HEAD  : 分公司編碼(如:廣州為:GZ)
    運行頻率:每月
    建立資訊:(作者姓名 提交發版日期)
    修改日誌: [格式:修改內容  XXX(作者)  日期]
    日   志1:
    日   志2:
   
    //描述性注釋樣本
    功    能: 服務話務量(月報)
    前置條件:任務66003
    源    表:OM_SERV_TIME_MID_YYYYMM
    結果  表:OM_SERV_TIME_YYYYMM
    邏輯描述: 從中間表匯總服務話務量
    運行頻率:每月
    建立資訊:XXX 20110619
    //樣本結束
**************************************************************************************************************/
  --變數定義規範:遵循資料庫操作規範
  dataerror      EXCEPTION;     --自訂異常類型
   vc_error_code   varchar2(20);     --異常資訊代碼
   vc_error_text   varchar2(200);    --異常資訊
  
    vc_stat_cycle   varchar2(20); --統計周期
    vc_sql          varchar2(4000);--SQL變數,用以存放動態SQL
    vc_corp_id      varchar2(10); --分公司代碼,如:200(代表廣州)
    vc_corp_name    varchar2(30);  --分公司名稱,如:廣州
begin
 --判斷傳入的統計參數是否有誤
 if length(IC_STAT_CYCLE) <> (月報為6,日報為8) then
     raise DATAERROR;
  end if;

 dbms_output.put_line('直銷客戶概況(月報)開始!');
 
 vc_stat_cycle := substr(ic_stat_cycle,0,6);

 --IC_CORP_HEAD:在分公司使用者下可不用輸入,在odsc_cent下調,必須輸入。
  if IC_CORP_HEAD is null then
     select corp_id,corp_name into vc_corp_id,vc_corp_name from odsc_cent.rpt_param_config where upper(corp_head) = upper(substr(user,-2,2));
  else
     select corp_id,corp_name into vc_corp_id,vc_corp_name from odsc_cent.rpt_param_config where upper(corp_head) = upper(IC_CORP_HEAD);
  end if;
---------------------------------------主程式處理---------------------------------------------------------------------

  sp_write_log(vc_stat_cycle,'SP_OM_CCUST_SUMMARY','0','直銷客戶概況(月報)開始');

  if is_table_exists('OM_CCUST_SUMMARY_'||vc_stat_cycle) then
     execute immediate ' drop table OM_CCUST_SUMMARY_'||vc_stat_cycle;
  end if;

  vc_sql := 'create table OM_CCUST_SUMMARY_'||vc_stat_cycle||' as select * from OM_CCUST_SUMMARY_201012 where rownum<1';
 execute immediate vc_sql;
  commit;
  vc_sql := '
  insert into OM_CCUST_SUMMARY_'||vc_stat_cycle||'
       (ENT_ID,
        ENT_NBR,
        ENT_NAME,
        STAT_CYCLE,
        CITY_ID,
        cust_num,
        SERV_NUM,
        PSTN_NUM,
        ADSL_NUM,
        IPTV_NUM,
        CDMA_NUM,
        WXKD_NUM,
        PHS_NUM)
 select /*+parallel(t,5)*/ t.ccust_id ENT_ID,t.ccust_code ENT_NBR,t.ccust_name ENT_NAME,
        '||vc_stat_cycle||'01 STAT_CYCLE,
        '||vc_corp_id||' CITY_ID,count(distinct t.cust_id) as cust_num,
        count(distinct t.serv_id) SERV_NUM,
        count(distinct case when t.terminal_id=10 then t.serv_id end) PSTN_NUM,
        sum(case when prod_id in (48,52,57,51,47,950,56,1004) then 1 else 0 end) ADSL_NUM,
        sum(case when prod_id =1004   then 1 else 0 end) IPTV_NUM,
        count(distinct case when t.terminal_id=30 then t.serv_id end) CDMA_NUM,
        sum(case when t.prod_id=710 then 1 else 0 end) WXKD_NUM,
        count(distinct case when t.terminal_id=20 then t.serv_id end) PHS_NUM
   from cmms_serv_pre_'||vc_stat_cycle||' t
  group by t.ccust_id ,t.ccust_code,t.ccust_name ';
 execute immediate vc_sql;
  commit;

 sp_write_log(vc_stat_cycle,'SP_OM_CCUST_SUMMARY','88','直銷客戶概況(月報)完成');

 dbms_output.put_line('直銷客戶概況(月報)結束!');

exception
   WHEN DATAERROR THEN
      vc_error_code := -1;
      vc_error_text := '輸入參數錯誤,參數必須是月份格式(例:200804)';
      sp_write_log(IC_STAT_CYCLE, 'SP_OM_CCUST_SUMMARY', vc_error_code, vc_error_text);
      commit;
    WHEN OTHERS THEN rollback;
      DBMS_OUTPUT.PUT_LINE('異常號:' || substr(to_char(sqlcode), 1, 200) || ';異常資訊:' || sqlerrm);
     vc_error_code := substr(SQLCODE,1,20);
     vc_error_text := substr(SQLERRM,1,200);
     sp_write_log(IC_STAT_CYCLE,'SP_OM_CCUST_SUMMARY',vc_error_code,vc_error_text || VC_SQL);
end SP_OM_CCUST_SUMMARY;

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.