How to handle Database's trigger

Greetings,
i have an application on JDeveloper 11.1.2.4.0. At some point the user add new customer and its been saved to the database.
Because the application may be used in more than 1 shop, i have created a 2nd database, only for biography uses and history,
so it can be view by all shops. What i did is, when a new record is inserted into application's biography table, i also have a trigger
that after the row is inserted, i also insert the new row into my 2nd database. In both databases a primary key exists to avoid duplicated id's.
I was hoping instead of handling duplicated records on trigger, the database will handle it (if duplicated records exists, just dont save it at all),
but my problem now is, its throw me a proper exception
ORA-00001: unique constraint (PERSONAL_RECORD.BIOGR_PK) violated ORA-06512: at "ELAB.SAVE_BIOGR", line 11 ORA-04088: error during execution of trigger 'ELAB.SAVE_BIOGR' ORA-06512: at line 1
AND it does not save the biogr on the 1st database either. I do not understand what the trigger have to do with the first database since its after insert row method and not before.
It should insert the record into the database, then fire the trigger, throw an exception and dont save the record in 2nd database. But instead the record its been saved nowhere..
The case is: user fields some text boxes for a new customer, i check if the id is already exists in the 2nd database, and i notify the user that this new customer already exists in
the personal record database (2nd database, 1 common database for all shops), and i ask the user if he/she wants to synchronize or use the current fields. If synchronize, i take the record
from the 2nd database and insert them into the 1st. If not, i insert them into the 1st database, and thats when the trigger should handle the duplicate row exception, not my application.
Is there a way i can temporally turn off database trigger from my adf application or i can handle the exception BUT the record be save on the 1st database? because if the exception its been
thrown, the new record its gone.
thanks in advance for any help.

True, since i can't handle the trigger procedure, i add an exception inside of it. So it will do something when the exception occurs BUT it will save the customer
in 1st database. Here is my trigger code:
create or replace TRIGGER SAVE_BIOGR
AFTER INSERT
   ON ELAB.BIOGR
   FOR EACH ROW
DECLARE
   v_username varchar2(10);
BEGIN
   SELECT user INTO v_username
   FROM dual;
   INSERT INTO PERSONAL_RECORD.BIOGR
   ( ID,
     NAME,
     SNAME,
     USERNAME )
   VALUES
   ( :NEW.ID_PATIENTS,
     :NEW.NAME,
     :NEW.SNAME,
     v_username);
    EXCEPTION
    WHEN DUP_VAL_ON_INDEX THEN
    UPDATE PERSONAL_RECORD.BIOGR SET ERROR = 'ALREADY EXIST';
END;
I add update on exception because leaving it blank or with comment in THEN section it gave me an error i dont know why. So i just
include a dump update procedure.

