我没有问题将数据写入预定义目录中存储的 Excel 工作表中。
现在我有 10 组数据,对于每组数据,我需要创建 10 个单独的 Excel 工作表。 但我想要创建一个包含 sheet1、sheet2、...、sheet10 的工作簿,其中包含所有 10 组记录。如果我的问题不清楚,请告诉我。
我正在使用 PL/SQL Oracle 9i。
以下是适用于一组数据的代码。如果我有更多的数据集,我不想有多个 Excel 工作表,而是想要一个具有不同 sheet 的工作簿。
现在我有 10 组数据,对于每组数据,我需要创建 10 个单独的 Excel 工作表。 但我想要创建一个包含 sheet1、sheet2、...、sheet10 的工作簿,其中包含所有 10 组记录。如果我的问题不清楚,请告诉我。
我正在使用 PL/SQL Oracle 9i。
以下是适用于一组数据的代码。如果我有更多的数据集,我不想有多个 Excel 工作表,而是想要一个具有不同 sheet 的工作簿。
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;
EXIT WHEN C1%NOTFOUND;
/* THIS WILL PRINT THE RECORDS IN EXCEL SHEET AS PER THE QUERY IN CURSOR */
UTL_FILE.PUT_LINE(FILENAME,
'"' || VARC1.COL1 || '"' || ' ,' || '"' ||
VARC1.COL2 || '"' || ' ,' || '"' ||
VARC1.COL3 || '"' || ' ,' || '"' ||
VARC1.COL4 || '"' || ' ,' || '"' ||
VARC1.COL5|| '"');
END LOOP;
UTL_FILE.FCLOSE(FILENAME);
END SP_ORACLE_EXCEL;