oracle sqr編寫技巧

wisdomone1發表於2011-12-22
1,程式碼模組化,功能化,簡短統一.
這樣便於複用和共享,免得編寫重複的大量程式碼

2,示例程式碼:
 
begin-procedure selectRpt($a)
begin-select On-Error=Global-Got-Fatal-SQL-Error   
    position (+1)
rlp.mjaccttypcd &MJ
rlp.miaccttypcd &MI
    MOVE &MJ TO $MJ
    MOVE &MI TO $MI
    DO GETMIMJACCTTYPDESC($MJ,$MI,$MJD,$MID)
    PRINT $MID (,2)
rlp.ACCTNBR (,34)   
rlp.OLDRATE (,56) edit 9.999999nu
rlp.INDEXRATE (,66) edit 9.999999nu
rlp.MARGINFIXED (,80) edit 9.999999nu
rlp.MARGINPCT (,91) edit 99.999999nu
rlp.NEWRATE (,102) edit 9.999999nu
rlp.RATEEFFDATE (,112)  edit 'yyyy-mm-dd'
RLP.PMTTYPCD &pt
    move &pt to $pt
    do GETPMTTYPDESC($pt,$ptd) !會呼叫過程getpmttypdesc
    print $ptd (,124)
rlp.OLDPMTAMT (,134) EDIT 999,999,999.99
rlp.NEWPMTAMT (,150) EDIT 999,999,999.99
rlp.TERM (,166) edit 9999
     position (+1)
from OSIBANK.Rpt_SchedLnRatePmtChg_Process rlp where rgidnbr=$a
end-select
Move 'Done Get-Acct-Info' To $_Global-ProcName
Let $_QueApplChkpt = 'Report Complete'
Let $_QueApplRc = 0
Do Final-QueAppl-Update   
end-procedure

!下述過程用於上述過程selectRpt呼叫
begin-procedure GETMIMJACCTTYPDESC ($MJ,$MI,:$MJD,:$MID) !:開頭表示輸出引數
BEGIN-SELECT
    LET $MJD=''    !引數初始化
MJACCTTYPDESC &MJD
    LET $MJD=&MJD !引數賦值 $mjd即輸出引數:$mjd
FROM MJACCTTYP WHERE MJACCTTYPCD=$MJ
END-SELECT
BEGIN-SELECT
    LET $MID=''
MIACCTTYPDESC &MID
    LET $MID=&MID
FROM MJMIACCTTYP WHERE MJACCTTYPCD=$MJ AND MIACCTTYPCD=$MI
END-SELECT
END-PROCEDURE
這樣有幾個好處:
  1,邏輯清晰
  2,後期若修改程式碼,僅動每個子過程即可.不然全寫在一個過
 程中,改動太大.
  3,減少了編寫難度.由一個過程加工得到中間臨時變數,
 繼而另一過程以此中間臨時變數為輸入引數,可得到另
 一個臨時變數,這個機制可以迭代進行.
 特別對於編寫begin-select節有大用.不然你的select的
    from 表會有好多.其實就是分而治之的思想.



3,頁首與每頁開始輸出不同,具體如下:
    a,語法不同:頁首是alter-report heading,而每頁開始為
         use-procedure before-page

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

相關文章