(SQLPlus) SPOOL

(SQLPlus) SPOOL
HI,
can anyone help me on this? i want to create a csv file that will have a certain filename coming from a variable from a query. the ff codes does not work :( any help pls! THANKS in advance
BROKEN
select customer_name into v_name from demo_customers where cust_id = 1;
SPOOL ..\data\order_&v_name&.csv
SELECT
order_id || ',' ||
order_total || ',' ||
order_datetime
FROM
demo_orders
WHERE
customer_id =1;
SPOOL OFF;
exit;
------------------------------------------------------------------------------------------------------------------

to a bind variable yes, in plsql. To a "define" variable no.
SQL> var n number
SQL> set autopri on
SQL> exec select 1+1 into :n from dual;
PL/SQL procedure successfully completed.
         N
         2

Similar Messages

  • Sqlplus – spool data to a flat file

    Hi,
    Does any oracle expert here know why the sqlplus command could not spool all the data into a flat file at one time.
    I have tried below command. It seems like every time I will get different file size :(
    a) sqlplus -s $dbUser/$dbPass@$dbName <<EOF|gzip -c > ${TEMP_FILE_PATH}/${extract_file_prefix}.dat.Z
    b) sqlplus -s $dbUser/$dbPass@$dbName <<EOF>> spool.log
    set feedback off
    set trims on
    set trim on
    set feedback off
    set linesize 4000
    set pagesize 0
    whenever sqlerror exit 173;
    spool ${extract_file_prefix}.dat

    For me, this is working. What exactly are you getting and what exactly are you expecting?
    (t352104@svlipari[GEN]:/lem) $ cat test.ksh
    #!/bin/ksh
    TEMP_FILE_PATH=`pwd`
    extract_file_prefix=emp
    dbUser=t352104
    dbPass=t352104
    dbName=gen_dev
    dataFile=${TEMP_FILE_PATH}/${extract_file_prefix}.dat
    sqlplus -s $dbUser/$dbPass@$dbName <<EOF > $dataFile
    set trims on
    set trim on
    set tab off
    set linesize 7000
    SET HEAD off AUTOTRACE OFF FEEDBACK off VERIFY off ECHO off SERVEROUTPUT off term off;
    whenever sqlerror exit 173;
    SELECT *
    FROM emp ;
    exit
    EOF
    (t352104@svlipari[GEN]:/lem) $ ./test.ksh
    (t352104@svlipari[GEN]:/lem) $ echo $?
    0
    (t352104@svlipari[GEN]:/lem) $ cat emp.dat
          7369 SMITH      CLERK           7902 17-DEC-80        800                    20
          7499 ALLEN      SALESMAN        7698 20-FEB-81       1600        300         30
          7521 WARD       SALESMAN        7698 22-FEB-81       1250        500         30
          7566 JONES      MANAGER         7839 02-APR-81       2975                    20
          7654 MARTIN     SALESMAN        7698 28-SEP-81       1250       1400         30
          7698 BLAKE      MANAGER         7839 01-MAY-81       2850                    30
          7782 CLARK      MANAGER         7839 09-JUN-81       2450                    10
          7788 SCOTT      ANALYST         7566 09-DEC-82       3000                    20
          7839 KING       PRESIDENT            17-NOV-81       5000                    10
          7844 TURNER     SALESMAN        7698 08-SEP-81       1500          0         30
          7876 ADAMS      CLERK           7788 12-JAN-83       1100                    20
          7900 JAMES      CLERK           7698 03-DEC-81        950                    30
          7902 FORD       ANALYST         7566 03-DEC-81       3000                    20
          7934 MILLER     CLERK           7782 23-JAN-82       1300                    10
    (t352104@svlipari[GEN]:/lem) $

  • SQLPLUS spool to create .dat files - problems

    I am using spool from sqlplus to generate
    .dat files for sqlldr. The problem is with
    numeric fields. I have SET numwidth, numformat to no avail. The fields defined with specific numeric size number(n) always get spooled with a longer column size.
    Also, the COLSEP character does not appear
    after all columns. Any ideas out there ?
    (I realize export/import is an easier solution )

    Try using TO_CHAR, LPAD, SUBSTR and other character functions to achieve the same. Also, if you have not SET HEAD OFF, then do that, or use alias for the formatted columns in case you need headings.

  • Sqlplus Spool without extension

    Hello
    the answer is in the title
    I want to konw if it's possible to Spool a filename without extension in sqlplus commandline
    Spool Toto
    Select ...
    Spool Off
    is it possible to have a result file name toto and not toto.lst??
    Thank

    the answer is in the titleFine then ;-)
    I do not have a solution to your problem. You can create toto.txt or any other extension
    spool .toto
    prompt what a nice file
    spool off

  • SQLPlus: Spool is wrapping lines at 80 chars when linesize = 1000

    I have following code and the result wrap off at 80 . Please suggest ways to avoid it. Thanks
    set define on
    set echo off
    set pages 10000
    set heading off
    set lines 1000
    set long 10000
    set heading on
    set feedback off
    set heading off
    set verify off
    set trimspool on
    set linesize 1000
    set wrap off
    spool c:\spooltext5.xml;
    SELECT NYTD_XML_DATA FROM NYTD_DATA_TEMP;
    spool off
    exit;

    Used Column formating and solved the issue
    column NYTD_XML_DATA new_value NYTD_XML_DATA format a1000;
    spool c:\spooltext5.xml;
    SELECT NYTD_XML_DATA FROM NYTD_DATA_TEMP;
    spool off
    Thanks

  • Sqlplus SPOOL broken.  Urgent help.

    I have never seen this before.
    I am running a spool of a small query. It returns 7 rows and they are displayed. I go to look at the .lst file and the first row is gone from the spooled .lst file. I have tried this multiple times, and the results vary- sometimes it removes the first row and sometimes it removes the first column of data form the first row.
    ??????????????? Any idea where to start looking for trouble other than the alert.log?

    > Urgent help.
    My usual soapbox response (again).
    Please do not call your problem urgent. Why?
    Because you are saying that your problem is more important and more deserving attention than other people who post problems here. That is just a rude and arrogant thing to do. Your problem is by no means more important than any other person's problem in this forum - as you are in no position to compare and judge that.
    You are also demanding a quick response from those here that assist people like you. You have no right to demand anything as paid professionals are giving you their free time in assisting you. How can you claim that they must be "quick-quick" in spending their free time, without any payment, to assist you?
    So, practice some netiquette and remember that this is a PUBLIC forum and "staffed" by volunteers.

  • How to spool DBMS_OUTPUT.PUT_LINE from SqlPlus?

    Hi,
    i have a stored procedure test:
    procedure test is
    begin
    dbms_output.put_line('Test');
    dbms_output.put_line('Test2');
    dbms_output.put_line('Test3');
    dbms_output.put_line('Test4');
    dbms_output.put_line('Test5');
    end;
    I start the stored procedure out of sqlplus:
    spool C:\Temp\test.spl;
    exec test;
    commit;
    spool off;
    exit;
    My problem is no Test or Test2 appeared in the spool file.
    What should i do?
    thanks a lot

    create or replace procedure hmm as
    begin
    dbms_output.put_line('Test1');
    dbms_output.put_line('Test2');
    dbms_output.put_line('Test3');
    dbms_output.put_line('Test4');
    dbms_output.put_line('Test5');
    end;
    spool C:\Temp\test.spl;
    exec hmm;
    spool off;File content is:
    Test1
    Test2
    Test3
    Test4
    Test5
    PL/SQL procedure successfully completed.

  • How to spool out put of multiple scripts and get a single spool file output

    Hi,
    I have one master script that calls three other scripts. The three scripts each produce their own spool files. But I would like to have the master script also produce one single output (in addition to the three indiviual output I mean). How to do that? Can you please help.
    Following are the scripts:
    --m.sql (master script)
    spool c:\m.log
    @1.sql
    @2.sql
    @3.sql
    spool off
    --1.sql
    spool c:\1.log
    insert into test values(1);
    commit;
    spool off
    --2.sql
    spool c:\2.log
    insert into test values(2);
    commit;
    spool off
    spool c:\3.log
    insert into test values(3);
    commit;
    spool off
    --table used
    SQL> desc test
    Name                                      Null?    Type
    A                                                  NUMBERWhen I run the above script m.sql it does produce the other 3 log files (1.log,2.log etc) but m.log (which is master log file which should have output of each of the three calling script) is empty file with 0 byte!
    Thanks
    Edited by: orausern on May 1, 2011 3:17 AM

    I have one master script that calls three other scripts. The three scripts each produce their own spool files. But I would like to have the master script also produce one single output (in addition to the three indiviual output I mean). How to do that? Can you please help. Not sure if that's possible directly with sqlplus spool option
    When you spool to a different file in a single session, sqlplus stops writing to earlier spool file and redirects the output to the file specified in last spool command.
    at the end of the script, however, below may help
    host type c:\1.log >> c:\m.log
    host type c:\2.log >> c:\m.log
    host type c:\3.log >> c:\m.log

  • How to remove trailing spaces in SQL PLUS spool

    Hi,
    I've requirement to pull data from tables and I'm using sqlplus spool to automate data fetch from various tables:
    I'm using the following script for the same :
    set echo off
    set feedback off
    set pagesize 0
    set linesize 2000
    set heading on
    set trimspool on
    Spool table1.TXT;
    prompt col1|col2|col3|col4|col5
    select
    LTRIM(RTRIM(col1))||'|'||
    LTRIM(RTRIM(col2)) ||'|'||
    LTRIM(RTRIM(col3)) ||'|'||
    LTRIM(RTRIM(col4)) ||'|'||
    LTRIM(RTRIM(col5)) ||'|'||
    from TABLE1 ;
    spool off
    After using trimspool on option also I'm having trailing spaces issue how to fix it?
    Thanks,
    Mahender.
    Edited by: user518071 on Oct 11, 2010 1:05 PM

    Hi,
    do you need LTRIM/RTRIM? This is namely your problem. By using a function around your column Oracle reserves the maximum lenght for the column. So what do you get without those functions? Furthermore you are concatenating all the columns. This is also a function. For getting '|' in between columns you can also set a seperator by using
    set colsep '|'Herald ten Dam
    http://htendam.wordpress.com

  • How to use variable in Spool

    how do I pull a sequence number from the database and use it in a sqlplus spool filename...
    this is running as: sqlplus user/pass@sid@c:\file.sql
    example of the file:
    BEGIN
    declare
    V_E_NUMBER varchar2(7);
    begin
    SeLECT 'E'||lpad(RWP.E_NUMBER_seq.NEXTVAL,6,'0') INTO V_E_NUMBER FROM DUAL ;
    end;
    end;
    SeLECT 'E'||lpad(RWP.E_NUMBER_seq.CURRVAL,6,'0') INTO V_E_NUMBER FROM DUAL ;
    set echo off
    SET HEADING OFF
    SET LINESIZE 430
    set verify off
    SET PAGESIZE 0
    SET TRIMSPOOL ON
    SET timing OFF
    SET termout ON
    SET feedback OFF
    spool d:\securedASP\CORE.BU34500.AR.'||:V_E_NUMBER||'.RECEIVD
    select * from table;
    spool off

    Hi,
    Use a substitution variable for that:
    COLUMN     v_e_number     NEW_VALUE v_e
    SELECT   'E' || lpad ( RWP.E_NUMBER_seq.NEXTVAL
                        , 6
                   , '0'
                   )          AS V_E_NUMBER
    FROM    DUAL;
    SPOOL  d:\securedASP\CORE.BU34500.AR.&v_e..RECEIVD Note that this does not use PL/SQL at all.
    The variable can be used without quoting or concatenation.
    That may lead to situations where it's ambiguous regarding what is part of the variable name (the variable is named v_e in this example), and what is literal text that happens to come right after it. To resolve such questions, use a period to mark the end of the variable name.
    In your case, you want a literal period right after the variable name, so use two: the first one marks the end of the name, and the second one is taken literally.
    Look up the SQL*Plus commands
    COLUMN,
    SET CONCAT, and
    SET DEFINE
    for details.

  • Method to dump flat files (spool is slow)

    Hey all,
    I have been using spool with a bunch of set commands and it works great, but performance is a bit slow. Especially for our partitioned tables. (4.2 Mill records) Is there a better way to dump flat files?
    I want to use sqlldr to import (faster than IMP) but no good if creating the flat files is 10X slower than EXP utility.
    Any ideas?
    Thanks,
    Chris G

    If you have a multi CPU machine kick of many sqlplus spool jobs. (select from all of your partitions at the same time)
    You are doing a full table scan so you can have a large value for db_file_multiblock_read_count.
    if you want to put the spool files back together use cat on a unix machine other wise just use sqlldr on all of the files.
    Andrew

  • To run sqlplus script using forms6i

    hi forum members!
    SQLPLUS>connect username/password;
    SQLPLUS> spool d:\mydata.dat;
    SQLPLUS> select * from table1;
    SQLPLUS> spool off;
    when i check the d:\ , i found the mydata.dat file. which is the required result for me.
    now how can i get the required result using forms6i.
    all suggestions will be appreciated.
    regards.
    mustafa ghulam
    pakistan.

    hi baig.
    my form ver: Forms [32 Bit] Version 6.0.8.8.0 (Production)
    i have tried a lot of options. most of them are comment now.
    i am also pasting my bat file for you.
    in form: when-button-pressed
    DECLARE
    tmp_job varchar2(2000);     
    BEGIN     
    tmp_job := 'd:\my_data.bat';
    --HOST( 'cmd /c' || tmp_msg, no_screen);
    --HOST( 'D:\oracle\product\10.2.0\db_1\BIN\sqlplus.exe' || tmp_job, no_screen);
    --HOST( 'D:\oracle\product\10.2.0\db_1\BIN\sqlplus.exe' || tmp_job);
    --HOST('CMD /C <file_full_path>', NO_SCREEN);
    --HOST('CMD /d:\my_data.bat', NO_SCREEN);
    HOST(tmp_job);
    END;
    my_data.bat
    HOST( 'D:\oracle\product\10.2.0\db_1\BIN\sqlplus.exe';
    connect username/password;
    spool d:\mydata.dat;
    set linesize 10000;
    select * from vehicles;
    spool off;
    mustafa ghulam (teefu)
    Edited by: user_teefu on Feb 5, 2010 2:34 PM

  • 2GB OR NOT 2GB - FILE LIMITS IN ORACLE

    제품 : ORACLE SERVER
    작성날짜 : 2002-04-11
    2GB OR NOT 2GB - FILE LIMITS IN ORACLE
    ======================================
    Introduction
    ~~~~~~~~~~~~
    This article describes "2Gb" issues. It gives information on why 2Gb
    is a magical number and outlines the issues you need to know about if
    you are considering using Oracle with files larger than 2Gb in size.
    It also
    looks at some other file related limits and issues.
    The article has a Unix bias as this is where most of the 2Gb issues
    arise but there is information relevant to other (non-unix)
    platforms.
    Articles giving port specific limits are listed in the last section.
    Topics covered include:
    Why is 2Gb a Special Number ?
    Why use 2Gb+ Datafiles ?
    Export and 2Gb
    SQL*Loader and 2Gb
    Oracle and other 2Gb issues
    Port Specific Information on "Large Files"
    Why is 2Gb a Special Number ?
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Many CPU's and system call interfaces (API's) in use today use a word
    size of 32 bits. This word size imposes limits on many operations.
    In many cases the standard API's for file operations use a 32-bit signed
    word to represent both file size and current position within a file (byte
    displacement). A 'signed' 32bit word uses the top most bit as a sign
    indicator leaving only 31 bits to represent the actual value (positive or
    negative). In hexadecimal the largest positive number that can be
    represented in in 31 bits is 0x7FFFFFFF , which is +2147483647 decimal.
    This is ONE less than 2Gb.
    Files of 2Gb or more are generally known as 'large files'. As one might
    expect problems can start to surface once you try to use the number
    2147483648 or higher in a 32bit environment. To overcome this problem
    recent versions of operating systems have defined new system calls which
    typically use 64-bit addressing for file sizes and offsets. Recent Oracle
    releases make use of these new interfaces but there are a number of issues
    one should be aware of before deciding to use 'large files'.
    What does this mean when using Oracle ?
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    The 32bit issue affects Oracle in a number of ways. In order to use large
    files you need to have:
    1. An operating system that supports 2Gb+ files or raw devices
    2. An operating system which has an API to support I/O on 2Gb+ files
    3. A version of Oracle which uses this API
    Today most platforms support large files and have 64bit APIs for such
    files.
    Releases of Oracle from 7.3 onwards usually make use of these 64bit APIs
    but the situation is very dependent on platform, operating system version
    and the Oracle version. In some cases 'large file' support is present by
    default, while in other cases a special patch may be required.
    At the time of writing there are some tools within Oracle which have not
    been updated to use the new API's, most notably tools like EXPORT and
    SQL*LOADER, but again the exact situation is platform and version specific.
    Why use 2Gb+ Datafiles ?
    ~~~~~~~~~~~~~~~~~~~~~~~~
    In this section we will try to summarise the advantages and disadvantages
    of using "large" files / devices for Oracle datafiles:
    Advantages of files larger than 2Gb:
    On most platforms Oracle7 supports up to 1022 datafiles.
    With files < 2Gb this limits the database size to less than 2044Gb.
    This is not an issue with Oracle8 which supports many more files.
    In reality the maximum database size would be less than 2044Gb due
    to maintaining separate data in separate tablespaces. Some of these
    may be much less than 2Gb in size.
    Less files to manage for smaller databases.
    Less file handle resources required
    Disadvantages of files larger than 2Gb:
    The unit of recovery is larger. A 2Gb file may take between 15 minutes
    and 1 hour to backup / restore depending on the backup media and
    disk speeds. An 8Gb file may take 4 times as long.
    Parallelism of backup / recovery operations may be impacted.
    There may be platform specific limitations - Eg: Asynchronous IO
    operations may be serialised above the 2Gb mark.
    As handling of files above 2Gb may need patches, special configuration
    etc.. there is an increased risk involved as opposed to smaller files.
    Eg: On certain AIX releases Asynchronous IO serialises above 2Gb.
    Important points if using files >= 2Gb
    Check with the OS Vendor to determine if large files are supported
    and how to configure for them.
    Check with the OS Vendor what the maximum file size actually is.
    Check with Oracle support if any patches or limitations apply
    on your platform , OS version and Oracle version.
    Remember to check again if you are considering upgrading either
    Oracle or the OS in case any patches are required in the release
    you are moving to.
    Make sure any operating system limits are set correctly to allow
    access to large files for all users.
    Make sure any backup scripts can also cope with large files.
    Note that there is still a limit to the maximum file size you
    can use for datafiles above 2Gb in size. The exact limit depends
    on the DB_BLOCK_SIZE of the database and the platform. On most
    platforms (Unix, NT, VMS) the limit on file size is around
    4194302*DB_BLOCK_SIZE.
    Important notes generally
    Be careful when allowing files to automatically resize. It is
    sensible to always limit the MAXSIZE for AUTOEXTEND files to less
    than 2Gb if not using 'large files', and to a sensible limit
    otherwise. Note that due to <Bug:568232> it is possible to specify
    an value of MAXSIZE larger than Oracle can cope with which may
    result in internal errors after the resize occurs. (Errors
    typically include ORA-600 [3292])
    On many platforms Oracle datafiles have an additional header
    block at the start of the file so creating a file of 2Gb actually
    requires slightly more than 2Gb of disk space. On Unix platforms
    the additional header for datafiles is usually DB_BLOCK_SIZE bytes
    but may be larger when creating datafiles on raw devices.
    2Gb related Oracle Errors:
    These are a few of the errors which may occur when a 2Gb limit
    is present. They are not in any particular order.
    ORA-01119 Error in creating datafile xxxx
    ORA-27044 unable to write header block of file
    SVR4 Error: 22: Invalid argument
    ORA-19502 write error on file 'filename', blockno x (blocksize=nn)
    ORA-27070 skgfdisp: async read/write failed
    ORA-02237 invalid file size
    KCF:write/open error dba=xxxxxx block=xxxx online=xxxx file=xxxxxxxx
    file limit exceed.
    Unix error 27, EFBIG
    Export and 2Gb
    ~~~~~~~~~~~~~~
    2Gb Export File Size
    ~~~~~~~~~~~~~~~~~~~~
    At the time of writing most versions of export use the default file
    open API when creating an export file. This means that on many platforms
    it is impossible to export a file of 2Gb or larger to a file system file.
    There are several options available to overcome 2Gb file limits with
    export such as:
    - It is generally possible to write an export > 2Gb to a raw device.
    Obviously the raw device has to be large enough to fit the entire
    export into it.
    - By exporting to a named pipe (on Unix) one can compress, zip or
    split up the output.
    See: "Quick Reference to Exporting >2Gb on Unix" <Note:30528.1>
    - One can export to tape (on most platforms)
    See "Exporting to tape on Unix systems" <Note:30428.1>
    (This article also describes in detail how to export to
    a unix pipe, remote shell etc..)
    Other 2Gb Export Issues
    ~~~~~~~~~~~~~~~~~~~~~~~
    Oracle has a maximum extent size of 2Gb. Unfortunately there is a problem
    with EXPORT on many releases of Oracle such that if you export a large table
    and specify COMPRESS=Y then it is possible for the NEXT storage clause
    of the statement in the EXPORT file to contain a size above 2Gb. This
    will cause import to fail even if IGNORE=Y is specified at import time.
    This issue is reported in <Bug:708790> and is alerted in <Note:62436.1>
    An export will typically report errors like this when it hits a 2Gb
    limit:
    . . exporting table BIGEXPORT
    EXP-00015: error on row 10660 of table BIGEXPORT,
    column MYCOL, datatype 96
    EXP-00002: error in writing to export file
    EXP-00002: error in writing to export file
    EXP-00000: Export terminated unsuccessfully
    There is a secondary issue reported in <Bug:185855> which indicates that
    a full database export generates a CREATE TABLESPACE command with the
    file size specified in BYTES. If the filesize is above 2Gb this may
    cause an ORA-2237 error when attempting to create the file on IMPORT.
    This issue can be worked around be creating the tablespace prior to
    importing by specifying the file size in 'M' instead of in bytes.
    <Bug:490837> indicates a similar problem.
    Export to Tape
    ~~~~~~~~~~~~~~
    The VOLSIZE parameter for export is limited to values less that 4Gb.
    On some platforms may be only 2Gb.
    This is corrected in Oracle 8i. <Bug:490190> describes this problem.
    SQL*Loader and 2Gb
    ~~~~~~~~~~~~~~~~~~
    Typically SQL*Loader will error when it attempts to open an input
    file larger than 2Gb with an error of the form:
    SQL*Loader-500: Unable to open file (bigfile.dat)
    SVR4 Error: 79: Value too large for defined data type
    The examples in <Note:30528.1> can be modified to for use with SQL*Loader
    for large input data files.
    Oracle 8.0.6 provides large file support for discard and log files in
    SQL*Loader but the maximum input data file size still varies between
    platforms. See <Bug:948460> for details of the input file limit.
    <Bug:749600> covers the maximum discard file size.
    Oracle and other 2Gb issues
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~
    This sections lists miscellaneous 2Gb issues:
    - From Oracle 8.0.5 onwards 64bit releases are available on most platforms.
    An extract from the 8.0.5 README file introduces these - see <Note:62252.1>
    - DBV (the database verification file program) may not be able to scan
    datafiles larger than 2Gb reporting "DBV-100".
    This is reported in <Bug:710888>
    - "DATAFILE ... SIZE xxxxxx" clauses of SQL commands in Oracle must be
    specified in 'M' or 'K' to create files larger than 2Gb otherwise the
    error "ORA-02237: invalid file size" is reported. This is documented
    in <Bug:185855>.
    - Tablespace quotas cannot exceed 2Gb on releases before Oracle 7.3.4.
    Eg: ALTER USER <username> QUOTA 2500M ON <tablespacename>
    reports
    ORA-2187: invalid quota specification.
    This is documented in <Bug:425831>.
    The workaround is to grant users UNLIMITED TABLESPACE privilege if they
    need a quota above 2Gb.
    - Tools which spool output may error if the spool file reaches 2Gb in size.
    Eg: sqlplus spool output.
    - Certain 'core' functions in Oracle tools do not support large files -
    See <Bug:749600> which is fixed in Oracle 8.0.6 and 8.1.6.
    Note that this fix is NOT in Oracle 8.1.5 nor in any patch set.
    Even with this fix there may still be large file restrictions as not
    all code uses these 'core' functions.
    Note though that <Bug:749600> covers CORE functions - some areas of code
    may still have problems.
    Eg: CORE is not used for SQL*Loader input file I/O
    - The UTL_FILE package uses the 'core' functions mentioned above and so is
    limited by 2Gb restrictions Oracle releases which do not contain this fix.
    <Package:UTL_FILE> is a PL/SQL package which allows file IO from within
    PL/SQL.
    Port Specific Information on "Large Files"
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Below are references to information on large file support for specific
    platforms. Although every effort is made to keep the information in
    these articles up-to-date it is still advisable to carefully test any
    operation which reads or writes from / to large files:
    Platform See
    ~~~~~~~~ ~~~
    AIX (RS6000 / SP) <Note:60888.1>
    HP <Note:62407.1>
    Digital Unix <Note:62426.1>
    Sequent PTX <Note:62415.1>
    Sun Solaris <Note:62409.1>
    Windows NT Maximum 4Gb files on FAT
    Theoretical 16Tb on NTFS
    ** See <Note:67421.1> before using large files
    on NT with Oracle8
    *2 There is a problem with DBVERIFY on 8.1.6
    See <Bug:1372172>

    I'm not aware of a packaged PL/SQL solution for this in Oracle 8.1.7.3 - however it is very easy to create such a program...
    Step 1
    Write a simple Java program like the one listed:
    import java.io.File;
    public class fileCheckUtl {
    public static int fileExists(String FileName) {
    File x = new File(FileName);
    if (x.exists())
    return 1;
    else return 0;
    public static void main (String args[]) {
    fileCheckUtl f = new fileCheckUtl();
    int i;
    i = f.fileExists(args[0]);
    System.out.println(i);
    Step 2 Load this into the Oracle data using LoadJava
    loadjava -verbose -resolve -user user/pw@db fileCheckUtl.java
    The output should be something like this:
    creating : source fileCheckUtl
    loading : source fileCheckUtl
    creating : fileCheckUtl
    resolving: source fileCheckUtl
    Step 3 - Create a PL/SQL wrapper for the Java Class:
    CREATE OR REPLACE FUNCTION FILE_CHECK_UTL (file_name IN VARCHAR2) RETURN NUMBER AS
    LANGUAGE JAVA
    NAME 'fileCheckUtl.fileExists(java.lang.String) return int';
    Step 4 Test it:
    SQL> select file_check_utl('f:\myjava\fileCheckUtl.java') from dual
    2 /
    FILE_CHECK_UTL('F:\MYJAVA\FILECHECKUTL.JAVA')
    1

  • High performance CSV export

    Hi,
    I have been looking for a way to export huge datasets to CSV format for import with MySql.
    As sqlplus SPOOL turned out to be slow and difficult to use, I ended up coding my own importer using the OCCI library.
    I successfully compiled my code under Red Hat Enterprise Linux 6, 64 bit, and Oracle Instant Client 12.1. But as it only uses C++ STL and OCCI, it should as well build under other environments (e.g. Windows).
    Here's the code:
    * ociexport.cpp - High performance ORACLE to CSV export (using OCCI and STL)
    * This program takes the ORACLE connection information from the following
    * environment variables:
    * ORACLE_USER, ORACLE_PASS, ORACLE_CONN
    * Fields are exported in a CSV with delimiter ';'. Semicola within the fields
    * are escaped with '\;'. Newlines and tabs in the fields are replaced by blanks.
    * Empty fields and NULL values are exported as '\N' for easy MySQL import.
    * CLOBS are exported as well. BLOBS and BFILES are not supported atm.
    * Don't forget to set the LD_LIBRARY_PATH to your Oracle Client libs when
    * building and running this program.
    * @param $1 Select-Statement
    * @param $2 Output file (optional - if empty, output goes to stdout)
    * @author Bert Klauninger
    * @version 0.1.0
    * @changelog
    *    2013-12-13 - Created
    *    2013-12-16 - Added CLOB streaming support
    #include <cstdlib>
    #include <cstring>
    #include <fstream>
    #include <iostream>
    #include <string>
    #include <vector>
    #include "occi.h"
    using namespace oracle::occi;
    using namespace std;
    #define BUFFER_SIZE        1024                        // Maximal characters of a LOB to be exported
    * Escape all occurrences of ';' and convert newlines and tabs to blanks
    string csv_escape(string src) {
        string result;
        const int imax = src.length();
        for (int i = 0; i < imax; ++i) {
            switch (src[i]) {
                case '\n':
                case '\r':
                case '\t':
                    result += ' ';
                    break;
                case ';':
                    result += '\\';
                    result += ';';
                    break;
                default:
                    result += src[i];
        return result;
    * Execute a query and write CSV to the given file.
    *    NB: Empty fields are exported as NULL values!
    void select_into(Connection *con, string sql, string file) {
        if (! con) {
            return;
        bool fo = ! file.empty();
        ofstream o;
        if (fo) o.open(file.c_str(), ofstream::out);
        Statement *s = con->createStatement(sql);
        ResultSet *r = s->executeQuery();
        vector<MetaData> m = r->getColumnListMetaData();
        const int cols = m.size();
        if (fo) cout << "Result has " << cols << " cols" << endl;
        int cnt = 0;
        while (r->next()) {
            string line;
            ++cnt;
            /* Stupid ORACLE starts numbering at 1, not 0 */
            for (int i = 1; i <= cols; ++i) {
                string col;
                /* ...but: Metadata vector starts at 0 */
                int t = m[i - 1].getInt(MetaData::ATTR_DATA_TYPE);
                if (t == OCCI_SQLT_CLOB) {
                    /* Get the CLOB object via stream */
                    Clob clob = r->getClob(i);
                    if (! clob.isNull()) {
                        clob.open(OCCI_LOB_READONLY);
                        int len = clob.length();
                        Stream *instream = clob.getStream();
                        char *buffer = new char[BUFFER_SIZE];
                        memset(buffer, 0, BUFFER_SIZE);
                        int r = 0;
                        do {
                            r = instream->readBuffer(buffer, len);
                            for (int i = 0; i < r; ++i) {
                                col += (char) buffer[i];
                        } while (r != -1);
                        delete[] buffer;
                        clob.closeStream(instream);
                        clob.close();
                } else if (! r->isNull(i)) {
                    /* Try to get field value as string */
                    col = r->getString(i);
                if (col.empty()) {
                    line += "\\N";
                } else {
                    line += csv_escape(col);
                if (i < cols) {
                    line += ';';
            if (fo) {
                o << line << endl;
            } else {
                cout << line << endl;
        s->closeResultSet(r);
        con->terminateStatement(s);
        if (fo) cout << cnt << " rows exported" << endl;
    /*** MAIN ***/
    int main (int argc, char* argv[]) {
        if (! (argc == 2 || argc == 3)) {
            cerr << "Usage: " << argv[0] << " sql-statement [output-file.csv]" << endl << endl;
            cerr << "Output file uses column separator ';'. Semicola are escaped using '\\;'." << endl;
            cerr << "NULL values and empty fields are exported as '\\N'." << endl;
            cerr << "If no output file is specified, quieted output is sent to stdout." << endl;
            cerr << "Login credentials can be set via the following environment variabes:" << endl;
            cerr << "ORACLE_USER, ORACLE_PASS, ORACLE_CONN" << endl << endl;
            return 1;
        const string user = getenv("ORACLE_USER");
        const string pass = getenv("ORACLE_PASS");
        const string osid = getenv("ORACLE_CONN");
        const string sql = argv[1];
        const string outfile = (argc == 3) ? argv[2] : "";
        bool fo = ! outfile.empty();
        Environment* env = Environment::createEnvironment(Environment::DEFAULT);
        int ret = 0;
        try {
            if (fo) cout << "Connecting as " << user << "@" << osid << endl;
            Connection* const con = env->createConnection(user, pass, osid);
            if (fo) {
                cout << "Executing query " << sql << endl;
                cout << "Writing results to " << outfile << endl;
            select_into(con, sql, outfile);
            if (fo) cout << "Closing connection" << endl;
            env->terminateConnection(con);
        } catch (SQLException ea) {
            cerr << "Error: " << ea.what();
            ret = 1;
        Environment::terminateEnvironment(env);
        return ret;
    My Makefile:
    ociexport: ociexport.cpp
            LD_LIBRARY_PATH=/usr/lib/oracle/12.1/client64/lib \
                    gcc -Wall -g -I /usr/include/oracle/12.1/client64 \
                    -L /usr/lib/oracle/12.1/client64/lib \
                    -o bin/ociexport ociexport.cpp \
                    -lclntsh -lnnz12 -locci
    Program call:
    $ export LD_LIBRARY_PATH=/usr/lib/oracle/12.1/client64/lib
    $ export ORACLE_USER=your_user
    $ export ORACLE_PASS=your_pass
    $ export ORACLE_CONN=your_connection_string
    $ ./ociexport "SELECT * FROM applications" > export.csv
    Best regards
    Bert

    Hi
    Give a look to the following book. You'll find the answer for some questions...
    http://www.theserverside.com/books/masteringEJB/index.jsp
    Chris

  • Call a Vbscript from a stored procedure

    Hi,
    I wonder is it possible to call a Vbscript from a stored procedure, any good reference for this.
    thanks

    Well here is quick and dirty example I just created.
    Step 1. Create a test_batch.bat file that creates a folder "c:\test_dir" and copy "c:emp.lst" into it.
    C:\oracle102\examples\test_batch.bat
    md c:\test_dir
    copy c:\emp.lst c:\test_dir
    Step2. From SQLPLUS, spool scott.emp into c:\emp.lst and call the batch from the dbms_scheduler that kicks off right away,
    set echo off
    set feedback off
    spool c:\emp.lst;
    select * from scott.emp;
    spool off;
    begin
         dbms_scheduler.create_job(job_name => 'run_batch',
         job_type => 'EXECUTABLE',
         job_action => 'C:\oracle102\examples\test_batch.bat',
         start_date => sysdate,
         enabled => true,
         comments => 'Run VB Script');
    end;
    Check if the directory is created and if the file is copied over. Task is to kick off the executable and test is the VBscript within the batch. Challenge is how long the script runs before the next statement in the PL/SQL runs. May be you have to introduce sleep in between.
    Note: You must have at least "CREATE JOB" privilege.
    Happy coding!
    Prakash
    Message was edited by:
    Prakash Rai

Maybe you are looking for