Este ejemplo va más alla a la simple salida separada por comas (,) que se traduce a un archivo .CSV ya que nos permite tener varias pestañas (sheets) dentro de nuestro libro de excel.
Aquí vamos......
Los pasos a seguir son:
1.- Crea un archivo .sql con el siguiente nombre "xls.sql".
2.- Copia y pega el siguiente código SQL en el archivo creado en el paso 1.
---INICIO DEL CÓDIGO
--CONFIGURACION DE SQL PLUS
----------------------------------------------------
CLEAR BREAK COMPUTE;
REPFOOTER OFF;
SET HEADING OFF;
SET TIMING OFF VERI OFF SPACE 1 FLUSH ON PAUSE OFF TERMOUT ON NUMWIDTH 10;
SET TRIMSPOOL ON TRIMOUT ON DEFINE "&" CONCAT "." SERVEROUTPUT ON;
SET UNDERLINE OFF
SET LONG 1000000000 LONGC 60000
SET ECHO OFF;
SET FEEDBACK 1;
SET HEAD OFF;
SET LINES 9000;
SET PAGES 10000;
SET TERMOUT OFF;
SET TRIMSP ON;
SET FEED OFF;
SET LINE 400;
----------------------------------------------------
--CREACION DEL ARCHIVO DE SALIDA .XML
----------------------------------------------------
SPOOL xls.xml;
----------------------------------------------------
--CABECERA DEL ARCHIVO XML
----------------------------------------------------
PROMPT <?xml version="1.0"?>
PROMPT <?mso-application progid="Excel.Sheet"?>
PROMPT <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
PROMPT xmlns:o="urn:schemas-microsoft-com:office:office"
PROMPT xmlns:x="urn:schemas-microsoft-com:office:excel"
PROMPT xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
PROMPT xmlns:html="http://www.w3.org/TR/REC-html40">
PROMPT <DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">
PROMPT <Created>2006-00-12T12:46:56Z</Created>
PROMPT <LastSaved>2006-00-12T12:49:13Z</LastSaved>
PROMPT <Version>12.00</Version>
PROMPT </DocumentProperties>
PROMPT <OfficeDocumentSettings xmlns="urn:schemas-microsoft-com:office:office">
PROMPT <RemovePersonalInformation/>
PROMPT </OfficeDocumentSettings>
PROMPT <ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
PROMPT <WindowHeight>7815</WindowHeight>
PROMPT <WindowWidth>14880</WindowWidth>
PROMPT <WindowTopX>360</WindowTopX>
PROMPT <WindowTopY>300</WindowTopY>
PROMPT <ProtectStructure>False</ProtectStructure>
PROMPT <ProtectWindows>False</ProtectWindows>
PROMPT </ExcelWorkbook>
PROMPT <Styles>
PROMPT <Style ss:ID="Default" ss:Name="Normal">
PROMPT <Alignment ss:Vertical="Bottom"/>
PROMPT <Borders/>
PROMPT <Font ss:FontName="Calibri" x:Family="Swiss" ss:Size="11" ss:Color="#000000"/>
PROMPT <Interior/>
PROMPT <NumberFormat/>
PROMPT <Protection/>
PROMPT </Style>
PROMPT <Style ss:ID="s81">
PROMPT <Borders>
PROMPT <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
PROMPT <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
PROMPT <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
PROMPT <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
PROMPT </Borders>
PROMPT </Style>
PROMPT <Style ss:ID="s82">
PROMPT <Borders>
PROMPT <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
PROMPT <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
PROMPT <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
PROMPT <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
PROMPT </Borders>
PROMPT <Font ss:FontName="Calibri" x:Family="Swiss" ss:Size="11" ss:Color="#4F81BD"
PROMPT ss:Bold="1"/>
PROMPT <Interior ss:Color="#BFBFBF" ss:Pattern="Solid"/>
PROMPT </Style>
PROMPT </Styles>
----------------------------------------------------
--FIN DE LA CABECERA ARCHIVO XML
----------------------------------------------------
PROMPT <Worksheet ss:Name="MIS TABLAS">
PROMPT <Table ss:ExpandedColumnCount="1000" ss:ExpandedRowCount="10000000" x:FullColumns="1"
PROMPT x:FullRows="1" ss:DefaultColumnWidth="100" ss:DefaultRowHeight="15">
PROMPT <Row ss:Index="5">
PROMPT <Cell ss:StyleID="s82"><Data ss:Type="String">NOMBRE TABLA</Data></Cell>
PROMPT <Cell ss:StyleID="s82"><Data ss:Type="String">TABLESPACE</Data></Cell>
PROMPT <Cell ss:StyleID="s82"><Data ss:Type="String">ULTIMO ANALISIS</Data></Cell>
PROMPT </Row>
SELECT
'<Row>'||
'<Cell ss:StyleID="s81"><Data ss:Type="String">'||table_name||'</Data></Cell>',
'<Cell ss:StyleID="s81"><Data ss:Type="String">'||tablespace_name||'</Data></Cell>',
'<Cell ss:StyleID="s81"><Data ss:Type="String">'||last_analyzed||'</Data></Cell>'
||'</Row>'
FROM user_tables
/
PROMPT </Table>
PROMPT <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel"><PageSetup><Header x:Margin="0.3"/><Footer x:Margin="0.3"/>
PROMPT <PageMargins x:Bottom="0.75" x:Left="0.7" x:Right="0.7" x:Top="0.75"/></PageSetup><Print><ValidPrinterInfo/><PaperSizeIndex>9</PaperSizeIndex>
PROMPT <HorizontalResolution>200</HorizontalResolution><VerticalResolution>200</VerticalResolution></Print><Selected/>
PROMPT <Panes><Pane><Number>3</Number><ActiveRow>1</ActiveRow></Pane></Panes><ProtectObjects>False</ProtectObjects><ProtectScenarios>False</ProtectScenarios></WorksheetOptions>
PROMPT </Worksheet>
-----------------------------------------------
PROMPT <Worksheet ss:Name="MIS INDICES">
PROMPT <Table ss:ExpandedColumnCount="1000" ss:ExpandedRowCount="10000000" x:FullColumns="1"
PROMPT x:FullRows="1" ss:DefaultColumnWidth="100" ss:DefaultRowHeight="15">
PROMPT <Row ss:Index="5">
PROMPT <Cell ss:StyleID="s82"><Data ss:Type="String">NOMBRE INDICE</Data></Cell>
PROMPT <Cell ss:StyleID="s82"><Data ss:Type="String">TIPO</Data></Cell>
PROMPT <Cell ss:StyleID="s82"><Data ss:Type="String">TABLESPACE</Data></Cell>
PROMPT <Cell ss:StyleID="s82"><Data ss:Type="String">PROPIETARIO TABLA</Data></Cell>
PROMPT <Cell ss:StyleID="s82"><Data ss:Type="String">TABLA</Data></Cell>
PROMPT </Row>
SELECT
'<Row>'||
'<Cell ss:StyleID="s81"><Data ss:Type="String">'||index_name||'</Data></Cell>',
'<Cell ss:StyleID="s81"><Data ss:Type="String">'||index_type||'</Data></Cell>',
'<Cell ss:StyleID="s81"><Data ss:Type="String">'||tablespace_name||'</Data></Cell>',
'<Cell ss:StyleID="s81"><Data ss:Type="String">'||table_owner||'</Data></Cell>',
'<Cell ss:StyleID="s81"><Data ss:Type="String">'||table_name||'</Data></Cell>'
||'</Row>'
FROM user_indexes
/
PROMPT </Table>
PROMPT <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel"><PageSetup><Header x:Margin="0.3"/><Footer x:Margin="0.3"/>
PROMPT <PageMargins x:Bottom="0.75" x:Left="0.7" x:Right="0.7" x:Top="0.75"/></PageSetup><Print><ValidPrinterInfo/><PaperSizeIndex>9</PaperSizeIndex>
PROMPT <HorizontalResolution>200</HorizontalResolution><VerticalResolution>200</VerticalResolution></Print><Selected/>
PROMPT <Panes><Pane><Number>3</Number><ActiveRow>1</ActiveRow></Pane></Panes><ProtectObjects>False</ProtectObjects><ProtectScenarios>False</ProtectScenarios></WorksheetOptions>
PROMPT </Worksheet>
-----------------------------------------------
PROMPT </Workbook>
SPOOL OFF;
---FIN DEL CODIGO
3.- Crea una sesión en tu base de datos a través del SQL*Plus con cualquier usuario.
4.- Invoca el archivo .sql creado en el paso 1
SQL>@xls.sql
5.- El archivo .sql crea otro archivo con nombre "xls.xml" este archivo abrelo con el excel.
6.- Saludos