oracle sqr之基於oracle表分組列列印不同.LIS檔案

wisdomone1發表於2011-12-20
oracle測試表結構及資料
osibank.testzxysqr

a    b
1   1
2  3
2  3
3  4
4  6
6  9


oracle 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'

begin-setup
 Declare-layout batch-land
   rientation=landscape
   left-margin=0
   top-margin=0
   max-lines=60
   max-columns=180
 end-declare
end-setup

!20111220 newly added 無資料使用報表頭
begin-heading 5 name=nodataheading
 print 'a列' (1,11)
 print 'b列' (1,20)
 print '─' (+1,2,84) fill
end-heading

begin-procedure osi-main
    do group_a
end-procedure 

begin-procedure query_table($a)
 begin-select
  position (+1)
a &a1
 move &a1 to $a1
 print $a1 (,20,10) edit 9
b &b1
 move &b1 to #b1
 print #b1 (,40,10) edit 9
 from osibank.zxytestsqr z where z.a=$a
 end-select
end-procedure

!以分組a列輸出不同的lis檔案
begin-procedure group_a
 begin-select distinct
!to_char(a)  &a () on-break print=never after=group($a) save=$a
a  &a () on-break print=never after=group($a) save=$a !after及before只能用於begin-select節中
  from osibank.zxytestsqr order by a!p.branchorgnbr &a () ON-BREAK PRINT=NEVER AFTER=NP($a) save = $a  
 end-select
end-procedure


begin-procedure group($a)
  !如下new-report與do語句的先後順序至關重要,開始do語句在前,產生的分組lis檔案會少1個,調換2語句順序後,產生分組LIS檔案正常
    let $out=$a||'_'||'查詢.lis'
 new-report $out  !此new-report語句
 do query_table($a) !此do語句
end-procedure

begin-procedure OSI-Startup  
End-procedure


begin-footing 5 !name=endfooting
 
  !報表尾列印位置要注意,不然可能會出現當前頁沒列印輸出完,就會列印第二頁報錯,調整position即可
  page-number (+1,20)  '當前頁為第' '頁,'
  last-page () '共' '頁。'
end-footing


示例程式碼輸出結果
依次產生6個LIS檔案:

1_查詢.lis
2_查詢.lis
3_查詢.lis
4_查詢.lis
5_查詢.lis
6_查詢.lis

其上述lis檔案內容,摘1_查詢.lis,其它LIS類同

1  3


小結
  
1,sqr命令,一定要仔細理解,比如NEW-REPORT與do命令的順序


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

相關文章