`
txf2004
  • 浏览: 7044386 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

用PERL 程序编写一个从ORACLE数据库中取数然后规范格式插入到EXCEL中的程序

阅读更多

PERL 程序编写一个从ORACLE数据库中取数然后规范格式插入到EXCEL中的程序

以下为一个实例

安装WINDOWS下支持PERL并且能连接的数据库的环境 见 文档Win2000中安装perl并访问Oracle

#!c:perlinperl
##################################################################
#大客户资料提供给xxx#
#今年本月各个供应商的进货额销售毛利毛利额快讯海报销#
#本月快讯单品的快讯期间进货额销售额#
#去年这个月的进货额销售毛利毛利额#
##################################################################


useDBI;
useWin32::OLE;

if(@ARGV<5){#主程序参数
print"Usage:dkh.pl<store_no><startdate><enddate><mail1><mail2>例如:dkh.pl12200601012006013126012602 ";
exit(0);
}
$startdate=$ARGV[1];
$enddate=$ARGV[2];
$startdate2=$ARGV[1]-10000;#获得去年的日期
$enddate2=$ARGV[2]-10000;
$storeno=$ARGV[0];
$mail1=$ARGV[3];
$mail2=$ARGV[4];
if($storeno==12){
$oracleid="report/system";#数据库用户名密码
$oracleid1="jxc/xjyjxc";

}
$dbh=DBI->connect("dbi:Oracle:host=148.20.40.4;sid=ora7",$oracleid1,'',{AutoCommit=>0})||
die"Don'tconnectdatabase! ";#连接数据库
$dbh_st=DBI->connect("dbi:Oracle:host=148.20.40.2;sid=ora7",$oracleid,'',{AutoCommit=>0})||
die"Don'tconnectdatabase! ";#连接数据库

#getalreadyactiveExcelapplicationoropennew打开一个新EXCEL实例

$Excel=Win32::OLE->new('Excel.Application','Quit')||
Win32
::OLE->GetActiveObject('Excel.Application');

$Book=$Excel->Workbooks->Open("e:\tmp\tmp\DKH.XLS");#打开一个EXCEL表格
$sheet=1;#指定第一张表
$Sheet=$Book->Worksheets($sheet);

##########################################################################################
##在第一张sheet1表中插入本年的各项数据#
##########################################################################################

print"###插入各项数据大于29000小与29999供应商$startdate--$enddate期间销售### ";
$sql="selectj.buyer_uid,
j.suppl_no,
s.NAME,
sum(j.GOR_AMOUNT),
sum(j.SALE_AMOUNT),
sum(j.SALE_AMOUNT)-sum(j.SALE_NN_AMOUNT),
sum(j.SALE_MM_AMOUNT),
decode(sum(j.SALE_MM_AMOUNT),
0,
0,
sum(j.SALE_MM_AMOUNT)/sum(j.SALE_AMOUNT))
fromjxc_supj,suppliers
wherej.suppl_no=s.suppl_no
andj.run_datebetweento_date($startdate,'yyyymmdd')and
to_date($enddate,'yyyymmdd')
andj.buyer_uid!='DZH'
andj.suppl_nobetween29000and29999
andj.store_no=12
groupbyj.buyer_uid,j.suppl_no,s.NAME
orderbyj.buyer_uid,j.suppl_no
";#嵌入SQL语句
$sth=$dbh->prepare($sql);
$sth->execute();
$Sheet->Cells(1,1)->{Value}="大于29000小与29999供应商的$startdate~$enddate销售数据";
for($row=3;@result=$sth->fetchrow_array;$row++){
for($line=2;$line<=9;$line++){
$Sheet->Cells($row,$line)->{Value}=$result[$line-2];
}
};
$sth->finish;
$sheet=2;
$Sheet=$Book->Worksheets($sheet);

##########################################################################################
##在第二张sheet2表中插入去年的各项数据#
##########################################################################################


print"###插入各项数据29001-29999供应商$startdate2-$enddate2期间销售### ";
$sql="selectj.buyer_uid,
j.suppl_no,
s.NAME,
sum(j.GOR_AMOUNT),
sum(j.SALE_AMOUNT),
sum(j.SALE_AMOUNT)-sum(j.SALE_NN_AMOUNT),
sum(j.SALE_MM_AMOUNT),
decode(sum(j.SALE_MM_AMOUNT),
0,
0,
sum(j.SALE_MM_AMOUNT)/sum(j.SALE_AMOUNT))
fromjxc_supj,suppliers
where
j.suppl_no=s.suppl_no
andj.run_datebetweento_date($startdate2,'yyyymmdd')and
to_date($enddate2,'yyyymmdd')
andj.suppl_nobetween29000and29999
andj.buyer_uid!='DZH'
andj.store_no=12
groupbyj.buyer_uid,j.suppl_no,s.NAME
orderby1,2
";
$sth=$dbh->prepare($sql);
$sth->execute();
$Sheet->Cells(1,1)->{Value}="大于29000小与29999供应商的$startdate2--$enddate2销售数据";
for($row=3;@result=$sth->fetchrow_array;$row++){
for($line=2;$line<=9;$line++){
$Sheet->Cells($row,$line)->{Value}=$result[$line-2];
}
}
$sth->finish;
$dbh->disconnect;

#############################################################################################
#下面开始运算快讯的信息插入到SHEET3表格中#
#############################################################################################

$sheet=3;
$Sheet=$Book->Worksheets($sheet);
print"###插入各项数据$mail1### ";
$sql="
select'$mail1',
t1.suppl_no,
t2.name,
sum((t1.gor_qty+t1.del_corr+t1.return_qty)*t1.old_nn_buy_price*(t1.vat_perc/100+1)),
sum(t1.sale_amount)
fromtb_fin_art_stockt1,suppliert2
wheret1.suppl_no=t2.suppl_no
andt1.suppl_nobetween29001and29099
andt1.art_noin(selectart_nofrommm_articlewheremmail_noin($mail1))
andt1.run_date>=(selectSTART_DATEfrommm_calendarwheremmail_no=$mail1)
andt1.run_date<=(selectend_datefrommm_calendarwheremmail_no=$mail1)
groupbyt1.suppl_no,t2.name
";
$sth=$dbh_st->prepare($sql);
$sth->execute();
$Sheet->Cells(1,1)->{Value}="快讯期数据$mail1";#插入EXCEL中第一行第一列
for($row=3;@result=$sth->fetchrow_array;$row++){
for($line=1;$line<=5;$line++){
$Sheet->Cells($row,$line)->{Value}=$result[$line-1];
}
};
$sth->finish;

print"###插入各项数据$mail2### ";
$sql="
select'$mail2',
t1.suppl_no,
t2.name,
sum((t1.gor_qty+t1.del_corr+t1.return_qty)*t1.old_nn_buy_price*(t1.vat_perc/100+1)),
sum(t1.sale_amount)
fromtb_fin_art_stockt1,suppliert2
wheret1.suppl_no=t2.suppl_no
andt1.suppl_nobetween29001and29099
andt1.art_noin(selectart_nofrommm_articlewheremmail_noin($mail2))
andt1.run_date>=(selectSTART_DATEfrommm_calendarwheremmail_no=$mail2)
andt1.run_date<=(selectend_datefrommm_calendarwheremmail_no=$mail2)
groupbyt1.suppl_no,t2.name
";
$sth=$dbh_st->prepare($sql);
$sth->execute();
$Sheet->Cells(1,8)->{Value}="快讯期数据$mail2";
for($row=3;@result=$sth->fetchrow_array;$row++){
for($line=8;$line<=12;$line++){
$Sheet->Cells($row,$line)->{Value}=$result[$line-8];
}
};
$sth->finish;
$dbh_st->disconnect;
$Book->Close;

学习基本PERL 语法,使用PERL 中的DBI库连接数据库,利用WIN32::OLE来写入EXCEL

分享到:
评论

相关推荐

    oracle数据库同步perl脚本示例

    oracle数据库同步perl脚本示例 其中有2个文件,一个是 perl同步脚本,另一个是存储过程; 大致思路是:perl脚本从数据库A同步数据至库B的临时表中,再通过存储过程将库B中的临时数据过滤导入正式数据当中。

    将excel数据导入到oracle数据库

    在Oracle数据库中创建一个新表,用于存储即将导入的Excel数据。表的字段应与Excel中的列对应。例如,如果你的Excel文件有三列:ID、Name和Age,那么在Oracle中创建的表也需要这三个字段,并根据数据类型设定(如INT...

    perl程序(用户从oracle提取数据)

    以下是一个基本的Perl脚本示例,用于连接到Oracle数据库并执行查询: ```perl use DBI; # 数据库连接参数 my $dsn = "dbi:Oracle:host=your_host;sid=your_sid"; my $user = "your_username"; my $pass = "your_...

    Perl for Oracle DBAs

    1. **Perl与Oracle数据库的连接**:Perl通过DBI(Database Interface)模块与Oracle进行交互,DBD::Oracle是DBI的一个驱动,用于实现对Oracle数据库的访问。DBI提供了一种标准接口,使得DBAs可以轻松地切换不同的...

    Oracle培训用Perl编程教程

    Oracle培训中的Perl编程教程是一门深入浅出的课程,旨在帮助IT专业人士掌握使用Perl语言在Oracle数据库环境中进行高效开发和管理的技能。Perl是一种强大的文本处理语言,特别适合于处理和解析大量的数据,因此在...

    Oracle数据库正则表达式

    从 Oracle 10g 开始,Oracle 内建了符合 IEEE POSIX (Portable Operating System for Unix)标准的正则表达式,同时也支持 Perl 的正则表达式规则。 正则表达式的组成 ----------------- 正则表达式由一个或多个...

    perl程序编写教程

    以下是一些关于Perl程序编写的重要知识点: 1. **Perl简介**:Perl是由Larry Wall在1987年开发的,它的名字是“Practical Extraction and Reporting Language”的首字母缩写。Perl具有强大的文本处理能力,灵活的...

    perl oracle dbd zip

    标题 "perl oracle dbd zip" 暗示了这是一个关于使用Perl编程语言与Oracle数据库进行交互的资源包,其中可能包含DBD::Oracle模块的源码和相关工具。DBD::Oracle是Perl的一个数据库驱动模块,它允许Perl脚本连接到...

    Oracle至PostgreSQL数据库迁移方案.pptx

    Oracle至PostgreSQL数据库迁移方案是使用Ora2PG工具实现的,该工具是一个Perl语言编写的开源工具,用于将Oracle或MySQL数据库迁移到PostgreSQL数据库。下面是该方案的详细知识点: 一、Ora2PG简介 Ora2PG是一个...

    用perl程序导入文本文件到mysql数据库中的方法

    用perl程序实现文本文件到mysql数据的自动加载.

    perl DBD-Oracle-1.22

    Perl DBD-Oracle-1.22 是一个Perl编程语言中的数据库驱动模块,它使得Perl程序能够与Oracle数据库进行交互。这个模块是DBI(Database Independent Interface)的一部分,DBI是Perl中广泛使用的数据库接口标准,它...

    perl 连接数据库所需包

    在与数据库交互时,Perl提供了DBI(Database Interface)模块,这是一个通用的数据库接口,允许Perl程序连接到各种不同的数据库系统。DBI是Perl数据库编程的核心,而DBD(Database Driver)则是与特定数据库通信的...

    文件批量导入数据到oracle数据库

    首先,"文件批量导入数据到Oracle数据库"指的是将一个或多个文本文件(例如CSV、TXT格式)中的数据一次性加载到Oracle数据库的表中。这种操作可以极大地提高效率,尤其是在处理大量数据时,比逐条插入更有效率。常用...

    centos上安装oracle数据库

    - 创建一个用户oracle,将其添加到以上三个组中,并指定其主目录为`/opt/oracle`。 2. **设置用户密码** - 使用`passwd oracle`为oracle用户设置密码。 #### 五、系统配置 1. **修改内核参数** - 编辑`/etc/...

    unix和linux下的oracle数据库管理

    最后,书中可能还会涵盖一些自动化和脚本编写技巧,如使用shell脚本来自动化日常任务,或者利用Perl、Python等语言进行更复杂的数据库操作。这将帮助DBA提高工作效率,减少人为错误。 总的来说,“Unix和Linux下的...

    NT下Perl访问Oracle所需模块.rar

    为了使Perl能够与Oracle数据库进行通信,我们需要一个名为DBD::Oracle的Perl模块。DBD(Database Driver)是Perl DBI(Database Independent Interface)的一部分,DBI是Perl中用于数据库操作的标准接口。DBD::...

    Oracle_RDA数据库诊断调优工具配置使用手册

    2. 创建 RDA 目录:在数据库服务器上创建一个 RDA 目录,确保该目录具有足够的空间可用。 3. 上传安装文件:将下载到的安装文件上传到服务器上。 4. 解压文件:解压安装文件,创建 rda 目录和 readme.txt 文件。 5. ...

    Perl实现文件及数据库访问

    标题“Perl实现文件及数据库访问”揭示了这个主题主要关注如何使用Perl编程语言来操作文件以及与数据库进行交互。Perl是一种强大的脚本语言,尤其在处理文本和系统管理任务方面非常出色。在这个主题中,我们将深入...

    神奇的perl与使用Perl编写CGI程序合集 PDF

    通过"神奇的Perl-最佳PERL入门教程",你将学习到如何声明和使用Perl变量,理解引用和数组的概念,以及如何编写子程序。同时,书中的示例代码将帮助你实践这些理论知识,从而巩固学习成果。 "CGI编程_使用Perl(jb51...

Global site tag (gtag.js) - Google Analytics