How to do Multithreading in Oracle PlSql using a Single Session

Hi All,
I have a complex but interesting requirement.
1) I have a table with 90k rows.
2) My PlSql Package picks up all the 90k rows one by one, does some processing/transformation on it
3) if the row satisfies some business rules, then it gets inserted into an application table. If the row is not eligible, then it inserts the row into a Error table.
4) After processing all the 90k records, If my Error Table Count reaches 10% of the input count (90k), then all inserts (i.e. both application table inserts and
error table inserts) must be rolled back.
5) Right now, we are achieving this logic in a single session but there are far many performance issues, because processing has to go through row by row.
Is it possible to implement the above logic as "multi threading within PlSql" whereby i can run Step 2 in 10 parallel slaves and if the total error count of all the 10 slaves exceeds 10% of the input data, then there should be a rollback for all 10 slaves.
+A sample testcase is given below. Issue is: rollback statement in p1 is not taking any effect (because plsql spawns sessions to execute p2 which autocommits itself on graceful exit). But is there any other way by which i can make the rollback to be effective+
create table t1 (a number);
create table j1(b number);
create or replace procedure p1
as
l_cnt number;
i number;
l_job number;
begin
     for i in 1 .. 5 loop
        dbms_job.submit( l_job, 'p2('||i||');' );       
    end loop;
    commit;
    loop
        dbms_lock.sleep(30);
        select count(*) into l_cnt from j1;
        exit when (l_cnt = 5);
    end loop;
   rollback;
end;
create or replace procedure p2(i number)
as
begin
insert into t1 values(i);
insert into j1 values(1);
end;
/

Basically your current 'algorithm' can be described as 'slow-by-slow processing' (co Tom Kyte)
Relational databases are about sets not about records.
Consequently your approach must be qualified as evil.
Instead of fixing the problem (and getting rid of slow-by-slow processing), you propose to add even more evil by adding multi-threading to the mix.
The issue you describe is not an issue at all, it is just making clear you are heading for disaster.
An approach that works quite nicely is
- add an extra status column to the table to be processed.
- UPDATE the status column of all records that do not qualify. By UPDATE I mean the UPDATE statement, not record by record processing
- (BULK)-INSERT the remaining records, for which the flag is NULL.
The simple guidelines for application development are:
Only do it in PL/SQL when you can't do it in straight SQL
Only do it in Java when you can't do it in PL/SQL
Only do it in 3GL when you can't do it in Java.
Your 'strategy' is doomed to fail.
Get rid of it.
Before it is too late, and your heart is pumping like mad, because your problems are increasing, and increasing, and increasing, and you have to work 7 x 24 to deal with 'performance problems'
You have already demonstrated your approach doesn't work.
Don't try to make it worse.
Sybrand Bakker
Senior Oracle DBA
Experts: those who do read documentation