Similar Messages

  • How to handle format trigger in bi publisher report

    Hi all,
    anyone have idea how to handle format trigger in bi publisher report....
    also if someone will illustrate the how exactly we use the triggers in bi publisher reports.
    regards
    Ratnesh

    Hi,
    there's no direct support for the format triggers out of Oracle Reports. Therefore they are mentioned in the log file and in the created layout after conversion the objects with format triggers are colored red to show, that there you had to do some additional work.
    Currently you had to built the logic of format triggers in BI Publisher new. Hve a look in the User Guide, there are some examples for if or choose statements.
    regards
    Rainer

  • How to handle DDL in remote database

    Hi our db running on 10g. How to handle DDL's on the remote database? My requirement is as a object migration, how to migrate object/s from database A to database B through user. Say i have table call my_table in database A I want to create/replace this table on database B as a database user. Is there a way can be done? Database link or streams or any other method?
    Thanks in advance,
    -B

    You have many options to do this, just to name a few
    use COPY command of SQLPLUS
    SQL> copy from scott/tiger@DB_A
             to scott/tiger@DB_B
             create new_emp using select * from emp;create database link to database A in database B, run this from database B
    create new_emp as select * from emp@dblinkDB_A;or export/import
    etc.

  • How to handle the trigger sequence

    I really do not have any idea for this question.
    the trigger need to implement:      
    An employee can not work on more than 2 projects supervised by any given department.
    DEPARTMENT (dname, dnumber, mgrssn, mgrstartdate) KEY: dnumber.
    PROJECT (pname, pnumber, plocation, dnum)      KEY: pnumber.
    CREATE TABLE WORKS_ON
    ( ESSN VARCHAR2(9) NOT NULL,
      PNO NUMBER NOT NULL,
      HOURS NUMBER(3,1) NOT NULL,
    PRIMARY KEY (ESSN, PNO));
    DESC WORKS_ON;
    INSERT INTO WORKS_ON VALUES
    ('123456789',1,32.5);
    INSERT INTO WORKS_ON VALUES
    ('123456789',2 ,7.5);
    INSERT INTO WORKS_ON VALUES
    ('666884444',3 ,40.0);
    INSERT INTO WORKS_ON VALUES
    ('453453453',1 ,20.0);
    INSERT INTO WORKS_ON VALUES
    ('453453453',2,20.0);
    CREATE TABLE PROJECT
    (PNAME VARCHAR2(15) NOT NULL,
    PNUMBER NUMBER NOT NULL,
    PLOCATION VARCHAR2(15),
    DNUM NUMBER NOT NULL,
    PRIMARY KEY (PNUMBER), UNIQUE(PNAME));
    DESC PROJECT;
    INSERT INTO PROJECT VALUES(
    'ProjectX',1, 'Bellaire',5);
    INSERT INTO PROJECT VALUES(
    'ProjectY',2, 'Sugarland',5);
    INSERT INTO PROJECT VALUES(
    'ProjectZ',3,'Houston',5);
    INSERT INTO PROJECT VALUES(
    'Computerization',10,'Stafford',4);i create package and two trigger like following in order to avoid mutating table.
    PACKAGE                     "HW4AIDB" AS
    TYPE EmploadY IS RECORD(
         Empessn varchar2(9),
         Empprojectcount number,
         Empdepartcount number
    TYPE EmploadarrayY is table of EmploadY
                          index by BINARY_INTEGER;
    Empload EmploadarrayY;
    Emploadsize number;
    END;
    create or replace
    TRIGGER TPROJECTA AFTER INSERT OR UPDATE OR DELETE ON WORKS_ON
    DECLARE
    i number:=0;
    BEGIN
      HW4AIDB.Emploadsize :=0;
      for m in (select w.essn empessn,
      count(w.pno) empprojectcount, count(distinct p.dnum) empdepartcount
      from works_on w, project p
      where w.pno=p.pnumber
      group by w.essn)loop
      i :=i+1;
      HW4AIDB.Empload(i).Empessn := m.empessn;
      HW4AIDB.Empload(i).Empprojectcount := m.empprojectcount;
      HW4AIDB.Empload(i).Empdepartcount := m.empdepartcount;
      dbms_output.PUT_LINE('TPROJECTA '||' '||m.empessn||' '||m.empprojectcount||
                           ' '||m.empdepartcount);
      end loop;
      HW4AIDB.Emploadsize :=i;
      dbms_output.PUT_LINE('==================================');
    END;TRIGGER TSALARYB BEFORE INSERT OR UPDATE OR DELETE ON EMPLOYEE
    FOR EACH ROW
    DECLARE
    w HW4AID.EmploadX;
    i number;
    mypos number;
    BEGIN
    mypos :=-1;
    for i in 1..HW4AID.Emploadsize loop
    if(:new.ssn = HW4AID.Empload(i).Empssn) then
    w.Empmgrsalary := HW4AID.Empload(i).Empmgrsalary;
    w.Empsalary := HW4AID.Empload(i).Empsalary;
    mypos :=i;
    exit;
    end if;
    end loop;
    i :=mypos;
    dbms_output.put_line('NEW '||:new.ssn||'-'||:new.salary);
    if updating then
    dbms_output.put_line('updating......');
    if(:new.salary > w.Empmgrsalary) then
    raise_application_error(-20005,'the salary is higher than that of department manager');
    end if;
    dbms_output.PUT_LINE('update done');
    end if;
    END;
    i defined two trigger for AFTER, trigger run orders are acorrding to. before statement level, before row-level, after row level and after statement level.
    so my trigger actually can not implement requirement. how to handle it. now i try to use this rule: select w.essn, w.pno,p.pnumber, p.dnum from works_on w, project p where w.pno=p.pnumber; in statement level trigger. howerver in row-level trigger i can not get value i need(p.dnum i can not get its count). if you guy have any other ideas, pls give me some advise. my brain is really run out of.
    Thanks for your help!!!

    I would recommend creating a package/procedure that is the only way to insert a user into the works_on table. Then inside this procedure you need to serialize access to the works_on table by using a select for update. Then you can count the number of projects and ensure that the new works on is valid.
    If you try to use triggers then due to Oracle's mutli-versioning, if two users insert the same data at the same time, the data integrity will be violated.
    You will obviously have an employee table. I have created one here as follows:
    create table employee (essn varchar2(9) primary key);
    insert into employee values ('999999999');
    Then you can use this table to serialize access to the works_on table by issuing a select for update against it. If you don't do this then two users executing the procedure at the same time will violate the constraint. It is important that you understand this and try it out with multiple sessions so that you understand it.
    create or replace procedure insert_works_on
    (p_essn varchar2, p_pno number, p_hours number)
    as
    l_essn varchar2(9);
    l_count number;
    begin
    select essn
    into l_essn
    from employee
    where essn = p_essn
    for update;
    select count(*)
    into l_count
    from works_on w
    join project p on p.pnumber = w.pno
    where w.essn = p_essn
    and p.dnum = (select dnum
    from project
    where pnumber = p_pno);
    if l_count < 2
    then
    insert into works_on values (p_essn, p_pno, p_hours);
    else
    dbms_output.put_line('Employee works on more than 1 project for dept');
    end if;
    end;
    Then you can try it out:
    begin
    insert_works_on('999999999',1, 10);
    end;
    commit;
    begin
    insert_works_on('999999999',2, 20);
    end;
    commit;
    begin
    insert_works_on('999999999',3, 30);
    end;
    commit;
    The first two will succeed and the last will fail. Try it out in multiple session as well to ensure it works for a multi-user scenario.

  • How to handle multiple records in BPMN process

    Hi All,
    We are using Oracle BPM 11g.In my requirement,I am using the database adapter to get the data from table and I need to validate the each record and update the status of that record from the BPM Process.But I dont know how to handle if multiple records come at a time.Can anybody please helpout from this problem.
    Thanks in advanced.
    Narasimha Rao.

    Can you have a look at this post: http://redstack.wordpress.com/2010/09/30/iteratingtraversing-arrays-in-bpm/
    It's solving a different problem, but the key is that it's using a multi-instance subprocess to iterate over an array of "things" that need to be acted in. In your case it's the set of results from the db query rather than the set of tests in the example. But the principle is the same. You'd take collection of rows from the DB and process them in a multi-instance subprocess. The text that begins with the following would be good place to start:
    "Now let’s implement the body of our process. We will use the Subprocess object to handle the traversal of the array of tests. Drag a Subprocess from the component palette on the right into the process and drop it on the line between the Start and End nodes."
    In the loop characteristics you'd define whether you want to execute serially or in parallel.

  • How to handle special characters in NWDI

    Dear All
    I am trying to update the Description from JSP form. Through JCO we are calling the RFC of ABAP. We are passing these description from Java to RFC of ABAP and this RFC update the text in Database.
    We have noticed that if there is some special character in description like as : š or ž, complete description is not getting updated in to the SAP database.
    Can anyone help me how to handle these special characters in Java. There may be N number of special characters. We want to generalize it. We want to replace these characters by s and z respectively.
    For example : We want to update this description.
    APPLERR H'4301 H'FA03 H'254C na Zagreb TC4 riješen je cleaning procedurom, te je i kroz CSR odgovoreno da trap korekcija N01TCADG-0052 u bloku UPDC više nije potrebna, te se može izbaciti (AP143).
    Uspješno su završene HR17/CN-A3 FOA-e na tranzitnom nivou, te slijedi roll-out u dva termina 12/13.04 i 19/20.04. ETK je na sastanku isporu&#269;io SW, te ALEX i mini PLEX za sve objekte.
    AP147. Poslati finalnu dokumentaciju za uvo&#273;enje paketa (implementacijsku instrukciju i sve popratne datoteke).
    WHile updated text is as follows :
    APPLERR H'4301 H'FA03 H'254C na Zagreb TC4 rije
    N01TCADG-0052 u bloku UPDC vi
    Uspje
    sastanku isporu
    AP147. Poslati finalnu dokumentaciju za uvo
    Regards
    Bhavishya

    Hi Bhavishya,
    Apparently your SAP database isn't configured to support Unicode. That would be the first solution to your problem, but I can imagine it's a bit drastic to convert your DB.
    A second solution would be to encode the input description to ASCII before storing it in the database. When reading from the database, decode again to Unicode. This way, no information is lost. A suitable encoding would be Base64. e.g.
    String description = "šunday žebra";
    String descriptionBase64 = new sun.misc.BASE64Encoder().encode(
      description.getBytes("UTF-8")); // ""
    // store descriptionBase64 in the DB
    // later, when reading descriptionBase64 from the DB
    String description2 = new String(
      new sun.misc.BASE64Decoder().decodeBuffer(descriptionBase64), "UTF-8");
    Instead of using Sun's implementation, a better alternative is to use the open source implementation
    org.apache.commons.codec.binary.Base64 from Commons Codec . 
    The 3rd approach is indeed to normalize the description by replacing all special characters with their ASCII equivalent. A rather easy solution is as follows:
    String description = "šunday žebra";
    String descriptionNormalized = sun.text.Normalizer.normalize(
      description, sun.text.Normalizer.DECOMP, 0).replaceAll(
      "[^p{ASCII}]", "");
    sun.text.Normalizer decomposes the string, e.g. "éàî" becomes "e´a`i^", after which non-ASCII characters are being removed using a regular expression.Again, note that it's usually a bad idea to use sun.* packages, see note about sun.* packages. The above code only works with J2SE 1.4 and J2SE 5.0, but it breaks in J2SE 6.0 (where
    java.text.Normalizer became part of the public API ;-). A good open source implementation can be found here: ICU4J (com.ibm.icu.text.Normalizer). 
    Kind regards,
    /Sigiswald

  • Please tell me how to handle list item in this concern

    please tell me how to handle list item in this concern
    My problem is:
    i have a category table with column categoryname(varchar type)
    I want to display the records of categoryname in a drop down list (i.e., list item )
    So ..please tell me how to do it
    Thanks in advance..

    This code is just a sample from the Help documentation. It won't work until you modify it for your form.
    Why do you have "steps" in your code? You are suppose to do what the steps tell you. You don't place the steps in your code. The steps must be removed from your code.
    Step 1 code goes in a program unit, not in a trigger.
    Step 2 and 3 code usually goes in a trigger.
    You will have to replace the names of the items and record group with your own names as you have defined them in your form.
    step 1: create a procedure in your application
    procedure load_list(itm in VARCHAR2, rg in VARCHAR2) is
    group_id RecordGroup := Find_Group(rg);
    list_id Item := Find_Item(itm);
    Begin
    if Populate_Group(group_id)<>0 then
    Message('Unable to populate record group');
    Raise Form_Trigger_Failure;
    end if;
    Clear_List(list_id);
    Populate_list(list_id, group_id);
    end;
    step 2: create a record group named rg_cat and assign Record Group Query to something like "select categoryname from category"
    step 3: call this procedure as
    load_list('categoryname','rg_cat');

  • What is the best methodology to handle database schema changes after an application has been deployed?

    Hi,
    VS2013, SQL Server 2012 Express LocalDB, EF 6.0, VB, desktop application with an end user database
    What is a reliable method to follow when there is a schema change for an end user database used by a deployed application?  In other words, each end user has their own private data, but the database needs to be expanded for additional features, etc. 
    I list here the steps it seems I must consider.  If I've missed any, please also inform:
    (1) From the first time the application is installed, it should have already moved all downloaded database files to a separate known location, most likely some sub-folder in <user>\App Data.
    (2) When there's a schema change, the new database file(s) must also be moved into the location in item (1) above.
    (3) The application must check to see if the new database file(s) have been loaded, and if not, transfer the data from the old database file(s) to the new database file(s).
    (4) Then the application can operate using the new schema.
    This may seem basic, but for those of us who haven't done it, it seems pretty complicated.  Item (3) seems to be the operative issue for database schema changes.  Existing user data needs to be preserved, but using the new schema.  I'd like
    to understand the various ways it can be done, if there are specific tools created to handle this process, and which method is considered best practice.
    (1) Should we handle the transfer in a 'one-time use' application method, i.e. do it in application code.
    (2) Should we handle the transfer using some type of 'one-time use' SQL query.  If this is the best way, can you provide some guidance if there are different alternatives for how to perform this in SQL, and where to learn/see examples?
    (3) Some other method?
    Thanks.
    Best Regards,
    Alan

    Hi Uri,
    Thank you kindly for your response.  Also thanks to Kalman Toth for showing the right forum for such questions.
    To clarify the scenario, I did not mean to imply the end user 'owns' the schema.  I was trying to communicate that in my scenario, an end user will have loaded their own private data into the database file originally delivered with the application. 
    If the schema needs to be updated for new application features, the end user's data will of course need to be preserved during the application upgrade if that upgrade includes a database schema change.
    Although I listed step 3 as transferring the data, I should have made more clear I was trying to express my limited understanding of how this process "might work", since at the present time I am not an expert with this.  I suspected my thinking
    is limited and someone would correct me.
    This is basically the reason for my post; I am hoping an expert can point me to what I need to learn about to handle database schema changes when application upgrades are deployed.  For example, if an SQL script needs to be created and deployed
    then I need to learn how to do that.  What's the best practice, or most reliable/efficient way to make sure the end user's database is changed to the new schema after the upgraded application is deployed?  Correct me if I'm wrong on this,
    but updating the end user database will have to be handled totally within the deployment tool or the upgraded application when it first starts up.
    If it makes a difference, I'll be deploying application upgrades initially using Click Once from Visual Studio, and eventually I may also use Windows Installer or Wix.
    Again, thanks for your help.
    Best Regards,
    Alan

  • How to handle multiple datasources in a web application?

    I have a J2EE Web application with Servlets and Java ServerPages. Beside this I have a in-house developed API for certain services built using Hibernate and Spring with POJO's and some EJB.
    There are 8 databases which will be used by the web application. I have heard that multiple datasources with Spring is hard to design around. Considering that I have no choice not to use Spring or Hibernate as the API's are using it.
    Anyone have a good design spesification for how to handle multiple datasources. The datasource(database) will be chosen by the user in the web application.

    Let me get this straight. You have a web application that uses spring framework and hibernate to access the database. You want the user to be able to select the database that he wants to access using spring and hibernate.
    Hopefully you are using the Spring Framework Hibernate DAO. I know you can have more that one spring application context. You can then trying to load a seperate spring application context for each database. Each application context would have it's own configuration files with the connection parameters for each datasource. You could still use JNDi entries in the web.xml for each datasource.
    Then you would need a service locater so that when a user selected a datasource he would get the application context for that datasource which he would use for the rest of his session.
    I think it is doable. It means a long load time. And you'll need to keep the application contexts as small as possible to conserve resources.

  • How to handle multiple actions in the webservice ?

    Hi Guys,
    I have multiple operations in the webservcie and under soap action in the receiver soap adapter, i dont know how to handle multiple soap operations.
    can anybody guide me, how to acheive this ?
    Thanks,
    srini

    Hi Srini !
    This weblog shows the general design of a scenario with BPM
    /people/krishna.moorthyp/blog/2005/06/09/walkthrough-with-bpm
    This link:
    http://help.sap.com/saphelp_nw04/helpdata/en/de/766840bf0cbf49e10000000a1550b0/content.htm
    show how to insert a predefined BPM pattern. You could use one of the BpmPatternSerialize.... patterns to see how you BPM should look like...
    Basically it should be:
    1) Receive Step (async/sync, as you need) to trigger the BPM
    2) Send step (sync) for first webservice
    3) Send step (sync) for second webservice
    N) Send step (sync) for N webservice
    N+1) if the whole communication is sync, here you need to use a send step to return back the answer to sender.
    Regards,
    Matias.

  • How to handle the quotes('') in the procedure?

    Hi all,
    I have been struggling with an issue in the procedure. Let us go to the functionality of the preocedure.
    I am passing a parameter that has text like
    ' INDIA,BANGALORE,"INOX,BLR","THILAK NAGAR,JAYA NAGAR "4TH 'T' BLOCK,BANGALORE",560030'
    Here, INDIA = country field
    BANGALORE = city field
    INOX,BLR = Theatre field
    THILAK NAGAR,JAYA NAGAR "4TH 'T' BLOCK,BANGALORE = address field
    560030 = pin field
    I want to load these fields into the table thru procedure. Here the issue is if any field value come with quotes(") inside the quotes like above address field. Since , please guide me how to handle that quotes while identifying the field value for either or address field or some other one.
    Table structure:
    country varchar2(100 char)
    city varchar2(100 char)
    theatre varchar2(100 char)
    address varchar2(2000 char)
    pin NUMBER
    Procedure Code:
    create or replace
    PROCEDURE prc_rollout_upload( p_text VARCHAR2 )
    AS
    v_quote_ind NUMBER := 0;
    v_first_pos NUMBER := 0;
    v_end_pos NUMBER := 0;
    v_text_data varchar2(32767 CHAR) := p_text;
    v_text_data1 varchar2(32767 CHAR);
    v_text_arr_ind NUMBER := 0;
    v_quote_pos NUMBER := 0;
    v_comma_pos NUMBER := 0;
    type text_rec IS RECORD(country VARCHAR2(20 CHAR),
    CITY VARCHAR2(1000 CHAR),
    exhibitor VARCHAR2(1000 CHAR),
    address VARCHAR2(10000 CHAR),
    PIN varchar2(6)
    type v_text_tab is table of text_rec;
    v_text_array v_text_tab := v_text_tab();
    BEGIN
    -- Fetch the values from the string to a PL/SQL table
    v_text_data1 := v_text_data;
    v_text_arr_ind := v_text_arr_ind + 1;
    v_text_array.extend(v_text_arr_ind);
    -- Country
    IF (INSTR(v_text_data1, CHR(34)) > 0 )
    THEN
    v_quote_ind := INSTR(v_text_data1, CHR(34));
    v_first_pos := INSTR(v_text_data1, CHR(34));
    v_end_pos := INSTR(v_text_data1, CHR(34),1,2);
    v_text_array(v_text_arr_ind).country := SUBSTR(v_text_data1,v_first_pos+1,v_end_pos-2);
    --DBMS_OUTPUT.PUT_LiNE(v_text_array(v_text_arr_ind).country);
    v_text_data1 := SUBSTR(v_text_data1,v_end_pos+2);
    --DBMS_OUTPUT.PUT_LiNE(v_text_data1);
    END IF;
    IF ( v_quote_ind = 0 ) THEN
    v_text_array(v_text_arr_ind).country := SUBSTR(v_text_data1,1,INSTR(v_text_data1,CHR(44))-1);
    --DBMS_OUTPUT.PUT_LiNE(v_text_array(v_text_arr_ind).country);
    v_text_data1 := SUBSTR(v_text_data1,INSTR(v_text_data1,CHR(44))+1);
    -- DBMS_OUTPUT.PUT_LiNE(v_text_data1);
    v_first_pos := 0;
    v_end_pos := 0;
    v_quote_ind := 0;
    END IF;
    -- City
    v_quote_pos := INSTR(v_text_data1,CHR(34));
    v_comma_pos := INSTR(v_text_data1,CHR(44));
    IF ( v_quote_pos < v_comma_pos )
    THEN
    v_quote_ind := INSTR(v_text_data1, CHR(34));
    v_first_pos := INSTR(v_text_data1, CHR(34));
    v_end_pos := INSTR(v_text_data1, CHR(34),1,2);
    v_text_array(v_text_arr_ind).city := SUBSTR(v_text_data1,v_first_pos+1,v_end_pos-2);
    --DBMS_OUTPUT.PUT_LiNE(v_text_array(v_text_arr_ind).city);
    v_text_data1 := SUBSTR(v_text_data1,v_end_pos+2);
    --DBMS_OUTPUT.PUT_LiNE(v_text_data1);
    v_quote_pos := 0;
    v_comma_pos := 0;
    END IF;
    IF ( v_quote_pos > v_comma_pos ) THEN
    v_text_array(v_text_arr_ind).city := SUBSTR(v_text_data1,1,INSTR(v_text_data1,CHR(44))-1);
    -- DBMS_OUTPUT.PUT_LiNE(v_text_array(v_text_arr_ind).city);
    v_text_data1 := SUBSTR(v_text_data1,INSTR(v_text_data1,CHR(44))+1);
    --DBMS_OUTPUT.PUT_LiNE(v_text_data1);
    v_first_pos := 0;
    v_end_pos := 0;
    v_quote_ind := 0;
    v_quote_pos := 0;
    v_comma_pos := 0;
    END IF;
    -- Exhibitor
    v_quote_pos := INSTR(v_text_data1,CHR(34));
    v_comma_pos := INSTR(v_text_data1,CHR(44));
    IF ( v_quote_pos < v_comma_pos )
    THEN
    v_first_pos := INSTR(v_text_data1, CHR(34));
    v_end_pos := INSTR(v_text_data1, CHR(34),1,2);
    v_text_array(v_text_arr_ind).exhibitor := SUBSTR(v_text_data1,v_first_pos+1,v_end_pos-2);
    --DBMS_OUTPUT.PUT_LiNE(v_text_array(v_text_arr_ind).exhibitor);
    v_text_data1 := SUBSTR(v_text_data1,v_end_pos+2);
    --DBMS_OUTPUT.PUT_LiNE(v_text_data1);
    v_quote_pos := 0;
    v_comma_pos := 0;
    END IF;
    IF ( v_quote_pos > v_comma_pos ) THEN
    v_text_array(v_text_arr_ind).exhibitor := SUBSTR(v_text_data1,1,INSTR(v_text_data1,CHR(44))-1);
    --DBMS_OUTPUT.PUT_LiNE(v_text_array(v_text_arr_ind).exhibitor);
    v_text_data1 := SUBSTR(v_text_data1,INSTR(v_text_data1,CHR(44))+1);
    -- DBMS_OUTPUT.PUT_LiNE(v_text_data1);
    v_first_pos := 0;
    v_end_pos := 0;
    v_quote_pos := 0;
    v_comma_pos := 0;
    END IF;
    --Address
    v_quote_pos := INSTR(v_text_data1,CHR(34));
    v_comma_pos := INSTR(v_text_data1,CHR(44));
    IF ( v_quote_pos < v_comma_pos )
    THEN
    v_first_pos := INSTR(v_text_data1, CHR(34));
    v_end_pos := INSTR(v_text_data1, CHR(34),1,2);
    v_text_array(v_text_arr_ind).address := SUBSTR(v_text_data1,v_first_pos+1,v_end_pos-2);
    --DBMS_OUTPUT.PUT_LiNE(v_text_array(v_text_arr_ind).address);
    v_text_data1 := SUBSTR(v_text_data1,v_end_pos+2);
    --DBMS_OUTPUT.PUT_LiNE(v_text_data1);
    v_quote_pos := 0;
    v_comma_pos := 0;
    END IF;
    IF ( v_quote_pos > v_comma_pos ) THEN
    v_text_array(v_text_arr_ind).address := SUBSTR(v_text_data1,1,INSTR(v_text_data1,CHR(44))-1);
    --DBMS_OUTPUT.PUT_LiNE(v_text_array(v_text_arr_ind).address);
    v_text_data1 := SUBSTR(v_text_data1,INSTR(v_text_data1,CHR(44))+1);
    -- DBMS_OUTPUT.PUT_LiNE(v_text_data1);
    v_first_pos :=0;
    v_end_pos := 0;
    v_quote_pos := 0;
    v_comma_pos := 0;
    END IF;
    --PIN
    v_quote_pos := INSTR(v_text_data1,CHR(34));
    v_comma_pos := INSTR(v_text_data1,CHR(44));
    IF ( v_quote_pos < v_comma_pos )
    THEN
    v_first_pos := INSTR(v_text_data1, CHR(34));
    v_end_pos := INSTR(v_text_data1, CHR(34),1,2);
    v_text_array(v_text_arr_ind).pin := SUBSTR(v_text_data1,v_first_pos+1,v_end_pos-2);
    --DBMS_OUTPUT.PUT_LiNE(v_text_array(v_text_arr_ind).pin);
    v_text_data1 := 0;
    --DBMS_OUTPUT.PUT_LiNE(v_text_data1);
    v_quote_pos := 0;
    v_comma_pos := 0;
    END IF;
    IF ( v_comma_pos IS NULL OR v_quote_pos > v_comma_pos ) THEN
    v_text_array(v_text_arr_ind).pin := v_text_data1;
    --DBMS_OUTPUT.PUT_LiNE(v_text_array(v_text_arr_ind).pin);
    v_text_data1 := 0;
    --DBMS_OUTPUT.PUT_LiNE(v_text_data1);
    v_first_pos := 0;
    v_end_pos := 0;
    v_quote_pos := 0;
    v_comma_pos := 0;
    END IF;
    EXCEPTION
    WHEN others then
    DBMS_OUTPUT.PUT_LiNE(SUBSTR(SQLERRM,1,200));
    END prc_rollout_upload;
    Oracle version :
    Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi
    PL/SQL Release 10.2.0.4.0 - Production
    Your help would be highly appreciated !!!
    Regards,
    Vissu.....

    To start with Try this:
    SQL> ed
    Wrote file afiedt.buf
      1    declare
      2   v_var VARCHAR2(10000) := 'INDIA,BANGALORE,"INOX,BLR","THILAK NAGAR,JAYA NAGAR ';
      3    v_delim VARCHAR2(1) := ',';
      4    v_enclose VARCHAR2(1) := '"';
      5    v_val VARCHAR2(1000) := NULL;
      6    begin
      7    v_var := v_var||'"4TH T BLOCK,BANGALORE",500365'||',';
      8    FOR I IN 1..5 LOOP
      9    v_val :=  CASE WHEN SUBSTR(v_Var,1,1) <> '"' THEN
    10              SUBSTR(v_Var,1,INSTR(v_Var,',',1,1)-1)
    11              ELSE
    12              SUBSTR(v_Var,2,INSTR(v_Var,'",',1,1) - INSTR(v_Var,'"',1,1) - 1)
    13              END;
    14    v_Var :=  CASE WHEN SUBSTR(v_Var,1,1) <> '"' THEN
    15              SUBSTR(v_Var,INSTR(v_Var,',',1,1) + 1)
    16              ELSE
    17              SUBSTR(v_Var,INSTR(v_Var,'",',1,1) + 2)
    18              END;
    19    dbms_output.put_line(v_Val);
    20    END LOOP;
    21*  end;
    SQL> /
    INDIA
    BANGALORE
    INOX,BLR
    THILAK NAGAR,JAYA NAGAR "4TH T BLOCK,BANGALORE
    500365
    PL/SQL procedure successfully completed.
    SQL>

  • How to handle varchar(4000) field in reporting?

    Hello,
    I am having a Oracle database, the data in tables of which is being stored from a web application. One of the fields of a table is having varchar(4000) datatype.
    The data in this field is text which may contain carriage returns also.
    I have to create report of this table. How to display this data properly in a report?
    I tried few things:
    Accessed the table using SQL Developer and pasted the query output in Excel.
    As the text contains carriage returns, it is being spread into one or more rows.
    How to handle this? What is the proper way to create report for such data?
    Please help.
    -Sameer

    You the following to remove the carriage returns
    SQL> select 'a'||chr(10)||'line2
    2
    SQL> select 'line 1'||chr(10)||'line 2' from dual ;
    'LINE1'||CHR(
    line 1
    line 2
    SQL> select replace('line 1'||chr(10)||'line 2',chr(10),'') from dual ;
    REPLACE('LIN
    line 1line 2
    If this is not the soln , can you paste some sample data

  • How to handle stored procedure response having multiple queries

    Hi Friends,
    While working in JDBC to RFC scenario,I faced an issue that my stored procedure is having multiple SQL queries in it. First Select and then update and again some select options.So,how to handle the response of the stored procedure. I read that while using sender JDBC
    " db.processDBSQLStatement=<SQL-Select-Statement>
    Either specify a valid SQL SELECT statement to select the data to be sent from the specified database, or specify an SQL EXECUTE statement to execute a stored procedure that contains exactly one SELECT statement  "
    So, please suggest me is there any other way to catch the output of the stored procedure.Because, if select statement is working fine but if any other quires fails then data inconsistencies can happen.Kindly help me out.
    Thanks and Regards,
    Nutan

    Hi nutan,
    >>Already exception is handled in SP.But,issue is that select will never fail so, sender adapter will get the resultset from select and continue process.But if later any other query fails in SP adpter wont be getting any response.
    Along with exception you need to handle the case when some other query fails. A SP is like a procedure which will do a certain list of activities before providing the output. So during this activity if some query fail then you can send back the response with a message!!!! And in XI handle this error (by routing it to some error receiver etc)
    >>I need to try something like creating a temporary table and inserting the resultset of slect statement in that. and perform all other operations and after successful completion of all the queries.Again i want to get all the values from the temporary table. So,whether I can write such query in the sender communication channel.Please suggest me for this.
    Approach looks ok, but think of the delay for JDBC sender adapter. IT will invoke your SP and will wait for it to fill a table and do all the processing. I guess this may become a issue for you.
    Check on the frequency of this interface and message size before taking this design approach
    Regards
    Suraj

  • How to handle multiple save exceptions (Bulk Collect)

    Hi
    How to handle Multiple Save exceptions? Is it possible to rollback to first deletion(of child table) took place in the procedure.
    There are 3 tables
    txn_header_interface(Grand Parent)
    orders(parent)
    order_items (Child)
    One transaction can have one or multiple orders in it.
    and one orders can have one or multiple order_items in it.
    We need to delete the data from child table first then its parent and then from the grand parent table.if some error occurs anywhere I need to rollback to child record deletion. Since there is flag in child table which tells us when to delete data from database.
    Is it possible to give name to Save exceptions?
    e.g.
    FORALL i IN ABC.FIRST..ABC.LAST SAVE EXCEPTIONS A
    FORALL i IN abc.FIRST..ABC.LAST SAVE EXCEPTIONS B
    if some error occurs then
    ROLLBACK A; OR ROLLBACK B;
    Please find the procedure attached
    How to handle the errors with Save exception and rollback upto child table deletion.
    CREATE OR REPLACE
    PROCEDURE DELETE_CONFIRMED_DATA IS
    TYPE TXN_HDR_INFC_ID IS TABLE OF TXN_HEADER_INTERFACE.ID%TYPE;
    TXN_HDR_INFC_ID_ARRAY TXN_HDR_INFC_ID;
    ERROR_COUNT NUMBER;
    BULK_ERRORS EXCEPTION;
    PRAGMA exception_init(bulk_errors, -24381);
    BEGIN
    SELECT THI.ID BULK COLLECT
    INTO TXN_HDR_INFC_ID_ARRAY
    FROM TXN_HEADER_INTERFACE THI,ORDERS OS,ORDER_ITEMS OI
    WHERE THI.ID = OS.TXN_HDR_INFC_ID
    AND OS.ID = OI.ORDERS_ID
    AND OI.POSTING_ITEM_ID = VPI.ID
    OI.DW_STATUS_FLAG =4 --data is moved to Datawarehouse
    MINUS
    (SELECT THI.ID FROM TXN_HEADER_INTERFACE THI,ORDERS OS,ORDER_ITEMS OI
    WHERE THI.ID = OS.TXN_HDR_INFC_ID
    AND OS.ID = OI.ORDERS_ID
    OI.DW_STATUS_FLAG !=4);
    IF SQL%NOTFOUND
    THEN
    EXIT;
    END IF;
    FORALL i IN TXN_HDR_INFC_ID_ARRAY.FIRST..TXN_HDR_INFC_ID_ARRAY.LAST SAVE
    EXCEPTIONS
    DELETE FROM ORDER_ITEMS OI
    WHERE OI.ID IN (SELECT OI.ID FROM ORDER_ITEMS OI,ORDERS
    OS,TXN_HEADER_INTERFACE THI
    WHERE OS.ID = OI.ORDERS_ID
    AND OS.TXN_HDR_INFC_ID = THI.ID
    AND THI.ID = TXN_HDR_INFC_ID_ARRAY(i));
    FORALL i IN TXN_HDR_INFC_ID_ARRAY.FIRST..TXN_HDR_INFC_ID_ARRAY.LAST SAVE
    EXCEPTIONS
    DELETE FROM ORDERS OS
    WHERE OS.ID IN (SELECT OS.ID FROM ORDERS OS,TXN_HEADER_INTERFACE THI
    WHERE OS.TXN_HDR_INFC_ID = THI.ID
    AND THI.ID = TXN_HDR_INFC_ID_ARRAY(i));
    FORALL i IN TXN_HDR_INFC_ID_ARRAY.FIRST..TXN_HDR_INFC_ID_ARRAY.LAST SAVE
    EXCEPTIONS
    DELETE FROM TXN_HEADER_INTERFACE THI
    WHERE THI.ID = TXN_HDR_INFC_ID_ARRAY(i);
    COMMIT;
    DBMS_OUTPUT.PUT_LINE(TO_CHAR(SYSDATE, 'DD-MON-YY HH:MIPM')||':
    DELETE_CONFIRMED_DATA: INFO:DELETION SUCCESSFUL');
    EXCEPTION
    WHEN OTHERS THEN
    ERROR_COUNT := SQL%BULK_EXCEPTIONS.COUNT;
    DBMS_OUTPUT.PUT_LINE(TO_CHAR(SYSDATE, 'DD-MON-YY HH:MIPM')||':
    DELETE_CONFIRMED_DATA: ERROR:Number of errors is ' ||ERROR_COUNT);
    FOR indx IN 1..ERROR_COUNT LOOP
    DBMS_OUTPUT.PUT_LINE('Error ' || indx || 'occurred during
    '||'iteration'||SQL%BULK_EXCEPTIONS(indx).ERROR_INDEX);
    DBMS_OUTPUT.PUT_LINE('Error is '
    ||SQLERRM(-SQL%BULK_EXCEPTIONS(indx).ERROR_CODE));
    END LOOP;
    END DELETE_CONFIRMED_DATA;
    Any suggestion would be of great help.
    Thanks in advance
    Anu

    If you have one or two places in your code that need multiple exceptions, just do it with multiple catch statements. Unless you are trying to write the most compact Programming 101 homework program, inventing tricks to remove two lines of code is not good use of your time.
    If you have multiple catches all over your code it could be a code smell. You may have too much stuff happening inside one try statement. It becomes hard to know what method call throws one of those exceptions, and you end up handling an exception from some else piece of code than what you intended. E.g. you mention NumberFormatException -- only process one user input inside that try/catch so it is easy to see what error message is given if that particular input is gunk. The next step of processing goes inside its own try/catch.
    In my case, the ArrayIndexOutOfBoundsException and
    NumberFormatException should be handled by the same way.Why?
    I don't think I have ever seen an ArrayIndexOutOfBoundsException that didn't indicate a bug in the code. Instead of an AIOOBE perhaps there should be an if statement somewhere that prevents it, or the algorithm logic should prevent it automatically.

  • How to handle multiple reports with single hyperlink parameter

    Please suggest in my drill down report
    i have two reports linked with one hyperlink
    parameter, how to handle this?
    please suggest for popup window with sample solution.
    for example
    report A--->B--->Chosse Report c or D
    based on parameter hyperlink at report B.
    Thanks in advance
    Raj

    Yes U R correct, that
    I'm using srw.set_hyperlink in plsql format trigger
    to open other reports , now the problem is
    how to carry over the hyperlink parameter to popup window
    and allow user to choose any reports based on the
    parameter value.
    for example
    report A (Sales person summmary report)
    |
    | (choose sales person drilled to orders report B)
    |
    B (report has the hyperlink on order no)
    |
    |
    C,D,E (many reports based on order no
    customer,order details,pending items
    to be shipped)
    Now how to handle the situation from b to c,d,e
    I suggest use hyperlink at B to open popup to show
    reports C,D,E with the order no has parameter.
    please suggest for javascript to open popup window
    for reports c,d,e.
    Thanks
    Raj

Maybe you are looking for