在Oracle中使用PL/SQL操作COM对象
2007-05-06 12:08:26 来源:WEB开发网成功创建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: estExcel’ || returnedTime || ’.xls’;
i:=oraExcel.SaveToFile(filename); -- 保存文件
i:=oraExcel.closeExcel(); -- 关闭对象
END;
小结
本文介绍如何从PL/SQL中直接调用C程序的外部例程,并以操作Excel对象为示例。在调用该外部例程时,有如下相关的限制:
·操作系统必需支持动态链接库(DLL)和共享库功能。
·监听器和extproc进程必须运行在数据库所在的同一台机子上,不支持远程数据库。
·extproc唯一支持的是C例程,但可以通过先调用C外部例程去使用其它对象(如:COM对象)。
除了限制外,调用外部例程会引起额外的系统资源开销,在使用外部例程之前要考虑是否一定要用到外部例程。
- ››使用linux中的quota教程
- ››oracle 中 UPDATE nowait 的使用方法
- ››Oracle ORA-12560解决方法
- ››Oracle 10g RAC 常用维护命令
- ››Oracle如何在ASM中定位文件的分布
- ››使用jxl生成带动态折线图的excel
- ››Oracle的DBMS_RANDOM.STRING 的用法
- ››oracle 外部表导入时间日期类型数据,多字段导入
- ››Oracle中查找重复记录
- ››oracle修改用户登录密码
- ››Oracle创建删除用户、角色、表空间、导入导出等命...
- ››Oracle中登陆时报ORA-28000: the account is lock...
更多精彩
赞助商链接