oracle sqr工作學習小記

wisdomone1發表於2011-12-16
  自調至批次組,工作內容涉及批次報表的展示.而公司展示報表的工具採用的是
oracle sqr,學習SQR成為工作之需.
  因近期諸事牽扯精力.雖說從1個月前有所瞭解SQR.僅止於偶爾走馬燈看過幾頁SQR手冊.任何實際工作沒有進行過.這幾日就把SQR手冊及SQR實際程式碼參考著學習.基本實現了工作的需要.當然在其過程中同事.給了我莫大的幫助.免去眾多
無謂的變路與歧途.節省了時間.謝謝你們.
  SQR和ORACLE PLSQL差不多.如果你有前期豐富的程式設計經驗.富有嚴密的邏輯
思維能力.相信學習一途風光.平坦順心.
  
  少說多作.先放一些SQR程式碼.


 #define addtlsetup
#include 'Rptstub.lib'
#include '{libpath}tkit_batchstartup.inc'
#include '{libpath}tkit_rptheader.inc'
#include '{libpath}tkit_queappl.inc'
#include '{libpath}tkit_vars_opts.inc'
#include '{libpath}tkit_Sqrfunc.inc'
!----------------------------------------------------------------------------------------------------------
!開發日期:2011-12-12
!開發人員:翟勳楊
!功能描述:二期【久懸戶轉營業外收入清單,呼叫儲存過程和產生報表
!久懸戶轉營業外收入清單SQT:RDP_DORMTOOUTINCOME.SQT
!
!修改日期:
!修改人員:
!----------------------------------------------------------------------------------------------------------

!報表顯示佈局的初始化
begin-setup
 Declare-layout batch-land
   rientation=landscape
   left-margin=0
   top-margin=0
   max-lines=60
   max-columns=180
 end-declare
end-setup

Begin-Heading 5 name = myHeading
  print $filename (2,35)  BOLD  center
  Let $Global-HaveIWrittenAPage = 'Y'
  print '─' (+1,2,84) fill
  Print '提交日期:' (+1,118)
  Print &FmtdEffDate (0, 0)
  print '─' (+1,2,84) fill
End-Heading

!報表表頭的初始化
begin-procedure outsideheading
  print $filename (0) center
  print '─' (+1,2,84) fill
  position (+1)
  let $bankorg_name = '機構名稱:'|| $bankorgname
  print $bankorg_name (,2)
  Print '提交日期:' (,118)
  Print &FmtdEffDate (0, 0)
  print '─' (+1,2,84) fill
 
  !介質號,賬號,戶名,產品大類,產品小類,狀態 轉營業外輸入日期 ,金額
    position (+1)
    print '介質號'  (,2,19)
    print '賬號'  (,23,20)
    print '戶名'  (,45)
    print '產品大類'  (,90,10)
    print '產品小類'  (,100,10)
    print '狀態'  (,120,8)
    print '轉營業外收入日期'  (,130,10)
    print '金額'  (,142,30)
    print '─' (+1,2,84) fill
end-procedure

begin-procedure osi-main
     Move 'In OSI-Main' To $Global-ProcName
     !---------------- 獲取定義報表輸出路徑需要的資料---開始---------------------
    do Get-The-PostDate($dt)
    move $dt to $dt 'YYYYMMDD'
    do GET-APPL-NAME($filename)
    Do Get-Bank-Option('RPTT',$Len)
     !----------------  獲取定義報表輸出路徑需要的資料---結束---------------------

    do selectdiffbankorg  
    Let $QueApplChkpt = 'Report Complete'
    Let $QueApplRc = 0
    Do Final-QueAppl-Update    

    move 'Done OSI-Main' To $Global-ProcName    
end-procedure

begin-procedure selectdiffbankorg
    begin-select
count(*) &rownums  
        !from osibank.acctinactprocess
       from osibank.rpt_acctinact_process
    end-select
    
     if &rownums = 0
         alter-report heading = myHeading !改變頁首
       let $out = $Len || $dt || '\' || $QueNbr || '\' || $filename || '.LIS'
       NEW-REPORT $out
       print '沒有符合條件的資料' (+1,) center
     else
        !以銀行分支機構分組
        begin-select distinct
p.branchorgnbr &a () ON-BREAK PRINT=NEVER AFTER=NP($a) save = $a
            from OSIBANK.acctinactprocess p where p.state='TINC'
        end-select
    end-if
end-procedure

!檔案輸出路徑、檔名設定
BEGIN-procedure NP($a)
  do GETBANKNAME($a)
  do selectdifforg($a) !只列印不同銀行分支機構的報表資訊
    let $out=$_Len||$_dt||'\'||$a||'_'||$_filename|| '.LIS'
    use-procedure before-page = outsideheading
    NEW-REPORT $out
