成功创建oraExcel包后,最后创建使用包的存储过程,实现把数据表里的字符型、日期型和数值型分别传到Excel工作表里,对数值型数据进行统计和使用Excel中的图表。该过程具体操作步骤为:
- 创建Excel对象。
- 建立表头,设置列宽。
- 将游标数据传到工作表。
- 画表格。
- 设置字体属性。
- 插入图表。
- 保存为Excel格式文件,关闭Excel对象。
如下为dp_toExcel存储过程:
create OR REPLACE PROCEDURE dp_ToExcel IS CURSOR c1 IS select ITS_ID,ITS_DATE,ITS_TOTAL FROM IT_SALE_TAB; n BINARY_INTEGER:=2; i BINARY_INTEGER; filename VARchar2(255); cellIndex VARchar2(40); cellValue VARchar2(40); cellColumn VARchar2(10); returnedTime VARchar2(20); currencyvalue DOUBLE PRECISION; dateValue DATE; xlThin BINARY_INTEGER:=2; xlEdgeLeft BINARY_INTEGER:=7; xlEdgeTop BINARY_INTEGER:=8; xlEdgeBottom BINARY_INTEGER:=9; xlEdgeRight BINARY_INTEGER:=10; xlInsideVertical BINARY_INTEGER:=11; xlInsideHorizontal BINARY_INTEGER:=12; BEGIN i:=oraExcel.createExcelWorkSheet(’’); i:=oraExcel.setCellValues(’A2’, ’序号’, ’BSTR’); i:=oraExcel.setCellValues(’B2’, ’日期’, ’BSTR’); i:=oraExcel.setCellValues(’C2’, ’销售’, ’BSTR’); cellValue:=c1_rec.ITS_TOTAL; currencyValue:=cellValue; i:=oraExcel.setCellValuesReal(cellIndex, currencyValue, ’CY’); n:=n+1; END LOOP; i:=oraExcel.setCellValues(’A’||n,’合计’,’BSTR’); i:=oraExcel.setCellValues(’C’||n,’=SUM(C3:C’||to_char(n-1)||’)’,’BSTR’); — 画表格 i:=oraExcel.setCellLines(’A1:C’||n,xlEdgeLeft,xlThin,’I2’); i:=oraExcel.setCellLines(’A1:C’||n,xlEdgeTop,xlThin,’I2’); i:=oraExcel.setCellLines(’A1:C’||n,xlEdgeBottom,xlThin,’I2’); i:=oraExcel.setCellLines(’A1:C’||n,xlEdgeRight,xlThin,’I2’); i:=oraExcel.setCellLines(’A1:C’||n,xlInsideVertical,xlThin,’I2’); i:=oraExcel.setCellLines(’A1:C’||n,xlInsideHorizontal,xlThin,’I2’); — 设置字体属性 i:=oraExcel.setCellFont(’A1:C1’,’Size’,20,’I2’); i:=oraExcel.setCellFont(’A1:C1’,’Bold’,1,’I2’); i:=oraExcel.callMethod(’A1:C1’,’Merge’); — 合并单元格 i:=oraExcel.setCellValues(’A1:C1’,’合计’,’BSTR’); — 插入图表 i:=oraExcel.setCellColWidth(’B:B’, 12.75,’CY’); — 设置列宽 i:=oraExcel.setCellColWidth(’C:C’, 12.75,’CY’); n:=3; For c1_rec IN c1 LOOP cellColumn:=TO_char(n); cellIndex:= ’A’||cellColumn; cellValue:= TO_char(c1_rec.ITS_ID); i:=oraExcel.setCellValues(cellIndex, cellValue, ’BSTR’); cellIndex:= ’B’ || cellColumn; dateValue:=c1_rec.ITS_DATE; i:=oraExcel.setCellValues(cellIndex, dateValue, ’DATE’); cellIndex:= ’C’ || cellColumn; i:=oraExcel.insertchart(350,200,250,250,’C3:C’||TO_char(n-1),’xlPie’); select TO_char(SYSDATE, ’HH24MISS’) INTO returnedTime FROM dual; filename:=’D:testExcel’ || returnedTime || ’.xls’; i:=oraExcel.SaveToFile(filename); — 保存文件 i:=oraExcel.closeExcel(); — 关闭对象 END; |
小结
本文介绍如何从PL/SQL中直接调用C程序的外部例程,并以操作Excel对象为示例。在调用该外部例程时,有如下相关的限制:
操作系统必需支持动态链接库(DLL)和共享库功能。
监听器和extproc进程必须运行在数据库所在的同一台机子上,不支持远程数据库。
extproc唯一支持的是C例程,但可以通过先调用C外部例程去使用其它对象(如:COM对象)。
除了限制外,调用外部例程会引起额外的系统资源开销,在使用外部例程之前要考虑是否一定要用到外部例程。
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
作者
相关推荐
-
甲骨文自治数据库亮相 带来云计算新希望
早前甲骨文还不在云计算公司之列,而现在该公司正在迅速弥补其失去的时间。甲骨文的云计算核心是甲骨文自治数据库(O […]
-
2017年12月数据库流行度排行榜 定格岁末排名瞬间
数据库知识网站DB-engines最近更新的2017年12月份数据库流行度排名情况是否能提供更多的看点呢?TechTarget数据库网站将与您分享12月份的榜单排名情况,让我们拭目以待。
-
2017年11月数据库流行度排行榜 半数以上数据库积分减少
数据库知识网站DB-engines更新了2016年11月份的数据库流行度排行榜。TechTarget数据库网站将与您一同关注11月份的榜单排名情况。
-
控制合约 不再畏惧Oracle
许多公司都与Oracle有无限制授权协议,他们害怕离开这个协议,所以就证明他们在使用Oracle的软件,即使因为需求单独购买部分授权许可也可能总体是省钱的。