相关疑难解决方法(0)

使用PL/SQL创建Excel文件(.xlsx)

关于我之前的问题返回显式游标的SQL语句,我能够(.xls)使用DBMS_SQL和生成一个Excel 文件UTL_FILE并传递SYS_REFCURSOR(代码在上一个问题中).但是,我遇到的一个挑战是生成的文件超过25 MB.我将通过电子邮件将其传输给业务用户,它肯定会填满他们的邮箱大小.当我手动提取xlsx使用SQL Developer它时,只生成大约4 MB的数据.

要解决这个问题,是否可以通过PL/SQL以下方式进行?

  1. 使用更高版本的Excel(.xlsx)生成文件以压缩大小
  2. .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)

oracle excel plsql

8
推荐指数
1
解决办法
3万
查看次数

使用Oracle中的UTL_FILE包在ExcelSheet中编写

我在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)

oracle plsql

4
推荐指数
1
解决办法
2万
查看次数

标签 统计

oracle ×2

plsql ×2

excel ×1