end-procedure        

BEGIN-PROCEDURE GETBANKNAME($A)
    begin-select
o.orgname &bankorgname
       move &bankorgname to $_bankorgname
    FROM ORG o,branch b WHERE  o.ORGNBR = b.orgnbr and  b.orgidnbr=$A
    end-select
END-PROCEDURE

begin-procedure selectdifforg($a)

begin-select
   position (+1)
p.mediumid &mediumid
   move &mediumid to  $mediumid
   print $mediumid  (,2,19)
to_char(p.acctnbr)  &acctnbr
   move  &acctnbr to  $acctnbr
   print $acctnbr (,23,20)
p.orgname  &orgname
   move  &orgname to  $orgname
   print $orgname (,45)

p.mjaccttypcd &mjaccttypcd
   move  &mjaccttypcd  to $mjaccttypcd
   print $mjaccttypcd (,90,10)

p.mjmiaccttypcd &mjmiaccttypcd  
   move &mjmiaccttypcd  to $mjmiaccttypcd
   print $mjmiaccttypcd (,100,10)

p.state &state
   move &state  to $state
   print $state (,120,8)

p.totindate  &totindate
   move &totindate  to $totindate 'YYYY-MM-DD'
   print $totindate (,130,10)

p.accttotalamt  &accttotalamt
   move   &accttotalamt  to $accttotalamt 88,888,888,888,888.88
   print $accttotalamt  (,142,30)

   let #count=#count+1
   let #accttotalamt=#accttotalamt + &accttotalamt
   !from osibank.acctinactprocess p
   from osibank.rpt_acctinact_process p
   where p.state='TINC' and p.branchorgnbr=$a

end-select
 
     print '─' (+1,2,84) fill
  move #count to $count 999,999,999
  let $co ='總記錄數:' || $count
  print $co (+1,2)
  move 0 to #count
 
  move #accttotalamt to $accttotalamt 999,999,999,999.99
  let $totalamt ='總金額:' || $accttotalamt
  print $totalamt (,100)

end-procedure

begin-footing 3
  print '─' (,2,84) fill
  !page-number ()  (+1,126) '當前頁為第' '頁,'
  page-number (+1,126)  '當前頁為第' '頁,'
  last-page () '共' '頁。'
  print '列印時間:' (,+1)
 
  let $printDate = datenow()
  move $printDate to $printDate 'YYYY-MM-DD'
  print $printDate (,)
end-footing

begin-procedure OSI-Startup   
End-procedure



 上述程式碼.主體部分由我完成.細節格式同事協助除錯完成.我感覺SQR的格式除錯頗費精力.昨天晚上一個小問題我就花費了一個多小時.才搞定.原來是過程之間的變數不一致導致.

 SQR也會把某些公有的功能預先編寫在一些庫檔案中,這樣以後在編寫自己的SQR指令碼時,就可以直接呼叫這些庫檔案中的方法(或叫過程),非常方便.類似於JAVA的公有類或者ORACLE PLSQL的 PACKAGE 的變數型別.

 
  
 sqr是原始的原始碼檔案(其實就是txt檔案,不過它的副檔名是.sqr),由ORACLE自己的編譯工具sqr.exe編譯後.會產生同名但副檔名為.sqt的檔案.此時直接用執行工具sqrt.exe執行sqt檔案.就會產生指定的字尾名為.LIS報表檔案

  上述SQR執行產生的報表檔案如下:


                                                                                  久懸戶轉營業外收入
 ────────────────────────────────────────────────────────────────────────────────────
 機構名稱:達州市商業銀行文華街支行                                                                                   提交日期:2014-08-31
 ────────────────────────────────────────────────────────────────────────────────────
 介質號               賬號                  戶名                                         產品大類  產品小類            狀態      轉營業外收  金額
 ────────────────────────────────────────────────────────────────────────────────────
 **00586  **00586    不動戶                                       CK        2010                TINC      2013-08-21  1,411.20
 *a3*00425   *a3*00425    sb飾c程     CK        2010                TINC      2014-08-28  10.94
 201*a3*0041500616   201*a3*0041500616    ab                         CK        2000                TINC      2014-08-28  3.24
 *a3*004aaa1c06c7   *a3*004aaa1c06c7    xd                        CK        2010                TINC      2014-08-28  667.36
 632xa16dcs50c41  632xa16dcs50c41    abc                 CK        2010                TINC      2014-08-28  148.57
 ────────────────────────────────────────────────────────────────────────────────────
 總記錄數:          5                                                                             總金額:        621,640.91

 ────────────────────────────────────────────────────────────────────────────────────
                                                                                                                             當前頁為第1頁,共1頁   列印時間:2011-12-16


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9240380/viewspace-713450/,如需轉載,請註明出處,否則將追究法律責任。

相關文章