
-- see http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:728625409049

Rem
Rem $Id$
Rem
Rem  Copyright (c) 1991, 1996, 1997 by Oracle Corporation
Rem    NAME
Rem      owasylk.sql - Dump to Spreadsheet with formatting
Rem   DESCRIPTION
Rem     This package provides an API to generate a file in the
Rem     SYLK file format.  This allow for formatting in a 
Rem     spreadsheet with only a ascii text file.  This version 
Rem     of owa_sylk is specific to Oracle8.
Rem   NOTES
Rem
Rem   MODIFIED     (MM/DD/YY)
Rem     clbeck      04/08/98  - Created.
Rem     tkyte       09/10/00  - Made it use UTL_FILE.
Rem
Rem

/*
  This package allows you to send the results of any query to 
  a spreadsheet using UTL_FILE

  parameters:
    p_query        - a text string of the query.  The query 
                     can be parameterized
                     using the :VARAIBLE syntax.  See example 
                     below.

    p_parm_names   - an owaSylkArray of the paramter names 
                     used as bind variables in p_query

    p_parm_values  - an owaSylkArray of the values of the 
                     bind variable names.  The values
                     muse reside in the same index as the 
                     name it corresponds to.

    p_cursor       - an open cursor that has had the query 
                     parsed already.

    p_sum_column   - a owaSylkArray of 'Y's and 'N's 
                     corresponding to the location
                     of the columns selected in p_query.  
                     A value of NYNYY will result
                     in the 2nd, 4th and 5th columns being 
                     summed in the resulting
                     spreadsheet.

    p_max_rows     - the maxium number of row to return.

    p_show_null_as - how to display nulls in the spreadsheet

    p_show_grid    - show/hide the grid in the spreadsheet.

    p_show_col_headers - show/hide the row/column headers 
                         in the spreadsheet.

    p_font_name    - the name of the font

    p_widths       - a owaSylkArray of column widths.  This 
                     will override the default column widths.

    p_headings     - a owaSylkArray of column titles.  
                     This will override the default column 
                     titles.

    p_strip_html   - this will remove the HTML tags from the 
                     results before
                     displaying them in the spreadsheet cells.
                     Useful when the
                     query selects an anchor tag. Only the 
                     text between <a href>
                     and </a> tags will be sent to the 
                     spreadsheet.

*/


--  examples:

--    This example will create a spreadsheet of all the MANAGERS 
--    in the scott.emp table and will sum up the salaries 
--    and commissions for them.  No grid will be in the 
--    spreadsheet.

    

declare
    output utl_file.file_type;
begin
    output := utl_file.fopen( 'DEVTEST_TEMP_DIR', 'emp1.slk', 'w', 32000 );

    sylk_util_pkg.show(
        p_file => output,
        p_query => 'select empno id, ename employee, sal Salary, comm commission from emp where job = :JOB and sal > :SAL',
        p_parm_names => sylk_util_pkg.owaSylkArray( 'JOB', 'SAL'),
        p_parm_values => sylk_util_pkg.owaSylkArray( 'MANAGER', '2000' ),
       p_sum_column => sylk_util_pkg.owaSylkArray( 'N', 'N', 'Y', 'Y'),
        p_show_grid => 'NO' );

    utl_file.fflush ( output );
    utl_file.fclose ( output );
end;



--    This example will create the same spreadsheet but will 
--    send in a pre-parsed cursor instead

declare
    l_cursor number := dbms_sql.open_cursor;
    output utl_file.file_type;
begin
    output := utl_file.fopen( 'DEVTEST_TEMP_DIR', 'emp2.slk', 'w',32000 );

    dbms_sql.parse( l_cursor, 'select empno id, ename employee, sal Salary, comm commission from emp where job = ''MANAGER'' and sal > 2000', dbms_sql.native );

    sylk_util_pkg.show(
        p_file => output ,
        p_cursor => l_cursor,
        p_sum_column => sylk_util_pkg.owaSylkArray( 'N', 'N', 'Y', 'Y' ),
        p_show_grid => 'NO' );

    dbms_sql.close_cursor( l_cursor );
    utl_file.fflush ( output );
    utl_file.fclose ( output );
    
end;
