ITPub博客

首页 > Linux操作系统 > Linux操作系统 > oracle sqr工作学习小记

oracle sqr工作学习小记

原创 Linux操作系统 作者:wisdomone1 时间:2011-12-16 16:26:08 0 删除 编辑
  自调至批量组,工作内容涉及批量报表的展示.而公司展示报表的工具采用的是
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/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
提供针对oracle初学者及进阶的数据库培训,欢迎大家咨询: 微信: wisdomone 微信公众号: lovedb qq: 305076427 微博: wisdomone9

注册时间:2008-04-04

  • 博文量
    2164
  • 访问量
    11738506