Similar Messages

  • How to get resultset from oracle procedure use ejb3

    how to get resultset from oracle procedure use ejb3
    i know oracle procedure should like this
    Create or replace PROCEDURE resultset_test(
    aaa IN NUMBER,
    bbb OUT sys_refcursor) ....
    but what s the ejb3 scripts looks like? please give me an example or link~
    ths

    - there are no EJB3 scripts, only compiled application code
    - the part of the EJB spec that deals with databases is called the Java Persistence API, but likely you are just looking for the JDBC API.
    Now you should know what to Google to get your "example script": "java jdbc oracle procedure"

  • Help Required:How Upload Excel file Into Oracle Table Using PLSQL Procedure

    Please Help , Urgent Help Needed.
    Requirement is to Upload Excel file Into Oracle Table Using PLSQL Procedure/Package.
    Case's are :
    1. Excel File is On Users/ Client PC.
    2. Application is on Remote Server(Oracle Forms D2k).
    3. User Is Using Application Using Terminal Server LogIn.
    4. So If User Will Use to GET_FILE_NAME() function of D2K to Get Excel File , D2k Will Try to pick File from That Remote Server(Bcs User Logind from Terminal Server Option).
    5. Cannot Use Util_File Package Or Oracle Directory to Place That File on Server.
    6. we are Using Oracle 8.7
    So Need Some PL/SQL Package or Fuction/ Procedure to Upload Excel file on User's Pc to Oracle Table.
    Please Guide me wd some Code. or with Some Pl/SQL Package, or With SOme Hint. Or any Link ....
    Jus help to Sort This Issue ........
    you can also write me on :
    [email protected], [email protected]

    TEXT_IO is a PL/SQL package available only in Forms (you'll want to post in the Forms forum for more information). It is not available in a stored procedure in the database (where the equivalent package is UTL_FILE).
    If the Terminal Server machine and the database machine do not have access to the file system on the client machine, no application running on either machine will have access to the file. Barring exceptional setups (like the FTP server on the client machine), your applications are not going to have more access to the client machine than the operating system does.
    If you map the client drives from the Terminal Server box, there is the potential for your Forms application to access those files. If you want the files to be accessible to a stored procedure in the database, you'll need to move the files somewhere the database can access them.
    Justin

  • How do i setup a control table using a single input

    I am a very newbie LabView user.    I am trying to build a control component using a single 4 position input (a dial (0 thru 3) that outputs a 4 bit result based on the input.    What control do I need to use?
    The table looks like this:
    inputs        |outputs
    4H
    Open
    Open
    Open
    Ground
    2H
    Ground
    Open
    Ground
    Ground
    N
    Ground
    Ground
    Ground
    Open
    4L
    Ground
    Ground
    Open
    Open
    Eric Yuzon
    Senior engineer
    ERC
    Walled Lake, MI 48390
    [email protected]
    e-reman.com
    Solved!
    Go to Solution.

    That would depend on your hardware.
    What hardware are you using? 
    You could use the "DAQmx Write" function in this palette:
     Measurement I/O >> DAQmx - Data Aquisition
    Cory K
    Attachments:
    Control Table.vi ‏7 KB

  • Multithreading in  oracle PLSQL

    Hi
    I am having 100000 records in my database,
    Normally i fetch 1000 records from 100000 in bulk and do the process, after completion of first batch the it took second set of 1000 records from 100000 in bulk and do the process.
    Say in the 1st batch there is a transaction for the A/C no : 9856423456
    after completion of batch 1
    2nd batch is in process here some transaction for the same A/c : 9856423456
    so complete this batch
    and batch process is continuous till completion of whole record.
    there is a dependences between 1st batch and 2nd or some other batch
    say in the 1st batch transaction for the A/C no : 9856423456 after completion of this transaction balance available for the A/C no : 9856423456 2,00,000 rupees
    in the 2nd or some other batch, some transaction may come for same A/c, so after completion of the first batch only we know what actual balance is.
    Now i want implement multi-threading :
    how can i implement
    Thanks

    Balajiraam wrote:
    Now i want implement multi-threading : how can i implementThere 2 basic options to parallel processing using PL/SQL.
    You can use the Parallel Query (PQ) feature of Oracle. This parallelises SQLs by breaking large scans into a number of smaller scans and running these in parallel. You can also run PL/SQL via PQ by defining a parallel enabled PL/SQL pipeline table function.
    This second method is rolling your own parallel processing in PL/SQL. With 11g you can use DBMS_PARALLEL_EXECUTE. You can use DBMS_JOB to run parallel processes. You can use message queues and database pipes (or even plain SQL tables) for IPC. You can use DBMS_LOCK for implementing semaphores and mutexes.
    It all depends on your requirements ito multi-threading/parallel processing in PL/SQL.

  • How to Restore datas in Oracle 10g using hot backup?

    I did Hot backup things (On-line backup) in Oracle 10g (Windows environment)
    Now backup files are stored in physical location..
    How to restore the datas to original location..
    Can any one give the url or command for recovery in ora 10g for hot backup
    Thanks

    Please do not dump all of your work in this forum, and expect volunteers to do it for free!!!
    Dear Great Senior DBA Sybrand Bakker
    What are Oracle Discussion Forums?
    Oracle Discussion Forums is an interactive community for sharing information, questions, and comments about Oracle products and related technologies. Most forums are moderated by product managers, and all of them are frequently visited by knowledgeable users from the community
    oracle forums is not your place for showing “bossing” it is a place where junior to seniors share there knowledge and advices, it means helping and sharing….. Knowledge is for giving ….giving only it will increase… don’t discourage any one like this ……
    There are my Great Seniors (not like u) mainly respected Mr. Jonathan Lewis, Mr. Don Burleson and a lot of oracle nominated ACE members are all giving patiently replay to jr. to sr.
    Obeasley oracle doubts are mostly related to practical issue only……
    Pls try to learn the word meaning of “volunteers”

  • How can I replace existing oracle-sequences using impdp?

    I use impdp to transport table data from one database-instance to another (on a regular base).
    I do this by using a database link.
    Here is the content of the parameterfile for the impdp:
    NETWORK_LINK=dbl_backoffice
    INCLUDE=TABLE:" in ('SSU_CUSTOMERS','SSU_ORDERS','SSU_ORDERLINES')"
    INCLUDE=SEQUENCE:" in ('SEQ_ORDERNR','SEQ_CUSTNR')"
    TABLE_EXISTS_ACTION=REPLACE
    Now, the mentioned tabels are neatly replaced however, the sequence-objects aren't because impdp reports :
    ORA-31684: Object type SEQUENCE:"SSU"."SEQ_ORDERNR'" already exists
    ORA-31684: Object type SEQUENCE:"SSU"."SEQ_CUSTNR'" already exists
    It is understandable, because the impdp will issue create sequence statements and fails because they're already there (and there is no such thing as a import-parameter as SEQUENCE_EXISTS_ACTION=REPLACE or whatsoever).
    I don't want to do a complete schema import, since I only want to refresh front-office data with a part of the back-office data.

    You need a plugin called Flip4Mac to create a wmv on a Mac
    It plugs in to Quicktime.
    WMV is generally unavailable on MAcs cos its a Windows thing ( Windows Media Video)
      just like PorRes is not available generally on a Windows system.

  • How to execute more than oracle scripts using sqlplus

    Dears,
    I have 10 scripts that create table ,need to execute scripts sequentially
    Example
    Ascript
    Bscript
    Cscript
    Dscript
    need to run scripts using sqlplus commands in one time

    user8929623 wrote:
    Dears,
    I have 10 scripts that create table ,need to execute scripts sequentially
    Example
    Ascript
    Bscript
    Cscript
    Dscript
    need to run scripts using sqlplus commands in one timeCreate a script like :
    @Ascript
    @Bscript
    @Cscript
    @Dscript

  • How do I create two iWeb sites using a single .Mac account?

    I would like to create two distinct sites/URLs using iWeb and a single — not a family — .Mac account. Is this possible? If so, what are the basic steps?
    When I read related forum posts, it would seem to me that one site would overwrite the other site when I publish. Yes or no?
    iBook 1.2 mhz, G4   Mac OS X (10.3.6)  
    iBook 1.2 mhz, G4   Mac OS X (10.3.6)  
    iBook 1.2 mhz, G4   Mac OS X (10.4.4)   iLife 06

    I would like to create two distinct sites/URLs using
    iWeb and a single — not a family — .Mac account. Is
    this possible? If so, what are the basic steps?
    If you just do the obvious and use File > New Site in iWeb, you do create two distinct sites with different urls. However, you cannot exactly duplicate page names in the sites or publish changes in one without publishing changes in the other. The short default url web.mac.com/username/iWeb normally goes to the top site on the list within iWeb.
    If you create two sites with distinct names in different accounts on your machine, they should not overwrite each other, and they should also have distinct urls. However I think that the
    index.html file which tells browsers what to do with the default short url web.mac.com/username/iWeb may get confused, so that deleting that or modifying it manually might be desirable.

  • Integrating Oracle Utilities using Oracle SOA

    Hi,
    I need help on how to proceed to integrate Oracle utilities using Oracle SOA
    Our project has around 13 modules like New connection, Disconnection, Dismantle, Billing , Global Information System
    Each modiule will interact with different other modules to get few services.
    For Example: 1)New Connection module should interact with Billing to generate the invoice in one scenarion
    and with Global Information System to identify the location in other scenario
    2) Same way Disconnection need to interact with other modules to get some information from other modules.
    3) All modules may need a SMS/ Email facility to send to the customers.
    I need to integrate this kind of application using Oracle SOA
    Please help me on how I should proceed further.
    Do i need to create a seperate BPEL process for each request of individual module and give them the endpoint of my WSDL to interact with other modules ?
    Can I have a single entry point and then navigate from there ? If so, the input params may vary, how this should be handled ?
    Please help me on developing this kind of project. Any sample applications are also helpful ...
    Thanks,
    dbp

    consider the adpater developers guide guide .. and the online help in JDeveloper .. that should give you a good head start ..
    hth clemens

  • Message Driven Beans: how to receive and send in a single session?

    Hello
    How to receive and send JMS messages in a message driven bean using a single session?
    Thanks.

    Are you referring to writing code within the onMessage method itself to receive JMS messages?
    If so, that is not a pattern that is recommended, especially not in the case of a blocking JMS
    receieve. If you must write an explicit JMS receive within an EJB component it's best to use
    a "check the queue" approach where you give a very small timeout for the receive. That way
    if the message is there it will be returned but if not the call will not block.
    You'll also need to take the transactional settings of the onMessage method into account.
    If your are sending a message and then waiting for a response, those two actions can
    not be done within the same global transaction. For that, you'll need to either use
    BMT and perform each in its own transaction or just not use global transactions at all,
    in which case each send and receive operation will be atomic.
    --ken                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               

  • Help Required :Excel Upload Into Oracle Table Using PLSQL Procedure/Package

    Please Help , Urgent Help Needed.
    Requirement is to Upload Excel file Into Oracle Table Using PLSQL Procedure/Package.
    Case's are :
    1. Excel File is On Users/ Client PC.
    2. Application is on Remote Server(Oracle Forms D2k).
    3. User Is Using Application Using Terminal Server LogIn.
    4. So If User Will Use to GET_FILE_NAME() function of D2K to Get Excel File , D2k Will Try to pick File from That Remote Server(Bcs User Logind from Terminal Server Option).
    5. Cannot Use Util_File Package Or Oracle Directory to Place That File on Server.
    6. we are Using Oracle 8.7
    So Need Some PL/SQL Package or Fuction/ Procedure to Upload Excel file on User's Pc to Oracle Table.
    Please Guide me wd some Code. or with Some Pl/SQL Package, or With SOme Hint. Or any Link ....
    Jus help to Sort This Issue ........
    you can also write me on :
    [email protected], [email protected]

    I also Tried to Use This
    But How can i Use SQLLDR Command In Stored Procedure.
    Well IN SQL*PlUS it is successfull but in Stored Procedure /Package ,PL/SQL does not recognise the OS commands.
    So now my Question How can I recognise the SQLLDR Commnad in Stored Procedure.

  • How to connect Oracle database using C/C++ on Mac OS X PPC G4, XCode 2.4.1?

    Hi All,
    How to connect the Oracle database using C/C++ on Mac OS X? I have used Instant Client library "instantclient-basic-macosx-10.1.0.3" provided by the Oracle but could not be success. I'm using PowerPC G4, Mac OS X 10.4.9, and XCode version 2.4.1.
    Specially Mr Oscar Armanini has done this in C on Mac OS X. Please let me know. I would be very thankful to you.
    Thanks,
    Ghufran

    Hi Ghufran
    there are two Metalink Notes on using Instant Client with PowerPc Mac:
    https://metalink.oracle.com/metalink/plsql/showDoc?db=NOT&id=316497.1
    How to Install, Configure and Test Oracle 10g Instant Client Basic,
    SQL*Plus and SDK Packages for Mac OS X
    (Runs OCI sample code - cdemo81.c)
    https://metalink.oracle.com/metalink/plsql/showDoc?db=NOT&id=332588.1
    How to Install, Configure and Test Oracle 10g Instant Client Basic,
    SQL*Plus and SDK Packages for Mac OS X
    (Runs OCCI sample code - occidml.cpp)
    The first Metalink Note uses an OCI examples and it is pasted here below,
    in case you don't have a Metalink ID.
    The second Metalink Note uses an OCCI example.
    I have never used Instant Client (neither on Os X or on other platform),
    but I was successful on compiling C programs (no GUI involved) using the
    Full Client installed on my PowerBook G4.
    I'm a DBA, but I was a developer years ago (about when Oracle 7.3
    was considered a giant step forward): I installed the Oracle 10.1 db
    (a complicated job for a developer) and I got the Full Client
    installed as well, for free, so I was happy to compile one of the demo C sources
    (those that you can find in the Oracle Pro*C manuals:
    by the way, Oracle Pro*C manuals are really worth reading).
    Good luck
    Oscar
    Applies to: Oracle Server - Enterprise Edition - Version: 10.1.0.3
    Apple Macintosh PowerPC
    Goal
    This article will show you how to install and configure your 10g Instant Client (IC) Software for the Mac.
    It will install the following packages:
    the Basic package
    the SQL*Plus package and
    the SDK package
    and then test its connectivity to an Oracle database using SQL*Plus.
    It will also show you how to setup and test a sample program, cdemo81.c, that uses the Oracle Call Interface (OCI)
    to connect to the database.
    The sample program is located under the <Instant_Client>/sdk/demo directory.
    Solution1. Download the following three (3) files from the Oracle Technology Network (OTN) website.
    You will need an account to do this.
    Macintosh OS X 10g Instant Client Software
    a. instantclient-basic-macosx-10.1.0.3.zip (32,395,622 bytes)
    b. instantclient-sqlplus-macosx-10.1.0.3.zip (326,740 bytes)
    c. instantclient-sdk-macosx-10.1.0.3.zip (293,913 bytes)
    NOTE: The above three (3) files will be updated as new patches are released for the 10g Instant Client software. 10.1.0.3 or later versions (10.1.0.x) of these files may be used similarly with this article.
    2. Save the following text into a file called tnsnames.ora:
    # If you receive an
    # ORA-12154: TNS:could not resolve the connect identifier specified
    # error when running the setup script and attempting to connect to Oracle
    # from SQL*Plus then the name of your SERVICE NAME (i.e. ORCL) may require
    # that you include the DOMAIN (i.e. US.ORACLE.COM) in order to connect successfully.
    # To obtain the DOMAIN of your environment, type "hostname" from your shell
    # and it should report this information back to you. Configure your SERVICE
    # NAME to look like Example 2.
    # Example 1
    ORCL =
    (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = database_machine.us.oracle.com)(PORT = 1521))
    (CONNECT_DATA =
    (SERVER = DEDICATED)
    (SID = orcl)
    # Example 2
    #ORCL.US.ORACLE.COM =
    # (DESCRIPTION =
    # (ADDRESS = (PROTOCOL = TCP)(HOST = database_machine.us.oracle.com)(PORT = 1521))
    # (CONNECT_DATA =
    # (SERVER = DEDICATED)
    # (SID = orcl)
    3. Save the following text into a file called sqlplus_script.sql:
    SELECT user FROM dual;
    SELECT sysdate FROM dual;
    SELECT 'successful ' AS TEST_RESULTS FROM dual;
    exit;
    4. Save the following text into a file called setup1:
    # ===========================================
    # MAC OS X INSTANT CLIENT 10g SCRIPT - SETUP1
    # ===========================================
    # DESCRIPTION
    # ===========
    # This script will install and configure your 10g Instant Client (IC) Software
    # for the Mac. It will install the Basic, SQL*Plus and SDK (OCI/OCCI) packages
    # and then test its connectivity to an Oracle database using SQL*Plus.
    # Once this script has completed, you will need to run the script SETUP2 to build
    # and run the CDEMO81.C sample application located under the <IC>/sdk/demo folder
    # in your newly installed Instant Client home.
    # NOTE: In order for this script to run successfully, you MUST perform any
    # necessary actions required under the SETUP section below.
    # SETUP
    # =====
    # (1) You MUST be in a directoy with ALL of the following files
    # BEFORE running this script:
    # 1 - instantclient-basic-macosx-10.1.0.3.zip
    # 2 - instantclient-sqlplus-macosx-10.1.0.3.zip
    # 3 - instantclient-sdk-macosx-10.1.0.3.zip
    # 4 - tnsnames.ora (configured properly)
    # 5 - sqlplus_script.sql (connectivity test)
    # 6 - setup1 (this file)
    # 7 - setup2 (will run this file later)
    # (2) Edit the TNSNAMES.ORA file and update it with the necessary information
    # to connect to a database on your network. Be sure to note the comments
    # in this file. You will have to change the following information:
    # SERVICE NAME (orcl or orcl.us.oracle.com)
    # HOST (database_machine.us.oracle.com)
    # PORT (1521)
    # SID (orcl)
    # (3) Go to the end of this scrip and modify the following line:
    # ./instantclient10_1/sqlplus scott/tiger@orcl @sqlplus_script.sql
    # Replace "orcl" with the SERVICE NAME you used in step (2) above.
    # (4) To run this script use the command: ". setup1"
    # BEGINNING OF SCRIPT
    # output this file to your shell
    echo
    echo MAC OS X INSTANT CLIENT 10g SCRIPT - SETUP1
    echo
    #more setup1
    # output the TNSNAMES.ORA file to your shell
    echo TNSNAMES.ORA FILE
    echo
    more tnsnames.ora
    # remove the instantclient10_1 directory should it exist
    echo
    echo CHECKING FOR instantclient10_1 DIRECTORY...
    echo WILL REMOVE DIRECTORY IF IT ALREADY EXISTS
    echo
    rm -d -f -R instantclient10_1
    # extract the instantclient software (basic, sql*plus & sdk)
    echo
    echo
    echo INSTALLING SOFTWARE...
    echo
    echo BASIC
    echo
    unzip instantclient-basic-macosx-10.1.0.3.zip
    echo
    echo SQL*PLUS
    echo
    unzip instantclient-sqlplus-macosx-10.1.0.3.zip
    echo
    echo SDK
    echo
    unzip instantclient-sdk-macosx-10.1.0.3.zip
    # set the following environment variables
    # Uncomment if you want a way to find the Instant Client (IC) home quickly
    #export IC=$PWD/instantclient10_1
    # Dynamic Library path required to use the Instant Client (IC) software
    export DYLD_LIBRARY_PATH=$PWD/instantclient10_1
    # TNS_ADMIN is required if using the TNSNAMES.ORA file (recommended)
    export TNS_ADMIN=$PWD/instantclient10_1
    # display the modified environment variables
    echo
    echo SETTING ENVIRONMENT VARIABLES
    echo
    echo DYLD_LIBRARY_PATH
    echo $DYLD_LIBRARY_PATH
    echo
    echo TNS_ADMIN
    echo $TNS_ADMIN
    # display all environment variables
    #echo
    #echo ALL ENVIRONMENT VARIABLES
    #echo
    #env
    # copy the TNSNAMES.ORA to the instantclient directory
    echo
    echo COPYING TNSNAMES.ORA TO INSTANT CLIENT [IC] DIRECTORY
    echo
    cp tnsnames.ora ./instantclient10_1/tnsnames.ora
    # list the contents of the IC directory to see what has been installed
    echo
    echo INSTANT CLIENT [IC] DIRECTORY
    echo
    ls ./instantclient10_1
    echo
    # SQL*Plus Connectivity Test
    # To connect to the database specified in your TNSNAMES.ORA file change the
    # SERVICE NAME (i.e. orcl) below to the name of the entry in your TNSNAMES.ORA
    # file designating the specific database in which you want to connect to
    echo
    echo SQL*PLUS CONNECTIVITY TEST
    ./instantclient10_1/sqlplus scott/tiger@orcl @sqlplus_script.sql
    # Alternately, you can connect from SQL*Plus to Oracle without using a TNSNAMES.ORA
    # file. You can embed the NAME-VALUE pair of the SERVICE NAME from the TNSNAMES.ORA
    # file directly into the connection string making sure to use the proper HOST, PORT
    # and SID like so:
    #./instantclient10_1/sqlplus scott/tiger@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=database_machine.us.oracle.com)(PORT=1521)))(CONNECT_DATA=(SID=orcl)))
    5. Save the following text into a file called setup2:
    # ===========================================
    # MAC OS X INSTANT CLIENT 10g SCRIPT - SETUP2
    # ===========================================
    # DESCRIPTION
    # ===========
    # This script will build and run the OCI sample application CDEMO81.C inside
    # your Instant Client (IC) software located under the <IC>/sdk/demo folder.
    # NOTE: In order for this script to run successfully
    # (A) you MUST have already run the script SETUP1 successfully
    # and
    # (B) you MUST perform any necessary actions required under the SETUP
    # section below.
    # SETUP
    # =====
    # (1) You need to edit the CDEMO81.C application PRIOR to running this script to
    # change the connection information. By default, the application will attempt
    # to connect as user SCOTT with password TIGER to a local Oracle database using
    # the BEQ-LOCAL network protocol. This will not work.
    # (A) You need to make sure you have the SCOTT/TIGER schema created in your database.
    # If not, have your DBA create it by running the script "SCOTT.SQL" from your
    # <ORACLE_HOME>/rdbms/admin folder.
    # (B) You need to modify the CDEMO81.C application to connect to the database
    # you have configured inside your TNSNAMES.ORA file.
    # (i) Open the CDEMO81.C file located under the <IC>/sdk/demo folder.
    # (ii) Find the following line of code:
    # (void) OCIServerAttach( srvhp, errhp, (text *)"", strlen(""), 0);
    # and change the two empty strings to the SERVICE NAME you are using like so
    # (void) OCIServerAttach( srvhp, errhp, (text *)"ORCL", strlen("ORCL"), 0);
    # (iii) Save the file.
    # (2) You MUST be in the initial directory where you copied all of the files listed
    # in script SETUP1. In this same location you will find SETUP2. Run SETUP2 from
    # this location.
    # (3) To run this script use the command: ". setup2"
    # BEGINNING OF SCRIPT
    # output this file to your shell
    echo
    echo MAC OS X INSTANT CLIENT 10g SCRIPT - SETUP2
    echo
    #more setup2
    # output the TNSNAMES.ORA file to your shell
    echo TNSNAMES.ORA FILE
    echo
    more tnsnames.ora
    # output the username, password and service name from CDEMO81.C file to your shell
    echo
    echo USERNAME, PASSWORD AND SERVICE NAME INFO FROM YOUR OCI cdemo81.c FILE
    echo
    #more ./instantclient10_1/sdk/demo/cdemo81.c
    grep -i "*username" ./instantclient10_1/sdk/demo/cdemo81.c
    grep -i "*password" ./instantclient10_1/sdk/demo/cdemo81.c
    grep -i OCIServerAttach ./instantclient10_1/sdk/demo/cdemo81.c
    # display the required environment variables
    #env
    echo
    echo REPORTING REQUIRED ENVIRONMENT VARIABLES
    echo
    echo DYLD_LIBRARY_PATH
    echo $DYLD_LIBRARY_PATH
    echo
    echo TNS_ADMIN
    echo $TNS_ADMIN
    # move to the sdk/demo directory
    cd ./instantclient10_1/sdk/demo
    echo
    echo CHANGING TO [IC]/SDK/DEMO DIRECTORY
    echo
    ls
    # run demo application
    echo
    echo ATTEMPTING TO RUN APPLICATION
    echo
    echo BUILDING APPLICATION USING PROVIDED MAKE FILE, [IC]/sdk/demo/demo.mk...
    echo
    make -f demo.mk
    echo
    echo
    echo INSTANT CLIENT [IC] DIRECTORY...
    echo
    ls ../..
    echo
    echo CREATING links FOR REQUIRED LIBRARIES IN INSTANT CLIENT [IC] FOLDER...
    echo
    echo - libclntsh.dylib
    echo - libocci.dylib
    ln ../../libclntsh.dylib.10.1 ../../libclntsh.dylib
    ln ../../libocci.dylib.10.1 ../../libocci.dylib
    echo
    echo INSTANT CLIENT [IC] DIRECTORY WITH links CREATED...
    echo
    ls ../..
    echo
    echo
    echo EXECUTING APPLICATION...
    echo
    cdemo81
    echo
    echo
    # TROUBLE-SHOOTING
    # If you receive the following error messages:
    # Error - ORA-24327: need explicit attach before authenticating a user
    # Error - ORA-03114: not connected to ORACLE
    # Then you did not modify the CDEMO81.C application with proper SERVICE NAME
    # information. See step 1B under the SETUP section in this script to resolve
    # this error.
    6. Take all seven (7) files and move them into the same directory on your OS where you want to install the Instant Client software from:
    1 - instantclient-basic-macosx-10.1.0.3.zip
    2 - instantclient-sqlplus-macosx-10.1.0.3.zip
    3 - instantclient-sdk-macosx-10.1.0.3.zip
    4 - tnsnames.ora
    5 - sqlplus_script.sql
    6 - setup1
    7 - setup2
    7. Open the file tnsnames.ora. Be sure to review the comments in this file. You will have to change the following information to connect to a database on your network:
    SERVICE NAME (orcl or orcl.us.oracle.com)
    HOST (database_machine.us.oracle.com)
    PORT (1521)
    SID (orcl)
    Save the file.
    8. Open the file setup1, go to the end of this script and modify the following line:
    ./instantclient10_1/sqlplus scott/tiger@orcl @sqlplus_script.sql
    Replace orcl with the SERVICE NAME you used in Step 7 above. Save the file.
    9. You are now ready to install the 10g Instant Client software for Mac OS X. From the location where your seven (7) files reside, issue the following command:
    [macosx]/oracle> . setup1
    NOTE: Be sure to include the period "." and a space " " before the word "setup1" so all environment variables persist for the current session.
    This will install the Instant Client Basic and SQL*Plus software and connect to the database specified in the tnsnames.ora file.
    10. Here is the sample output of a successful execution of the setup1 script:
    [macosx]/oracle> . setup1
    MAC OS X INSTANT CLIENT 10g SCRIPT - SETUP1
    TNSNAMES.ORA FILE
    # If you receive an
    # ORA-12154: TNS:could not resolve the connect identifier specified
    # error when running the setup script and attempting to connect to Oracle
    # from SQL*Plus then the name of your SERVICE NAME (i.e. ORCL) may require
    # that you include the DOMAIN (i.e. US.ORACLE.COM) in order to connect successfully.
    # To obtain the DOMAIN of your environment, type "hostname" from your shell
    # and it should report this information back to you. Configure your SERVICE
    # NAME to look like Example 2.
    # Example 1
    ORCL =
    (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = gbednars-pc.us.oracle.com)(PORT = 1521))
    (CONNECT_DATA =
    (SERVER = DEDICATED)
    (SID = orcl)
    # Example 2
    #ORCL.US.ORACLE.COM =
    # (DESCRIPTION =
    # (ADDRESS = (PROTOCOL = TCP)(HOST = gbednars-pc.us.oracle.com)(PORT = 1521))
    # (CONNECT_DATA =
    # (SERVER = DEDICATED)
    # (SID = orcl)
    CHECKING FOR instantclient10_1 DIRECTORY...
    WILL REMOVE DIRECTORY IF IT ALREADY EXISTS
    INSTALLING SOFTWARE...
    BASIC
    Archive: instantclient-basic-macosx-10.1.0.3.zip
    inflating: instantclient10_1/classes12.jar
    inflating: instantclient10_1/libclntsh.dylib.10.1
    inflating: instantclient10_1/libnnz10.dylib
    inflating: instantclient10_1/libocci.dylib.10.1
    inflating: instantclient10_1/libociei.dylib
    inflating: instantclient10_1/libocijdbc10.dylib
    inflating: instantclient10_1/ojdbc14.jar
    SQL*PLUS
    Archive: instantclient-sqlplus-macosx-10.1.0.3.zip
    inflating: instantclient10_1/README_IC.htm
    inflating: instantclient10_1/glogin.sql
    inflating: instantclient10_1/libsqlplus.dylib
    inflating: instantclient10_1/sqlplus
    SDK
    Archive: instantclient-sdk-macosx-10.1.0.3.zip
    creating: instantclient10_1/sdk/
    creating: instantclient10_1/sdk/demo/
    inflating: instantclient10_1/sdk/demo/cdemo81.c
    inflating: instantclient10_1/sdk/demo/demo.mk
    inflating: instantclient10_1/sdk/demo/occidemo.sql
    inflating: instantclient10_1/sdk/demo/occidemod.sql
    inflating: instantclient10_1/sdk/demo/occidml.cpp
    creating: instantclient10_1/sdk/include/
    inflating: instantclient10_1/sdk/include/nzerror.h
    inflating: instantclient10_1/sdk/include/nzt.h
    inflating: instantclient10_1/sdk/include/occi.h
    inflating: instantclient10_1/sdk/include/occiAQ.h
    inflating: instantclient10_1/sdk/include/occiCommon.h
    inflating: instantclient10_1/sdk/include/occiControl.h
    inflating: instantclient10_1/sdk/include/occiData.h
    inflating: instantclient10_1/sdk/include/occiObjects.h
    inflating: instantclient10_1/sdk/include/oci.h
    inflating: instantclient10_1/sdk/include/oci1.h
    inflating: instantclient10_1/sdk/include/oci8dp.h
    inflating: instantclient10_1/sdk/include/ociap.h
    inflating: instantclient10_1/sdk/include/ociapr.h
    inflating: instantclient10_1/sdk/include/ocidef.h
    inflating: instantclient10_1/sdk/include/ocidem.h
    inflating: instantclient10_1/sdk/include/ocidfn.h
    inflating: instantclient10_1/sdk/include/ociextp.h
    inflating: instantclient10_1/sdk/include/ocikpr.h
    inflating: instantclient10_1/sdk/include/ocixmldb.h
    inflating: instantclient10_1/sdk/include/odci.h
    inflating: instantclient10_1/sdk/include/oratypes.h
    inflating: instantclient10_1/sdk/include/ori.h
    inflating: instantclient10_1/sdk/include/orid.h
    inflating: instantclient10_1/sdk/include/orl.h
    inflating: instantclient10_1/sdk/include/oro.h
    inflating: instantclient10_1/sdk/include/ort.h
    inflating: instantclient10_1/sdk/include/xa.h
    SETTING ENVIRONMENT VARIABLES
    DYLD_LIBRARY_PATH
    /oracle/instantclient10_1
    TNS_ADMIN
    /oracle/instantclient10_1
    COPYING TNSNAMES.ORA TO INSTANT CLIENT [IC] DIRECTORY
    INSTANT CLIENT [IC] DIRECTORY
    README_IC.htm libocci.dylib.10.1 sdk/
    classes12.jar libociei.dylib* sqlplus*
    glogin.sql libocijdbc10.dylib* tnsnames.ora
    libclntsh.dylib.10.1* libsqlplus.dylib*
    libnnz10.dylib ojdbc14.jar
    SQL*PLUS CONNECTIVITY TEST
    SQL*Plus: Release 10.1.0.3.0 - Production on Fri Aug 19 15:26:08 2005
    Copyright (c) 1982, 2004, Oracle. All rights reserved.
    Connected to:
    Oracle Database 10g Enterprise Edition Release 10.1.0.4.0 - Production
    With the Partitioning, OLAP and Data Mining options
    USER
    SCOTT
    SYSDATE
    19-AUG-05
    TEST_RESULTS
    successful
    Disconnected from Oracle Database 10g Enterprise Edition Release 10.1.0.4.0 - Production
    With the Partitioning, OLAP and Data Mining options
    IF THE SQL*PLUS CONNECTIVITY TEST WAS SUCCESSFUL
    READ SETUP2 TO CONFIGURE AND RUN THE OCI cdemo81.c SAMPLE
    [macosx]/oracle>
    11. Once you have obtained a successful execution of the setup1 script, you are ready to configure cdemo81.c to connect to the database you have configured inside your tnsnames.ora file.
    Open the cdemo81.c file located under the <Instant_Client>/sdk/demo folder. Find the following line of code:
    (void) OCIServerAttach( srvhp, errhp, (text *)"", strlen(""), 0);
    Change the two (2) empty strings to the SERVICE NAME you used in Step 7 above.
    (void) OCIServerAttach( srvhp, errhp, (text *)"ORCL", strlen("ORCL"), 0);
    Save the file.
    12. You are now ready to run cdemo81.c. You MUST issue the following command from the initial directory where you copied all of the files in Step 6:
    [macosx]/oracle> . setup2
    NOTE: Be sure to include the period "." and a space " " before the word "setup2" so all environment variables persist for the current session.
    This script will configure your environment, build and run the OCI sample code connecting to the database specified in the tnsnames.ora file.
    13. Here is the sample output of a successful execution of the setup2 script:
    [macosx]/oracle> . setup2
    MAC OS X INSTANT CLIENT 10g SCRIPT - SETUP2
    TNSNAMES.ORA FILE
    # If you receive an
    # ORA-12154: TNS:could not resolve the connect identifier specified
    # error when running the setup script and attempting to connect to Oracle
    # from SQL*Plus then the name of your SERVICE NAME (i.e. ORCL) may require
    # that you include the DOMAIN (i.e. US.ORACLE.COM) in order to connect successfully.
    # To obtain the DOMAIN of your environment, type "hostname" from your shell
    # and it should report this information back to you. Configure your SERVICE
    # NAME to look like Example 2.
    # Example 1
    ORCL =
    (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = gbednars-pc.us.oracle.com)(PORT = 1521))
    (CONNECT_DATA =
    (SERVER = DEDICATED)
    (SID = orcl)
    # Example 2
    #ORCL.US.ORACLE.COM =
    # (DESCRIPTION =
    # (ADDRESS = (PROTOCOL = TCP)(HOST = gbednars-pc.us.oracle.com)(PORT = 1521))
    # (CONNECT_DATA =
    # (SERVER = DEDICATED)
    # (SID = orcl)
    USERNAME, PASSWORD AND SERVICE NAME INFO FROM YOUR OCI cdemo81.c FILE
    static text username = (text ) "SCOTT";
    static text password = (text ) "TIGER";
    (void) OCIServerAttach( srvhp, errhp, (text *)"ORCL", strlen("ORCL"), 0);
    REPORTING REQUIRED ENVIRONMENT VARIABLES
    DYLD_LIBRARY_PATH
    /oracle/instantclient10_1
    TNS_ADMIN
    /oracle/instantclient10_1
    CHANGING TO [IC]/SDK/DEMO DIRECTORY
    cdemo81.c* demo.mk occidemo.sql occidemod.sql occidml.cpp
    ATTEMPTING TO RUN APPLICATION
    BUILDING APPLICATION USING PROVIDED MAKE FILE, [IC]/sdk/demo/demo.mk...
    rm -rf SunWS_cache
    rm -rf ../../libclntsh.dylib
    rm -rf ../../libocci.dylib
    rm -rf cdemo81 cdemo81.o occidml occidml.o
    /usr/bin/gcc -c -I../include -I/rdbms/public/ -I/oracore/include -I/oracore/publ
    ic -I/oracore/port/include -I/nlsrtl/include -I/plsql/public -I/plsql/include -I
    /network/public -I/network/include -I/otrace/public -I/otrace/include/ -I/precom
    p/public -I/precomp/include/ -I/slax/include -I/ordts/public -I/ordts/include -I
    /javavm/include -I/javavm/include/osds/unix/solaris -I/ctx/public -I/ordvir/publ
    ic -I/ordvir/include -idirafter . -g -DRE_ENTRANT -DOCCI_NO_WSTRING=1 -DMAC_O
    SX -D_GNU_SOURCE -DSLTS_ENABLE -DSLMXMX_ENABLE -D_REENTRANT -DNS_THREADS -D_BCER
    T_API_ -DRSA_PLATFORM=RSA_PLATFORM_MAC_PPC_DARWIN -DNTEV_USE_POLL -DNTEV_USE_GE
    NERIC -DNET_USE_LDAP -DOCCI cdemo81.c
    ln ../../libclntsh.dylib.10.1 ../../libclntsh.dylib
    ln ../../libocci.dylib.10.1 ../../libocci.dylib
    /usr/bin/g++ -o cdemo81 cdemo81.o -L../../ -locci -lclntsh -lpthread
    rm -rf ../../libclntsh.dylib
    rm -rf ../../libocci.dylib
    /usr/bin/g++ -c -I../include -I/rdbms/public/ -I/oracore/include -I/oracore/publ
    ic -I/oracore/port/include -I/nlsrtl/include -I/plsql/public -I/plsql/include -I
    /network/public -I/network/include -I/otrace/public -I/otrace/include/ -I/precom
    p/public -I/precomp/include/ -I/slax/include -I/ordts/public -I/ordts/include -I
    /javavm/include -I/javavm/include/osds/unix/solaris -I/ctx/public -I/ordvir/publ
    ic -I/ordvir/include -idirafter . -g -DRE_ENTRANT -DOCCI_NO_WSTRING=1 -DMAC_O
    SX -D_GNU_SOURCE -DSLTS_ENABLE -DSLMXMX_ENABLE -D_REENTRANT -DNS_THREADS -D_BCER
    T_API_ -DRSA_PLATFORM=RSA_PLATFORM_MAC_PPC_DARWIN -DNTEV_USE_POLL -DNTEV_USE_GE
    NERIC -DNET_USE_LDAP -DOCCI occidml.cpp
    In file included from ../include/occi.h:43,
    from occidml.cpp:11:
    ../include/occiData.h:411: warning: use of `long double' type; its size may
    change in a future release
    ../include/occiData.h:411: warning: (Long double usage is reported only once
    for each file.
    ../include/occiData.h:411: warning: To disable this warning, use
    -Wno-long-double.)
    ln ../../libclntsh.dylib.10.1 ../../libclntsh.dylib
    ln ../../libocci.dylib.10.1 ../../libocci.dylib
    /usr/bin/g++ -o occidml occidml.o -L../../ -locci -lclntsh -lpthread
    rm -rf ../../libclntsh.dylib
    rm -rf ../../libocci.dylib
    INSTANT CLIENT [IC] DIRECTORY...
    README_IC.htm libocci.dylib.10.1 sdk/
    classes12.jar libociei.dylib* sqlplus*
    glogin.sql libocijdbc10.dylib* tnsnames.ora
    libclntsh.dylib.10.1* libsqlplus.dylib*
    libnnz10.dylib ojdbc14.jar
    CREATING links FOR REQUIRED LIBRARIES IN INSTANT CLIENT [IC] FOLDER...
    - libclntsh.dylib
    - libocci.dylib
    INSTANT CLIENT [IC] DIRECTORY WITH links CREATED...
    README_IC.htm libnnz10.dylib libsqlplus.dylib*
    classes12.jar libocci.dylib ojdbc14.jar
    glogin.sql libocci.dylib.10.1 sdk/
    libclntsh.dylib* libociei.dylib* sqlplus*
    libclntsh.dylib.10.1* libocijdbc10.dylib* tnsnames.ora
    EXECUTING APPLICATION...
    Enter employee name (or CR to EXIT): LARRY
    Enter employee job: CEO
    Enter employee salary: 10000
    Enter employee dept: 40
    LARRY added to the OPERATIONS department as employee number 7974
    Enter employee name (or CR to EXIT):
    Exiting...
    [macosx]/oracle/instantclient10_1/sdk/demo>
    14. If you have any problems running this script please open a Service Request (SR) with Oracle Support for further assistance and be sure to upload the output from the script to the SR.
    ReferencesNote
    332588.1 - How to Install, Configure and Test Oracle 10g Instant Client Basic, SQL*Plus and SDK Packages for Mac OS X (Runs OCCI sample code - occidml.cpp)
    Errors
    ORA-3114 "not connected to ORACLE"
    ORA-24327 need explicit attach before authenticating a user
    ORA-12154 "TNS:could not resolve service name"

  • How To Store pdf or doc file in Oracle Database using Java Jdbc?

    can any one help me out How To Store pdf or doc file in Oracle Database using Java Jdbc in JSP/Serlet? i tried like anything. using blob also i tried. but i am able 2 store images in DB not files. please if u know or else if u have some code like this plz send that to me, and help me out plz. i need that urgent.

    Hi.. i am not getting error, But i am not getting the original contents from my file. i am getting all ASCII vales, instead of my original data. here i am including my code.
    for Adding PDF in DB i used image.jsp
    Database table structure (table name. pictures )
    Name Null? Type
    ID NOT NULL NUMBER(11)
    IMAGE BLOB
    <%@ page language="java" import="java.util.*,java.sql.*,java.io.*" pageEncoding="ISO-8859-1"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <%
    try{
         Class.forName("oracle.jdbc.driver.OracleDriver");
         Connection con=DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.135:1521:orcl","scott","tiger");
         PreparedStatement ps,pstmt,psmnt;
         ps = con.prepareStatement("INSERT INTO pictures VALUES(?,?)");
    File file =
    new File("D:/info.pdf");
    FileInputStream fs = new FileInputStream(file);
    ps.setInt(1,4);
    ps.setBinaryStream(2,fs,fs.available());
    int i = ps.executeUpdate();
    if(i!=0){
    out.println("<h2>PDF inserted successfully");
    else{
    out.println("<h2>Problem in image insertion");
    catch(Exception e){
    out.println("<h2>Failed Due To "+e);
    %>
    O/P: PDF inserted successfully
    i tried to display that pdf using servlet. i am giving the code below.
    import java.io.IOException;
    import java.sql.*;
    import java.io.*;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    public class DispPDF extends HttpServlet {
         * The doGet method of the servlet. <br>
         * This method is called when a form has its tag value method equals to get.
         * @param request the request send by the client to the server
         * @param response the response send by the server to the client
         * @throws ServletException if an error occurred
         * @throws IOException if an error occurred
         public void service(HttpServletRequest request, HttpServletResponse response)
                   throws ServletException, IOException {
              //response.setContentType("text/html"); i commented. coz we cant use response two times.
              //PrintWriter out = response.getWriter();
              try{
                   InputStream sPdf;
                   Class.forName("oracle.jdbc.driver.OracleDriver");
                        Connection con=DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.135:1521:orcl","scott","tiger");
                        PreparedStatement ps,pstmt,psmnt;
                   psmnt = con.prepareStatement("SELECT image FROM pictures WHERE id = ?");
                        psmnt.setString(1, "4"); // here integer number '4' is image id from the table.
                   ResultSet rs = psmnt.executeQuery();
                        if(rs.next()) {
                   byte[] bytearray = new byte[1048576];
                        //out.println(bytearray);
                        int size=0;
                        sPdf = rs.getBinaryStream(1);
                        response.reset();
                        response.setContentType("application/pdf");
                        while((size=sPdf.read(bytearray))!= -1 ){
                        //out.println(size);
                        response.getOutputStream().write(bytearray,0,size);
                   catch(Exception e){
                   System.out.println("Failed Due To "+e);
                        //out.println("<h2>Failed Due To "+e);
              //out.close();
    OP
    PDF-1.4 %âãÏÓ 2 0 obj <>stream xœ+är á26S°00SIá2PÐ5´1ôÝ BÒ¸4Ü2‹ŠKüsSŠSŠS4C²€ê P”kø$V㙂GÒU×713CkW )(Ü endstream endobj 4 0 obj <>>>/MediaBox[0 0 595 842]>> endobj 1 0 obj <> endobj 3 0 obj <> endobj 5 0 obj <> endobj 6 0 obj <> endobj xref 0 7 0000000000 65535 f 0000000325 00000 n 0000000015 00000 n 0000000413 00000 n 0000000168 00000 n 0000000464 00000 n 0000000509 00000 n trailer <<01b2fa8b70ac262bfa939cc786f8770c>]/Root 5 0 R/Size 7/Info 6 0 R>> startxref 641 %%EOF
    plz help me out.

  • How to write a file in unix server through oracle plsql code

    Hi All,
    My requirement is to create and write a file (any file for eg txt file) in unix box with in a specified directory through oracle plsql code.
    Oracle sits in windows server.
    using utl_file package we can create directory where oracle resides and write it there in oracle server in our case windows..
    But here we need to create,write a file but in unix server which is different server than where the oracle server resides..
    we are using Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
    PL/SQL Release 11.2.0.2.0 - Production
    Can any one one please help me out in this issue...
    Thanks in Advance.
    Prakash

    Mr Prakash,
    Why are you asking this question multiple times in every forum you can spell?
    Valid responses have been presented to you already two times.
    Can you explain why you can't follow them up, but continue to abuse this forum by repeating doc questions?
    Sybrand Bakker
    Senior Oracle DBA

Maybe you are looking for