关于我之前的问题返回显式游标的SQL语句,我能够(.xls)
使用DBMS_SQL
和生成一个Excel 文件UTL_FILE
并传递SYS_REFCURSOR
(代码在上一个问题中).但是,我遇到的一个挑战是生成的文件超过25 MB.我将通过电子邮件将其传输给业务用户,它肯定会填满他们的邮箱大小.当我手动提取xlsx
使用SQL Developer
它时,只生成大约4 MB的数据.
要解决这个问题,是否可以通过PL/SQL
以下方式进行?
.xlsx
)生成文件以压缩大小.xls
在传输之前压缩文件我也在这里回顾了类似的帖子,例如在Oracle中使用UTL_FILE包在ExcelSheet中编写,但正如答案所述,它需要使用Java.所以它不适用于我.另一篇文章,即从Oracle数据库创建Excel电子表格,也在使用xls
.所以它也不适用.
有什么想法吗?
Oracle版本:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
PL/SQL Release 11.2.0.4.0 - Production
"CORE 11.2.0.4.0 Production"
TNS for Solaris: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production
Run Code Online (Sandbox Code Playgroud) 我在excel表中写入数据没有问题,它存储在一些预定义的目录中.
现在我有10组数据,每组我必须创建10个单独的excel表.但我想要的是创建工作簿conating sheet1,sheet2.Sheet10.这将有10套记录.如果我的问题不明确,请告诉我.
我正在使用PL/SQL Oracle 9i
我的代码将为一组数据写入excel.如果我有更多的数据集并且我不想拥有多个excel表而是我想要一个带有差异表的工作簿,该怎么办?
CREATE OR REPLACE PROCEDURE SP_ORACLE_EXCEL(I_FILE_NAME IN VARCHAR2) AS
FILENAME UTL_FILE.FILE_TYPE;
FILENAME1 VARCHAR2(1000);
CURSOR C1 IS
SELECT * FROM MY_TABLE;
VARC1 C1%ROWTYPE;
BEGIN
FILENAME1 := 'TEST_' || I_FILE_NAME || '_' || SYSDATE || '.CSV';
FILENAME := UTL_FILE.FOPEN('TEMP_DIR', FILENAME1, 'W');
/* THIS WILL CREATE THE HEADING IN EXCEL SHEET */
UTL_FILE.PUT_LINE(FILENAME,
'HEADER1' || ',' || 'HEADER2' || ',' || 'HEADER3' || ',' ||
'HEADER4' || ',' || 'HEADER5');
OPEN C1;
LOOP
FETCH C1
INTO VARC1; …
Run Code Online (Sandbox Code Playgroud)