ITPUB??ì3
ITPUB论坛 » ERP二次开发 » 一个SQL*PLUS报表例子。


标题: [精华] 一个SQL*PLUS报表例子。
离线 chirsdong
风行无迹


精华贴数 3
个人空间 0
技术积分 5178 (238)
社区积分 1526 (659)
注册日期 2004-8-6
论坛徽章:18
紫蜘蛛2008北京奥运纪念徽章:曲棍球2008北京奥运纪念徽章:举重2008北京奥运纪念徽章:蹦床2008北京奥运纪念徽章:柔道2008北京奥运纪念徽章:铁人三项
2008北京奥运纪念徽章:排球2008年新春纪念徽章生肖徽章:猴   

发表于 2007-7-4 10:02 
一个SQL*PLUS报表例子。

介于有同学问起这个写报表的方式,本子上正好有一些资料。就提供给大家参考一下。
PHP code:


---厂商应负帐款余额报表

set termout  on

set verify   off

set heading  on

set feedback off

set linesize 200

set pagesize 58

set newpage 0

set space 1

set recsep off





COL tmp_name NOPRINT NEW_VALUE list_name

SELECT 
'KK'||USER||TO_CHAR(tempfile_s.nextvaltmp_name

FROM dual
;





column today            noprint new_val         datevar

column vendor_name        form A26 wrap    head 
'Vendor Name'

column currency_code        form A3        head 'Cur'

column bal_amount          form $99,999,999,999.99 head 'Balance Amount'





def acc_date '&1';

def org_id '&2';







select trunc(sysdatetoday from dual;





CREATE TABLE &list_name (

        
vendor_name     varchar2(100),

        
currency_code   varchar2(100),

        
inv_base_amount number,

        
inv_amount      number,

        
pmt_base_amount number,

        
pmt_amount      number,

        
bal_amount      number,

    
invoice_num     varchar2(100)

       ) 
TABLESPACE temp ;



COL tmp_name2 NOPRINT NEW_VALUE list_name2

SELECT 
'WK'||USER||TO_CHAR(tempfile_s.nextvaltmp_name2

FROM dual
;



CREATE TABLE &list_name2 (

        
vendor_name     varchar2(80),

        
currency_code   varchar2(15),

        
inv_base_amount number,

        
inv_amount      number,

        
pmt_base_amount number,

        
pmt_amount      number,

        
bal_amount      number,

        
o_bal_amount    number

       
TABLESPACE temp ;



declare

    
cursor cu_02 is

select max
(v.vendor_namevendor_name,

       
max(i.invoice_currency_codecurrency_code,

       
max(i.invoice_idinvoice_id,

       
max(i.invoice_numinvoice_num,

       
sum(nvl(id.base_amountid.amount)) inv_base_amount,

       
sum(id.amountinv_amount

from   po_vendors v
,

       
ap_invoices_all i,

       
ap_invoice_distributions_all id

where  v
.vendor_id            i.vendor_id

and    i.invoice_id           id.invoice_id

and    id.accounting_date    <= '&acc_date'

and    id.org_id  =decode('&org_id','1','551','2','552')   

group by v.vendor_name,i.invoice_currency_code,i.invoice_id

;



     
pcu_02 cu_02%rowtype;





    
cursor cu_021 is

select sum
(round(ip.amount nvl(i.exchange_rate,1),0)) pmt_base_amount,

       
sum(ip.amountpmt_amount

from   ap_invoice_payments_all ip
,

       
ap_invoices_all i

where  ip
.invoice_id     pcu_02.invoice_id

       
and i.invoice_id     pcu_02.invoice_id

       
and ip.accounting_date    <= '&acc_date'

;

     
pcu_021 cu_021%rowtype;





    
cursor cu_03 is

select  vendor_name vendor_name
,

        
currency_code currency_code ,

        
sum(inv_base_amountinv_base_amount,

        
sum(inv_amountinv_amount,

        
sum(pmt_base_amountpmt_base_amount,

        
sum(pmt_amountpmt_amount,

        
sum(bal_amountbal_amount

from 
&list_name

group by vendor_name
,currency_code

;

     
pcu_03 cu_03%rowtype;





begin

     open cu_02
;

     
loop

        fetch cu_02 into pcu_02
;

        exit 
when cu_02%NOTFOUND;

        
open cu_021;

        
fetch cu_021 into pcu_021;

        
close cu_021;

        
insert into &list_name values (

            
pcu_02.vendor_name,

            
pcu_02.currency_code,

            
pcu_02.inv_base_amount,

            
pcu_02.inv_amount,

            
pcu_021.pmt_base_amount,

            
pcu_021.pmt_amount,

            
pcu_02.inv_base_amount nvl(pcu_021.pmt_base_amount,0),

        
pcu_02.invoice_num

        
);

        
commit;

     
end loop;

     
close cu_02;



     
open cu_03;

     
loop

        fetch cu_03 into pcu_03
;

        exit 
when cu_03%NOTFOUND;

        
insert into &list_name2 values (

            
pcu_03.vendor_name,

            
pcu_03.currency_code,

            
pcu_03.inv_base_amount,

            
pcu_03.inv_amount,

            
pcu_03.pmt_base_amount,

            
pcu_03.pmt_amount,

            
pcu_03.bal_amount,

        
pcu_03.inv_amount pcu_03.pmt_amount

        
);

        
commit;

     
end loop;

     
close cu_03;

end;

/



break 
on report 

compute sum of  bal_amount  on report



TTITLE 
'~x0;'-

       
left 'Date: ' datevar -

       
center 'Vendor Balance Report As of '&&1  -           

       
right '页码:'  FORMAT 999 SQL.PNO -

       
skip 3       





select  vendor_name vendor_name
,

        
currency_code currency_code ,      

        
bal_amount bal_amount,    

        
TO_CHAR(SYSDATE'DD-MON-YY HH24:MI'today

from 
&list_name2

where bal_amount 
<> 0

/



drop table &list_name;

drop table &list_name2;



clear columns

set termout  on

set verify   on

set heading  off

set feedback on

set linesize 80

set 




__________________
见贤思齐
   
We learn from yesterday,live for today and hope for tomorrow!
      
守法朝朝忧闷,强梁夜夜欢歌,损人利己骑马骡,正直公平挨饿。修桥补路瞎眼,杀人放火儿多,我到西天问我佛,佛说:我也没辙!
         
岁月本长,而忙者自促,天地本宽,而卑者自隘。风花雪月本闲,而劳忧者自冗;天行健,君子以自强不息;地势坤,君子以厚德载物;宠辱不惊,闲看庭前花开花落;去留无意,漫随天外云卷云舒。不妄取,不妄予,不妄想,不妄求,与人方便,随遇而安。
            
http://www.mynon.cn/flash/pet/fish.swf
只看该作者    顶部
离线 huak
皑皑白雪


精华贴数 3
个人空间 0
技术积分 9620 (119)
社区积分 7536 (179)
注册日期 2003-5-10
论坛徽章:68
NBA2008季后赛纪念徽章NBA常规赛纪念章紫蜘蛛生肖徽章2007版:兔2008年新春纪念徽章2008年新春纪念徽章
生肖徽章2007版:鸡生肖徽章2007版:鸡    

发表于 2007-7-4 13:28 
学习,并“顶”一下。


__________________
I love my life !
mail:点这里给我发邮件
Oracle Application 11i  Documention
心有多广,舞台就有多大!
天津,魂牵梦绕的地方!
世界上没有懒惰的人,只是他的目标不够吸引他。
只看该作者    顶部
离线 Harry_shan
跟着ORACLE走


精华贴数 11
个人空间 0
技术积分 19830 (44)
社区积分 6509 (212)
注册日期 2003-2-28
论坛徽章:60
现任管理团队成员2008北京奥运纪念徽章:击剑2008北京奥运纪念徽章:沙滩排球2008北京奥运纪念徽章:皮划艇静水2008北京奥运纪念徽章:皮划艇静水2008北京奥运纪念徽章:举重
2008北京奥运纪念徽章:花样游泳2008北京奥运纪念徽章:举重2008北京奥运纪念徽章:赛艇2008北京奥运纪念徽章:艺术体操2008北京奥运纪念徽章:现代五项生肖徽章2007版:牛

发表于 2007-7-4 14:03 
Re: 一个SQL*PLUS报表例子。



QUOTE:
最初由 chirsdong 发布
介于有同学问起这个写报表的方式,本子上正好有一些资料。就提供给大家参考一下。
PHP code:


---厂商应负帐款余额报表

set termout  on

set verify   off

set heading  on

set feedback off

set linesize 200

set pagesize 58

set newpage 0

set space 1

set recsep off





COL tmp_name NOPRINT NEW_VALUE list_name

SELECT 
'KK'||USER||TO_CHAR(tempfile_s.nextvaltmp_name

FROM dual
;





column today            noprint new_val         datevar

column vendor_name        form A26 wrap    head 
'Vendor Name'

column currency_code        form A3        head 'Cur'

column bal_amount          form $99,999,999,999.99 head 'Balance Amount'





def acc_date '&1';

def org_id '&2';







select trunc(sysdatetoday from dual;





CREATE TABLE &list_name (

        
vendor_name     varchar2(100),

        
currency_code   varchar2(100),

        
inv_base_amount number,

        
inv_amount      number,

        
pmt_base_amount number,

        
pmt_amount      number,

        
bal_amount      number,

    
invoice_num     varchar2(100)

       ) 
TABLESPACE temp ;



COL tmp_name2 NOPRINT NEW_VALUE list_name2

SELECT 
'WK'||USER||TO_CHAR(tempfile_s.nextvaltmp_name2

FROM dual
;



CREATE TABLE &list_name2 (

        
vendor_name     varchar2(80),

        
currency_code   varchar2(15),

        
inv_base_amount number,

        
inv_amount      number,

        
pmt_base_amount number,

        
pmt_amount      number,

        
bal_amount      number,

        
o_bal_amount    number

       
TABLESPACE temp ;



declare

    
cursor cu_02 is

select max
(v.vendor_namevendor_name,

       
max(i.invoice_currency_codecurrency_code,

       
max(i.invoice_idinvoice_id,

       
max(i.invoice_numinvoice_num,

       
sum(nvl(id.base_amountid.amount)) inv_base_amount,

       
sum(id.amountinv_amount

from   po_vendors v
,

       
ap_invoices_all i,

       
ap_invoice_distributions_all id

where  v
.vendor_id            i.vendor_id

and    i.invoice_id           id.invoice_id

and    id.accounting_date    <= '&acc_date'

and    id.org_id  =decode('&org_id','1','551','2','552')   

group by v.vendor_name,i.invoice_currency_code,i.invoice_id

;



     
pcu_02 cu_02%rowtype;





    
cursor cu_021 is

select sum
(round(ip.amount nvl(i.exchange_rate,1),0)) pmt_base_amount,

       
sum(ip.amountpmt_amount

from   ap_invoice_payments_all ip
,

       
ap_invoices_all i

where  ip
.invoice_id     pcu_02.invoice_id

       
and i.invoice_id     pcu_02.invoice_id

       
and ip.accounting_date    <= '&acc_date'

;

     
pcu_021 cu_021%rowtype;





    
cursor cu_03 is

select  vendor_name vendor_name
,

        
currency_code currency_code ,

        
sum(inv_base_amountinv_base_amount,

        
sum(inv_amountinv_amount,

        
sum(pmt_base_amountpmt_base_amount,

        
sum(pmt_amountpmt_amount,

        
sum(bal_amountbal_amount

from 
&list_name

group by vendor_name
,currency_code

;

     
pcu_03 cu_03%rowtype;





begin

     open cu_02
;

     
loop

        fetch cu_02 into pcu_02
;

        exit 
when cu_02%NOTFOUND;

        
open cu_021;

        
fetch cu_021 into pcu_021;

        
close cu_021;

        
insert into &list_name values (

            
pcu_02.vendor_name,

            
pcu_02.currency_code,

            
pcu_02.inv_base_amount,

            
pcu_02.inv_amount,

            
pcu_021.pmt_base_amount,

            
pcu_021.pmt_amount,

            
pcu_02.inv_base_amount nvl(pcu_021.pmt_base_amount,0),

        
pcu_02.invoice_num

        
);

        
commit;

     
end loop;

     
close cu_02;



     
open cu_03;

     
loop

        fetch cu_03 into pcu_03
;

        exit 
when cu_03%NOTFOUND;

        
insert into &list_name2 values (

            
pcu_03.vendor_name,

            
pcu_03.currency_code,

            
pcu_03.inv_base_amount,

            
pcu_03.inv_amount,

            
pcu_03.pmt_base_amount,

            
pcu_03.pmt_amount,

            
pcu_03.bal_amount,

        
pcu_03.inv_amount pcu_03.pmt_amount

        
);

        
commit;

     
end loop;

     
close cu_03;

end;

/



break 
on report 

compute sum of  bal_amount  on report



TTITLE 
'~x0;'-

       
left 'Date: ' datevar -

       
center 'Vendor Balance Report As of '&&1  -           

       
right '页码:'  FORMAT 999 SQL.PNO -

       
skip 3       





select  vendor_name vendor_name
,

        
currency_code currency_code ,      

        
bal_amount bal_amount,    

        
TO_CHAR(SYSDATE'DD-MON-YY HH24:MI'today

from 
&list_name2

where bal_amount 
<> 0

/



drop table &list_name;

drop table &list_name2;



clear columns

set termout  on

set verify   on

set heading  off

set feedback on

set linesize 80

set 



学习一下


__________________
只看该作者    顶部
离线 chirsdong
风行无迹


精华贴数 3
个人空间 0
技术积分 5178 (238)
社区积分 1526 (659)
注册日期 2004-8-6
论坛徽章:18
紫蜘蛛2008北京奥运纪念徽章:曲棍球2008北京奥运纪念徽章:举重2008北京奥运纪念徽章:蹦床2008北京奥运纪念徽章:柔道2008北京奥运纪念徽章:铁人三项
2008北京奥运纪念徽章:排球2008年新春纪念徽章生肖徽章:猴   

发表于 2007-7-4 14:46 
Re: Re: 一个SQL*PLUS报表例子。



QUOTE:
最初由 Harry_shan 发布


学习一下


。。。。。。。。。多谢老shan受精。。。


这是几年前在台资企业里搞的。。出来后很少用这个写报表了。。。


__________________
见贤思齐
   
We learn from yesterday,live for today and hope for tomorrow!
      
守法朝朝忧闷,强梁夜夜欢歌,损人利己骑马骡,正直公平挨饿。修桥补路瞎眼,杀人放火儿多,我到西天问我佛,佛说:我也没辙!
         
岁月本长,而忙者自促,天地本宽,而卑者自隘。风花雪月本闲,而劳忧者自冗;天行健,君子以自强不息;地势坤,君子以厚德载物;宠辱不惊,闲看庭前花开花落;去留无意,漫随天外云卷云舒。不妄取,不妄予,不妄想,不妄求,与人方便,随遇而安。
            
http://www.mynon.cn/flash/pet/fish.swf
只看该作者    顶部
离线 huak
皑皑白雪


精华贴数 3
个人空间 0
技术积分 9620 (119)
社区积分 7536 (179)
注册日期 2003-5-10
论坛徽章:68
NBA2008季后赛纪念徽章NBA常规赛纪念章紫蜘蛛生肖徽章2007版:兔2008年新春纪念徽章2008年新春纪念徽章
生肖徽章2007版:鸡生肖徽章2007版:鸡    

发表于 2007-7-4 16:14 
什么情况下,非得用这中方法来写报表?
感觉麻烦的很


__________________
I love my life !
mail:点这里给我发邮件
Oracle Application 11i  Documention
心有多广,舞台就有多大!
天津,魂牵梦绕的地方!
世界上没有懒惰的人,只是他的目标不够吸引他。
只看该作者    顶部
离线 chirsdong
风行无迹


精华贴数 3
个人空间 0
技术积分 5178 (238)
社区积分 1526 (659)
注册日期 2004-8-6
论坛徽章:18
紫蜘蛛2008北京奥运纪念徽章:曲棍球2008北京奥运纪念徽章:举重2008北京奥运纪念徽章:蹦床2008北京奥运纪念徽章:柔道2008北京奥运纪念徽章:铁人三项
2008北京奥运纪念徽章:排球2008年新春纪念徽章生肖徽章:猴   

发表于 2007-7-4 16:48 


QUOTE:
最初由 huak 发布
什么情况下,非得用这中方法来写报表?
感觉麻烦的很


台资企业~~


__________________
见贤思齐
   
We learn from yesterday,live for today and hope for tomorrow!
      
守法朝朝忧闷,强梁夜夜欢歌,损人利己骑马骡,正直公平挨饿。修桥补路瞎眼,杀人放火儿多,我到西天问我佛,佛说:我也没辙!
         
岁月本长,而忙者自促,天地本宽,而卑者自隘。风花雪月本闲,而劳忧者自冗;天行健,君子以自强不息;地势坤,君子以厚德载物;宠辱不惊,闲看庭前花开花落;去留无意,漫随天外云卷云舒。不妄取,不妄予,不妄想,不妄求,与人方便,随遇而安。
            
http://www.mynon.cn/flash/pet/fish.swf
只看该作者    顶部
离线 Harry_shan
跟着ORACLE走


精华贴数 11
个人空间 0
技术积分 19830 (44)
社区积分 6509 (212)
注册日期 2003-2-28
论坛徽章:60
现任管理团队成员2008北京奥运纪念徽章:击剑2008北京奥运纪念徽章:沙滩排球2008北京奥运纪念徽章:皮划艇静水2008北京奥运纪念徽章:皮划艇静水2008北京奥运纪念徽章:举重
2008北京奥运纪念徽章:花样游泳2008北京奥运纪念徽章:举重2008北京奥运纪念徽章:赛艇2008北京奥运纪念徽章:艺术体操2008北京奥运纪念徽章:现代五项生肖徽章2007版:牛

发表于 2007-7-4 16:56 
Re: Re: Re: 一个SQL*PLUS报表例子。



QUOTE:
最初由 chirsdong 发布



。。。。。。。。。多谢老shan受精。。。


这是几年前在台资企业里搞的。。出来后很少用这个写报表了。。。


说不定以后项目会用到


__________________
只看该作者    顶部
离线 chirsdong
风行无迹


精华贴数 3
个人空间 0
技术积分 5178 (238)
社区积分 1526 (659)
注册日期 2004-8-6
论坛徽章:18
紫蜘蛛2008北京奥运纪念徽章:曲棍球2008北京奥运纪念徽章:举重2008北京奥运纪念徽章:蹦床2008北京奥运纪念徽章:柔道2008北京奥运纪念徽章:铁人三项
2008北京奥运纪念徽章:排球2008年新春纪念徽章生肖徽章:猴   

发表于 2007-7-4 17:22 
Re: Re: Re: Re: 一个SQL*PLUS报表例子。



QUOTE:
最初由 Harry_shan 发布


说不定以后项目会用到


晕倒!!到时候给钱的说~~


__________________
见贤思齐
   
We learn from yesterday,live for today and hope for tomorrow!
      
守法朝朝忧闷,强梁夜夜欢歌,损人利己骑马骡,正直公平挨饿。修桥补路瞎眼,杀人放火儿多,我到西天问我佛,佛说:我也没辙!
         
岁月本长,而忙者自促,天地本宽,而卑者自隘。风花雪月本闲,而劳忧者自冗;天行健,君子以自强不息;地势坤,君子以厚德载物;宠辱不惊,闲看庭前花开花落;去留无意,漫随天外云卷云舒。不妄取,不妄予,不妄想,不妄求,与人方便,随遇而安。
            
http://www.mynon.cn/flash/pet/fish.swf
只看该作者    顶部
离线 terencelin1226
初级会员



精华贴数 0
个人空间 0
技术积分 1202 (1372)
社区积分 9 (11082)
注册日期 2007-8-14
论坛徽章:12
2008年新春纪念徽章生肖徽章2007版:猴生肖徽章2007版:牛生肖徽章2007版:鸡生肖徽章2007版:虎生肖徽章2007版:兔
生肖徽章2007版:鼠ERP板块每日发贴之星ERP板块每日发贴之星   

发表于 2007-12-11 18:21 
真的挺麻煩的


__________________
去它的優雅~低調的奢華~忽略美學作用~~
只看该作者    顶部
 
    

相关内容


CopyRight 1999-2006 itpub.net All Right Reserved.
北京皓辰广域网络信息技术有限公司. 版权所有
E-mail:Webmaster@itpub.net
京ICP证:010037号 联系我们 法律顾问