Controlling Entity Posting Order to Avoid Constraint Violations

Hi all,
I am using Jdeveloper 11.1.1.2.
I want to create a row in a master table, then when I commit, I want automatically creating a Row in its detail table.
I am following the instructions of the paragraph 38.8 Controlling Entity Posting Order to Avoid Constraint Violations of the manual.
I have a problem when I write:
myTable.setNumberField(NumberField);
compiling, I have this error: myTable.setNumberField(Number) cannot invoke myTable.setNumberField(oracle.jbo.domain.Number) in myTableEOImpl
I have created myTableEOImpl.java automatically, using the java tab in myTableEO
How can I solve it?
Andrea

Hi,
you must make sure that data types passed to an Oracle ADF BC Number field are pf type oracle.jbo.domain.Number. Often developers forget to import this class and use Java lang Number instead
Frank

Similar Messages

  • ADF BC - Controlling Entity Posting Order when deleting

    Hello,
    I'm trying to remove detail and master entity. Default posting order is wrong so I'm getting:
    ORA-02292: integrity constraint (DET_MAST_FK) violated - child record found.
    All examples are for insert, not delete.
    This code in master entity postChanges method doesn't work:
        public void postChanges(TransactionEvent e) {
            if (getPostState() == STATUS_DELETED) {
                RowIterator ri = getDetails();
                DetailImpl detail = (DetailImpl)ri.first();
                while (detail != null) {
                    if (detail.getPostState() == STATUS_DELETED) {
                        detail.postChanges(e);
                    detail = (DetailImpl)ri.next();
            super.postChanges(e);
        }because getDetails() returns empty RowIterator. It is empty probably because this entity (master) is already deleted.
    Has somebody solution how to delete these entities without composition and cascade delete enabled?
    Rado

    This is exactly what I do.
    In MasterImpl.java:
        public void cascadeDelete() {
            RowIterator ri = getDetails();
            //deletedDetails = new ArrayList<DetailImpl>();
            while (ri.hasNext()) {
                DetailImpl detail = (DetailImpl)ri.next();
                //deletedDetails.add(detail);
                detail.remove();
            remove();
        }This method works ok. All entities are removed.
    The problem is that entities are not posted in this order. Master postChanges() will not be invoked as the last. It must be the last. I must control it and what I'm looking for is how to do it.
    Master postChanges should look like:
        public void postChanges(TransactionEvent e) {
            if (getPostState() == STATUS_DELETED) {
                [... invoke postChanges of all details with STATUS_DELETED ...]
                //if (deletedDetails != null) {
                //    for (DetailImpl detail : deletedDetails) {
                //        detail.postChanges(e);
            super.postChanges(e);
        }The part [... invoke postChanges of all details with STATUS_DELETED ...] is problematic because accessor getDetails() is empty RowIterator (deleted entities are not visible in it). This is why I wrote code which is remarked in this example.
    Methods cascadeDelete and postChanges are invoked in two separated html requests.
    Rado

  • Parent-Child post order exception; FK constraint violation

    I've seen the discussion and answer recently in this forum for configuring BC4J
    to post the parent first, then the child, to avoid the FK constraint exception??
    So I have to appologise for re-asking, but I can't get the search function to find
    any thing that needs multiple key words. :(
    I've got two Entities, parent child, with Links, and Association between them on the FK.
    What was the trick to get the framework to correctly post the parent first??
    I've looked over the FkLink and FkAssoc and all these components are included by
    the AppModule...
    Thanks, curt

    Edit the association object between your parent and child entities and set the "Composition" flag (Composite Assocation in the UI), to true. You may elect to enforce "CascadeDelete" option, if you have database Cascade-delete turned on between the associated tables and want to avoid multiple DMLs for the details.

  • ADF BC - unable to control posting order

    Hello,
    we have big troubles with controlling entity posting order when deleting entities.
    For simplicity consider this example:
    - you have Dept (master) and Emp (detail) entities
    - then:
    a) change some attribute in current Dept row
    b) remove all Emps in current Dept
    c) remove current Dept
    - then postChanges
    You will get JBO-26048 (oracle.jbo.DMLConstraintException - ORA-02292: integrity constraint violated - child record found)
    I would expect (as my operations are in correct order) that it will be posted to database without problem. It isn't.
    Explanation:
    First change of Dept entity (point a) will put this entity to the first place in transaction list of object waiting to be posted to database. It is ready for update now. Point b) will put all removed Emp entities in posting list from 2nd ... N-th position.
    Then point c) - Dept remove - instead of putting the Dept to (N+1)th posting place will change Dept state from modified to deleted because it is already in the list on the first place. Now Dept is 1st and in deleted state.
    It means first post operation will be Dept (master) deletion => constraint violation.
    Our real situation is much more complicated. We cannot just omit Dept update.
    We tried to post the Dept update first and then post removings afterwards but posting order is not cleared after postChanges. The only solution we found (very bad solution) is to clearEntityCache between postings - this also clears transaction posting list (it means: update Dept, postChanges, clearEntityCache, remove Emps, remove Dept, postChanges)
    Is there another solution how to solve this problem.
    Is it possible to postChanges after Dept update and to have transaction posting list empty and ready for another independent operations.
    Thank you.
    Rado

    Hi Sascha,
    yes I have.
    The problem is that entity accessors wil not return data when entity is in deleted state.
    In my example dept.getEmps() returns RowIterator with row count = 0 when it is used in postChanges method.
    I tried to workaround this with own ArrayList in master collecting deleted details. As a master (Dept) mustn't know its detail is going to be deleted, it is job for Emp to aks its master to store it into its temporary array of deleted Emps. Then in Dept postChanges I can iterate through the array not through accessor row iterator.
    The weakness of this solution is that remove operations and post operation mustn't be in one request. So it is not guaranteed the temporary array will survive. Therefore it must support passivating and activating. And I think it is very complicated for so "simple" problem.
    For now steps:
    1. update dept
    2. postchanges
    3. clearentitycache
    4. delete emps
    5. delete dept
    6 postchanges
    work for me.
    Rado

  • Controlling Post Order of Multiple View Objects

    Hi ,
    Here is the scenario:
    I have a use case of "Creating an Abstract"
    Steps:
    step1 ) (Page 1) Author presents the details of the abstract (Details goes to 2 tables ABSTRACT & ABSTRACT_CONTENT tables). For the 2 tables i have 2 entities. I use a view here called CreateAbstractView from both the tables( here i control the post order of the entities ....code from jdeveloper 11g guide)
    Step 2)(Page 2) Author presents details of Additional Authors. I use the view (*AdditionalAuthorDetailsView*) (Details goes to 2 tables AUTHOR & ABSTRACT). Here in the abstract table i have a parent key(parent abstract id) So all the additional authors has a record in Abstract table with parent_abstract_id from step1. ABSTRACT table also has a foreign key (author_id) .Here also i control the post order of the 2 entity object using the code from jdeveloper 11g guide.
    I also have a link from CreateAbstractView to AdditionalAuthorDetailsView (abstract_id in Abstract table from CreateAbstractView to parent_abstract_id in Abstract table from AdditionalAuthorDetailsView )
    If i have a commit on both the pages , i don't see a problem.
    But i want to have a commit process at the end so that the user can review the information. So when i try to add a commit process at the end , i get a exception (Parent Key not found exception) which i came to understand that commit from AdditionalAuthorDetailsView is happening first which is trying to insert a record into ABSTRACT table and cannot find the parent_abstract_id.
    How do i control the post order for multiple view objects in such scenarios?

    Hi!
    Please take a look at the dev guide. It comes down to controlling the posting order on entity level.
    http://download-uk.oracle.com/docs/html/B25947_01/bcadveo007.htm#CEGJAFCF
    Sascha

  • Import table data in right order to avoid violating foreign key constraints

    Gentlemen
    I am trying to import table data into an existing 10g schema using datapump import in table mode.
    However, in order to avoid violating foreign key constraints, the tables must be loaded in a specified order. I tried specifying the order in the TABLES parameter:
    TABLES=table1,table2,table3 etc.
    However, datapump seems to chose its own order leading to errors like the following:
    ORA-31693: Table data object "SCHEMAX"."TABLE3" failed to load/unload and is being skipped due to error:
    ORA-02291: integrity constraint (SCHEMAX.TABLE3_TABLE1#FK) violated - parent key not found
    I want to try to avoid having to disable all foreign keys because there are hundreds of them.
    Any advice?
    Yours
    Claus Jacobsen, Denmark

    Thanks Anantha.
    Since I am only loadding data (the constraints are already defined in the target database), I am not sure whether this approach would work. Meanwhile I have solved the problem of moving data from one system to another using another, tedious and far from elegant approach that I would prefer to not eloborate on:-)
    However, I have also discovered another probable reason why the foreign key constraints were violated, other than wrong order of table data loading. It turns out almost every single table in the schema contains a trigger supposed to generate a unique row ID from a sequence on insert such as:
    CREATE OR REPLACE TRIGGER "SCHEMAX"."TABLEX#B_I_R"
    BEFORE INSERT
    ON TABLEX
    FOR EACH ROW
    DECLARE
    BEGIN
    SELECT tablex_seq.nextval INTO :NEW.ID FROM dual;
    END;
    If the import mechanism fires this trigger, and the sequences in the source and the target systems are not synchronized, then I guess that referred records a more than likely to end up with wrong ID's compared to the row ID's in the referring rows?
    Spooky. Anybody can confirm this theory?
    Yours
    Claus
    Message was edited by:
    user586249

  • Adjust posting order of new/modified entities in ADF BC

    Hi,
    I have any ADF application which has two tables:
    BUDGET
    BUDGET_ID: NUMBER(12) -- Which is a sequence from DB sequence BUDGET_SEQ
    BUDGET_DETAIL
    BUDGET_ID: NUMBER(12) -- Foreign key to BUDGET(BUDGET_ID)
    LINE: NUMBER(7) -- A sequential number based on the master with one based, for ex: BUDGET_ID/LINE may be 1234/1, 1234/2, 1234/3 ..., and 1235/1, 1235/2, 1235/3...
    CONSTRAINT BUDGET_DETAIL_UK UNIQUE (BUDGET_ID, LINE)
    In JDev 11.1.1.2.0, the Model project has 2 entity objects, 2 view objects, 1 association and 1 viewlink, they are BudgetEO, BudgetVO, BudgetDetailEO, BudgetVO, Budget_BudgetDetail_Assoc and Budget_BudgetDetail_ViewLink (based on the association) to access the BUDGET and BUDGET_DETAIL table.
    When we mark budget, we will create a row in BudgetVO and then create some rows in BudgetDetailVO. In the BudgetDetailVO, we always reorganize the "Line" attribute to be sequential after create new row and delete row. The code like the following:
    private void reorganizeLineNo() {
    RowSetIterator iter = this.createRowSetIterator(null);
    try {
    int idx = 1;
    while (iter.hasNext()) {
    Row row = iter.next();
    row.setAttribute("Line", new Number(idx++));
    } finally {
    iter.closeRowSetIterator();
    My problem is if we add/remove BudgetDetail(s) in the following sequence, it will violate DB constraint BUDGET_DETAIL_UK:
    1. Create bRow1 in BudgetVO
    2. Create bdRow1 in BudgetDetailVO under bRow1, here bdRow1.Line=1
    3. Commit. Everything works fine
    4. Set bRow1 as current row
    5. Add a new bdRow2 in BudgetDetailVO under bRow1, here bdRow2.Line=2
    6. Remove bdRow1, here will call reorganizeLineNo(), so bdRow2.Line=1 now.
    7. Commit, exception occurs for violating DB constraint BUDGET_DETAIL_UK.
    The SQL running in DB is in order of (presodo):
    1. INSERT INTO BUDGET (BUDGET_ID) VALUES (BUDGET_SEQ.nextval);
    2. INSERT INTO BUDGET_DETAIL (BUDGET_ID, LINE) VALUES (:TheBudgetId, 1);
    3. Commit
    4. INSERT INTO BUDGET_DETAIL(BUDGET_ID,LINE) VALUES (:TheBudgetId, 1); -- Violate BUDGET_DETAIL_UK
    5. DELETE FROM BUDGET_DETAIL WHERE BUDGET_ID=:TheBudgetId AND LINE=1
    6. Commit.
    How to adjust to posting order in ADF BC to post the DELETE in step 5 before the INSERT step 4?
    Many thanks!
    Regards,
    Thomas.

    This work flows screens for this kind of constrain violation. On solution would be to commit the operation after inserting line 2, and then deleting line 1.
    I think this is a poor design, because you will run in trouble if more the one user is working in your system.You have to edit a bunch of rows only you deleted one. It's never a good idea to have an editable pk or even a part of it.
    I would try to decouple the line number from the primary key all together. You could easily generate the line number when you show the lines (i.e. using an index of the iterator). This way you can use a sequence number as pk for the line item. The order of the line items is simply the order of the sequence numbers (which will never displayed to the user).
    Timo

  • How to debug and find the exact constraint violation error

    {122712 14:22:36:ErrorCode -1 with ErrorMessage as ORA-00001: unique constraint (OPS$CMS.PK_TB_ML_EXER_UPLOAD) violated has occured for [SSO16063259009], [CMSCOST_USER] pk_xop_subsales.pr_process_exer }
    {PROCEDURE pr_process_exer(
    p_voucher_num           tb_xop_order_manager_t.voucher_num%TYPE,
    p_status_type           tb_xop_order_manager_t.status_type%type,
    p_dest                    tb_xop_order_manager_t.dest%type,
    p_reference_key            tb_xop_order_manager_t.reference_key%type,
    p_seq_num                tb_xop_order_manager_t.seq_num%type,
    p_return_code            tb_xop_order_manager_t.return_code%type,
    p_reason_desc           tb_xop_order_manager_t.reason_desc%type,
    p_activity_qty            tb_xop_order_manager_t.activity_qty%type,
    p_leaves_qty            tb_xop_order_manager_t.leaves_qty%type,
    p_exec_price            tb_xop_order_manager_t.exec_price%type,
    p_current_status        tb_xop_order_manager_t.current_status%type,
    p_err_cur          OUT  ref_cursor)
    IS
    CURSOR get_order_dtls(v_voucher_num tb_xop_order_manager_t.voucher_num%type)
    IS
    SELECT *
    FROM   tb_xop_order_manager_t
    WHERE  voucher_num = v_voucher_num;
    CURSOR get_mail_cd(v_opt_num OPTIONEE.opt_num%TYPE) IS
          SELECT mail_cd, sp_mail_cd
          FROM XOP_OPTIONEE
          WHERE opt_num = v_opt_num;
    cursor get_opt_dtls(v_opt_num OPTIONEE.opt_num%TYPE) IS
    select
    SUBSTR(trim(O.name_first) || ' ' || trim(O.name_mi) || ' ' ||
              trim(O.name_last), 1, 35) p_name,
            SUBSTR(O.address1, 1, 35) opt_addr1,
              SUBSTR(O.address2, 1, 35) opt_addr2,
              SUBSTR(O.address3, 1, 35) opt_addr3,
              SUBSTR(O.address4, 1, 35) opt_addr4,
              SUBSTR(O.address5, 1, 35) opt_addr5,
              SUBSTR(O.address6, 1, 35) opt_addr6,
            SUBSTR(trim(O.city) || ' ' || trim(O.state) || ' ' ||
            trim(O.zip) || ' ' || trim(O.country), 1, 35) city_state_zip_country,
            trim(O.city) city,
            trim(O.state) state,
            trim(O.zip) zip,
            trim(O.country) country
    from  optionee o
    where o.opt_num = v_opt_num;
    --CQ:PCTUP00210726- Added wire instructions audit for deleted wire info.
    CURSOR c_wire_instruction (
          in_wire_seq_no           TB_XOP_WIRE_INSTRUCTIONS.wire_seq_no%TYPE ) IS
          SELECT ml_brok_acct_num,
                 ssn,
                 plan_num,
                 instr_type,
                 aba_routing_num,
                 swift_routing_code,
                 bank_name,
                 bank_acct_num,
                 name_on_account,
                 bank_addr_1,
                 bank_addr_2,
                 bank_addr_3,
                 city,
                 state,
                 country,
                 zip,
                 bank_ident_num,
                 addtl_info
            FROM TB_XOP_WIRE_INSTRUCTIONS
           WHERE wire_seq_no = in_wire_seq_no
           UNION
           SELECT ml_brok_acct_num,
                 ssn,
                 plan_num,
                 instr_type,
                 aba_routing_num,
                 swift_routing_code,
                 bank_name,
                 bank_acct_num,
                 name_on_account,
                 bank_addr_1,
                 bank_addr_2,
                 bank_addr_3,
                 city,
                 state,
                 country,
                 zip,
                 bank_ident_num,
                 addtl_info
            FROM TB_XOP_WIRE_INSTRUCTIONS_AUDIT
           WHERE wire_seq_no = in_wire_seq_no;
    CURSOR c_order_qty IS
    SELECT order_qty
    FROM tb_xop_order_manager
    WHERE voucher_num = p_voucher_num;
    v_order_qty     tb_xop_order_manager.order_qty%TYPE;
    v_wire_instruction             c_wire_instruction%ROWTYPE;
    v_order_dtls      get_order_dtls%rowtype;
    v_opt_dtls        get_opt_dtls%rowtype;
    v_settle_dt       tb_ml_exer_upload.settle_dt%type;
    v_cusip_num       corp.cusip_num%type;
    v_err_cd          number(12):=0;
    v_err_msg         varchar2(4000);
    v_compy_nme       tb_fc_Compy.compy_nme%type;
    v_ml_sec_num      tb_fc_compy.ml_sec_num%type;
    v_mail_cd         xop_optionee.mail_cd%type;
    v_count1            PLS_INTEGER := 0;
    v_sum_activity_qty  tb_xop_order_manager_t.activity_qty%TYPE;
    v_transact_no       PLS_INTEGER;
    v_ivr_plan_num      tb_fc_compy.ivr_plan_num%TYPE;
    wait_for_more       EXCEPTION;
    exceeds_order_qty   EXCEPTION;
    --Added for CQ# PCTUP00481233
    v_sub_totfee number;
    v_sub_fixedfee1 number;
    v_sub_fixedfee2 number;
    v_sub_fixedfee3 number;
    v_sub_secfee number;
    v_sub_feenum number;
    --Added for CQ# PCTUP00481233
    v_fixedfee1 tb_xop_order_manager_t.fixed_fee1%TYPE; --SPIF# 43161- variable to hold fixed fee1
    BEGIN
        OPEN c_order_qty;
        FETCH c_order_qty INTO v_order_qty;
        CLOSE c_order_qty;
        dbms.output.put_line('completed1');
        IF v_order_qty <> p_activity_qty THEN
          dbms.output.put_line('completed2');
            IF p_status_type = 'EO' AND v_order_qty < p_activity_qty THEN
                RAISE exceeds_order_qty;
                  dbms.output.put_line('completed3');
            ELSIF p_status_type = 'EO' AND v_order_qty > p_activity_qty THEN
                -- Partial Execution
                INSERT INTO tb_xop_hold_multi_orders
                    ( voucher_num
                    , reference_key
                    , seq_num
                    , return_code
                    , reason_desc
                    , status_type
                    , activity_qty
                    , leaves_qty
                    , exec_price
                    , current_status
                    , waiting
                    ,activ_dt )
                VALUES
                    ( p_voucher_num
                    , p_reference_key
                    , p_seq_num
                    , p_return_code
                    , p_reason_desc
                    , p_status_type
                    , p_activity_qty
                    , p_leaves_qty
                    , p_exec_price
                    , p_current_status
                    , 'Y'
                    ,SYSTIMESTAMP );
                      dbms.output.put_line('completed4');
            ELSE
                IF p_status_type = 'BE' THEN
                    SELECT COUNT(1) INTO v_count1
                    FROM tb_xop_hold_multi_orders
                    WHERE voucher_num = p_voucher_num;
                      dbms.output.put_line('completed5');
                    IF v_count1 > 0 THEN
                        INSERT INTO tb_xop_hold_multi_orders
                            ( voucher_num
                            , reference_key
                            , seq_num
                            , return_code
                            , reason_desc
                            , status_type
                            , activity_qty
                            , leaves_qty
                            , exec_price
                            , current_status
                            , waiting
                            ,activ_dt)
                        VALUES
                            ( p_voucher_num
                            , p_reference_key
                            , p_seq_num
                            , p_return_code
                            , p_reason_desc
                            , p_status_type
                            , (-1) * p_activity_qty
                            , p_leaves_qty
                            , p_exec_price
                            , p_current_status
                            , 'Y'
                            ,SYSTIMESTAMP );
                        UPDATE tb_xop_hold_multi_orders
                        SET waiting = 'Y'
                        WHERE voucher_num = p_voucher_num;
                          dbms.output.put_line('completed6');
                    END IF;
                END IF;
            END IF;
              dbms.output.put_line('completed7');
            SELECT SUM(NVL(activity_qty,0)) INTO v_sum_activity_qty
            FROM tb_xop_hold_multi_orders
            WHERE waiting = 'Y'
            AND voucher_num = p_voucher_num;
            IF v_sum_activity_qty > 0 THEN
                IF v_sum_activity_qty <> v_order_qty THEN
                    RAISE wait_for_more;
                ELSE
                    -- final order in the partial execution; complete the process
                    UPDATE tb_xop_hold_multi_orders
                    SET waiting = 'N'
                        , process_dt = SYSDATE
                    WHERE voucher_num = p_voucher_num;
                END IF;
            END IF;
        END IF;
        UPDATE tb_xop_order_manager_t
        SET activ_dt = TO_CHAR( SYSDATE, 'YYYY-MM-DD HH24:MI:SS' ) || '.000'
            , dest = p_dest
            , reference_key = p_reference_key
            , seq_num = p_seq_num
            , return_code = p_return_code
            , reason_desc = p_reason_desc
            , status_type = p_status_type
            , activity_qty = v_order_qty --p_activity_qty
            , leaves_qty = 0 --p_leaves_qty
            , exec_price = p_exec_price
        WHERE voucher_num = p_voucher_num;
        dbms.output.put_line('completed8');
         * SPIF# 43161- Update of current status to PO moved at the end, same as how PROD works.
    IF (p_status_type = 'EO') THEN
      BEGIN
        select cusip_num
          into   v_cusip_num
          from   corp;
      EXCEPTION
          WHEN NO_DATA_FOUND THEN
              SELECT cusip_num
                INTO v_cusip_num
                FROM tb_xop_espp_compy
               WHERE compy_acronym = replace(replace(user,'CMS'),'_USER');
          WHEN OTHERS THEN
              NULL;
      END;
       select compy_nme,ml_sec_num, ivr_plan_num
       into   v_compy_nme,v_ml_sec_num, v_ivr_plan_num
       from   tb_fc_compy
       where compy_acronym = replace(replace(user,'CMS'),'_USER')
       UNION ALL
       select compy_nme, je_ml_security_number, ivr_plan_num
       from tb_xop_espp_compy
       where compy_acronym = replace(replace(user,'CMS'),'_USER');
    --   where  ivr_plan_num = replace(substr(p_voucher_num,1,7),'SSO','XOP');
      open get_order_dtls(p_voucher_num);
      FETCH get_order_dtls INTO v_order_dtls;
       v_settle_dt := fn_xop_bankopen_bizday(TRUNC(v_order_dtls.exer_date + 1));
       v_settle_dt := fn_xop_bankopen_bizday(TRUNC(v_settle_dt + 1));
       v_settle_dt := fn_xop_bankopen_bizday(TRUNC(v_settle_dt + 1));
       FOR c_mail_cd IN get_mail_cd(v_order_dtls.opt_num)
       LOOP
         v_mail_cd := c_mail_cd.mail_cd;
         -- Do we need to get sp_mail_cd and overlay with the sp_mail_cd in order_manager_t???
       END LOOP;
       OPEN get_opt_dtls(v_order_dtls.opt_num);
       FETCH get_opt_dtls INTO v_opt_dtls;
       CLOSE get_opt_dtls;
      v_fixedfee1 := nvl(v_order_dtls.fixed_fee1, 0);
       * SPIF# 43161- atleast one handling fee per day of transaction
      v_fixedfee1 := pk_xop_enh_exerupdate.chrg_tranxfixed_fee(v_fixedfee1,
                                                               v_order_dtls.symbol,
                                                               v_order_dtls.corp_acronym,
                                                               v_order_dtls.opt_num);
      --Insert into tb_ml_exer_upload
      --Added for CQ# PCTUP00481233
       Pk_Xop_Transactmodel.GET_FEE(v_order_dtls.GROUP_ID,v_order_dtls.SVC_ID,'SQ',v_order_dtls.opts_exer,
                                    round(v_order_dtls.exec_price, 4),v_sub_totfee,v_sub_fixedfee2,v_sub_fixedfee1,
                                    v_sub_fixedfee3,v_sub_secfee,v_sub_feenum,lpad(v_order_dtls.ssn,9,0));
       v_order_dtls.sec_fee:=v_sub_secfee;
       UPDATE tb_xop_order_manager_t
        SET sec_fee=v_sub_secfee
        WHERE voucher_num = p_voucher_num;
        dbms.output.put_line('completed8');
      --- End CQ # PCTUP00481233
      INSERT INTO tb_ml_exer_upload
                            (exer_num,exer_seq,
                             exer_dt, written_flag, backout_flag, output_line,
                             je_flag, opts_exer,
                             tot_tax,shrs_sold,comm_value,tot_fee,
                             mkt_prc,exer_type, soc_sec,
                             name_first, name_mi,
                             name_last,check_addr_1,check_addr_2,check_addr_3,
                             check_addr_4,check_addr_5,city,state,zip,country,
                             city_state_zip_country,
                             p_name,opt_addr1,opt_addr2,opt_addr3,opt_addr4,
                             opt_addr5,opt_addr6,
                             settle_dt,send_to_citibank_flag,
                             dom_chek_distr,foreign_currency_code,
                             distribution_method,wire_seq_no,
                             cusip_num, ml_retail_account,multi_curr_handling_fee,
                             ml_sec_num, corp_name,upd_optionee_addr,
                             outbound_flag, -- make it N
                             corp_symbol,taxwire_approve, -- make it not applicaplabe
                             exersource,
                             mail_cd, sp_mail_cd,
                             backup_withholding,
                             user_id,
                             acct_num_othr)
       VALUES(v_order_dtls.exer_num,0,v_order_dtls.exer_date,'N','N',NULL,
    -- PG 12/12/05 Changed to populate the je_flag based on dom_chek_distr         'D',
    -- PG 12/16/05 JE should not be generated for international checks.. So 'Y' always
              'Y', --je_flag
              v_order_dtls.opts_exer,0,--total tax will be 0.
              v_order_dtls.opts_exer, --shrs_sold,
              v_order_dtls.comm_value,
              --SPIF# 43161- replaced nvl(v_order_dtls.fixed_fee1, 0) with v_fixedfee1
              v_fixedfee1 + nvl(v_order_dtls.fixed_fee3,0) + nvl(v_order_dtls.sec_fee,0), --v_order_dtls.fees_amt,
              round(v_order_dtls.exec_price, 4),v_order_dtls.exer_type,
              LPAD(v_order_dtls.ssn,9,'0'), --v_order_dtls.ssn, Modified by Suresh on 02/08/07 for SPIF # 37210
              v_order_dtls.name_first,v_order_dtls.name_mi,v_order_dtls.name_last,
              v_order_dtls.check_addr_1,v_order_dtls.check_addr_2,v_order_dtls.check_addr_3,
              v_order_dtls.check_addr_4,v_order_dtls.check_addr_5,nvl(v_order_dtls.city,v_opt_dtls.city),
              nvl(v_order_dtls.state,v_opt_dtls.state),nvl(v_order_dtls.zip,v_opt_dtls.zip),
              nvl(v_order_dtls.country,v_opt_dtls.country),
              SUBSTR(nvl(v_order_dtls.city||v_order_dtls.state||v_order_dtls.zip||v_order_dtls.country,
                  v_opt_dtls.city_state_zip_country),1,34), -- COLUMN LENGTH MAX IS 35
              v_opt_dtls.p_name,v_opt_dtls.opt_addr1,v_opt_dtls.opt_addr2,v_opt_dtls.opt_addr3,
              v_opt_dtls.opt_addr4,v_opt_dtls.opt_addr5,v_opt_dtls.opt_addr6,
              v_settle_dt,decode(v_order_dtls.distribution_method,'W','Y','D','Y','C','Y','D'),
              v_order_dtls.dom_chek_distr,v_order_dtls.foreign_currency_code,
              v_order_dtls.distribution_method,v_order_dtls.wire_seq_no,
              v_cusip_num,v_order_dtls.acct_num,v_order_dtls.multi_curr_handling_fee,
    --          nvl(fn_get_sec_num(replace(substr(p_voucher_num,1,7),'SSO','XOP'),v_order_dtls.symbol),v_ml_sec_num),
              nvl(fn_get_sec_num(v_ivr_plan_num, v_order_dtls.symbol),v_ml_sec_num),
              v_compy_nme,v_order_dtls.upd_optionee_addr,
              'N', --'N' is for outbound flag.
              v_order_dtls.symbol,'D', --'D' for taxwires disabled
              'S', -- 'S' for source being subsequent sale.
              v_mail_cd,  --need to get mail_Cd??
              v_order_dtls.sp_mail_cd,v_order_dtls.backup_withholding,
              user,v_order_dtls.acct_num_othr);
    IF (NVL(v_order_dtls.wire_seq_no,0) > 0) THEN
       OPEN c_wire_instruction(v_order_dtls.wire_seq_no);
       FETCH c_wire_instruction INTO v_wire_instruction;
       CLOSE c_wire_instruction;
      INSERT INTO TB_XOP_TRANSACT_WIRE_INSTR
                           (user_id, exer_num, wire_seq_no, ml_brok_acct_num, ssn,
                            plan_num, instr_type, aba_routing_num,
                            swift_routing_code, bank_name, bank_acct_num,
                            name_on_account, bank_addr_1, bank_addr_2, bank_addr_3,
                            city, state, country, zip, bank_ident_num, addtl_info )
                        VALUES
                           (USER,v_order_dtls.exer_num, v_order_dtls.wire_seq_no,
                            v_wire_instruction.ml_brok_acct_num, v_wire_instruction.ssn,
                            v_wire_instruction.plan_num, v_wire_instruction.instr_type, v_wire_instruction.aba_routing_num,
                            v_wire_instruction.swift_routing_code, v_wire_instruction.bank_name, v_wire_instruction.bank_acct_num,
                            v_wire_instruction.name_on_account, v_wire_instruction.bank_addr_1, v_wire_instruction.bank_addr_2,
                            v_wire_instruction.bank_addr_3, v_wire_instruction.city, v_wire_instruction.state, v_wire_instruction.country, v_wire_instruction.zip,
                             v_wire_instruction.bank_ident_num, v_wire_instruction.addtl_info);
            dbms.output.put_line('completed10');
    END IF;
    /* PG 01/05/06 Call the check conversion only for international checks and wires */
    IF v_order_dtls.dom_chek_distr = 'N' AND v_order_dtls.distribution_method IN ('W', 'D', 'C') THEN
        /* PG 12/20/05 To process subsequent sales with wire or foreign currency distribution */
         v_transact_no := 88;
         pk_xop_citibank_forex.pr_cashconversion_ins_request( v_order_dtls.acct_num
                                                              , LPAD(v_order_dtls.ssn,9,'0') --v_order_dtls.ssn, Modified by Suresh on 02/15/07 for SPIF # 37210
                                                              , v_order_dtls.distribution_method
                                                              , v_order_dtls.foreign_currency_code
                                                              , v_order_dtls.wire_seq_no
                                                              , ROUND((v_order_dtls.opts_exer * round(v_order_dtls.exec_price, 4)),2)
                                                                - ROUND(v_order_dtls.comm_value,2)
                                                                - ROUND(nvl(v_order_dtls.fixed_fee1,0) + nvl(v_order_dtls.fixed_fee3,0) + nvl(v_order_dtls.sec_fee,0),2)
                                                                - nvl(v_order_dtls.multi_curr_handling_fee,0)
                                                                - nvl(v_order_dtls.backup_withholding,0) -- net proceeds
                                                              , v_order_dtls.multi_curr_handling_fee --handling fee
                    --Modified by Bhaskar/Suresh on 03/02/2006    --, v_order_dtls.login_name
                                                              , CASE v_order_dtls.login_name WHEN 'CLIENT/' THEN v_order_dtls.login_name||'SSO' ELSE v_order_dtls.login_name||'/SSO' END
                                                              , v_transact_no -- transact_no as place holder for exer_type 88
                                                              , v_order_dtls.check_addr_1
                                                              , v_order_dtls.check_addr_2
                                                              , v_order_dtls.check_addr_3
                                                              , v_order_dtls.check_addr_4
                                                              , v_order_dtls.upd_optionee_addr
                                                              , v_order_dtls.city
                                                              , v_order_dtls.state
                                                              , v_order_dtls.zip
                                                              , v_order_dtls.country
                                                              , v_order_dtls.login_ipaddress
                                                              , v_order_dtls.fcnum
                                                              , v_order_dtls.opt_num
                                                              , v_settle_dt,
                                                              p_exer_num => v_order_dtls.exer_num
    END IF;
    COMMIT;
    close get_order_dtls;
    END IF;
      * SPIF# 43161- Update to current status into PO is moved to this part, same as PROD.
    UPDATE tb_xop_order_manager_t
    SET exec_dttime = decode(p_status_type,'EO',to_char(sysdate,'DD-MON-YYYY HH24:mi:ss'),null)
         , exer_date  = TRUNC(SYSDATE)
         , cancel_dttime = decode(p_status_type,'CX',to_char(sysdate,'DD-MON-YYYY HH24:mi:ss'),'UR',to_char(sysdate,'DD-MON-YYYY HH24:mi:ss'),null)
         , current_status = 'PO'
         , sum_status = decode(p_status_type,'EO','X','C')
         , sum_stat_dttime = SYSDATE
    WHERE voucher_num = p_voucher_num;
          v_err_cd := sqlcode;
          v_err_msg := sqlerrm;
          open p_err_cur for select v_err_cd err_code,v_err_msg err_msg from dual;
    EXCEPTION
            dbms.output.put_line('completed200');
    /* PG 02/10 handled 'partial fill order' exception */
      when wait_for_more then
          v_err_cd := 0;
          v_err_msg := 'ORA-0000: normal, successful completion';
          pr_xop_log_errors('Partially filled; Waiting for more - Activity qty:' || to_char(v_sum_activity_qty)|| ' pk_xop_subsales.pr_process_exer');
          open p_err_cur for select v_err_cd err_code,v_err_msg err_msg from dual;
      when exceeds_order_qty then
          v_err_cd := sqlcode;
          v_err_msg := sqlerrm;
          open p_err_cur for select v_err_cd err_code,v_err_msg err_msg from dual;
          pr_xop_log_errors('Activity quantity exceeded the Order_qty - Activity qty: ' || to_char(p_activity_qty) || ' pk_xop_subsales.pr_process_exer');
      when others then
          v_err_cd := sqlcode;
          v_err_msg := sqlerrm;
          open p_err_cur for select v_err_cd err_code,v_err_msg err_msg from dual;
          pr_xop_log_errors('ErrorCode '||SQLCODE||' with ErrorMessage as '||SQLERRM||' has occured for '||user||'pk_xop_subsales.pr_process_exer');
                dbms.output.put_line('completed125');
    END pr_process_exer;
    Hi friends, any1 help me out how to define the ref-cursor in declaration section, and how to find at what situation the constraint error occurred..

    956684 wrote:
    Hi,.
    Friends plz help me out ..how to debug and find the exact position of the constraint violation..thank you for the help..There isn't a way to trace it unless you have caught the exception raised.
    As a way to start the debug, you will have to monitor
    1. All DML's against the Table on which you have constraint. More specifically, the DML's that act on the column you have constraint on.
    2. Use Exception Handling, to log the Error and the data that causes the constraint to fail.
    3. Do not forget to monitor the Triggers, if they are used, that would write some data into the column you have constraint on.
    Or
    Another way to trace is:
    select *
      from user_source
    where lower(text) like '%your_table_name%';
    order by type, name, line;Look at the lines, exclude that are in Declaration or in SELECT statements and target the DML's.
    Looking at the un-formatted code you posted, this statement looks like a culprit.
    INSERT INTO tb_ml_exer_upload
    (exer_num,exer_seq,
    exer_dt, written_flag, backout_flag, output_line,
    je_flag, opts_exer,
    tot_tax,shrs_sold,comm_value,tot_fee,
    mkt_prc,exer_type, soc_sec,
    name_first, name_mi,
    name_last,check_addr_1,check_addr_2,check_addr_3,
    check_addr_4,check_addr_5,city,state,zip,country,
    city_state_zip_country,
    p_name,opt_addr1,opt_addr2,opt_addr3,opt_addr4,
    opt_addr5,opt_addr6,
    settle_dt,send_to_citibank_flag,
    dom_chek_distr,foreign_currency_code,
    distribution_method,wire_seq_no,
    cusip_num, ml_retail_account,multi_curr_handling_fee,
    ml_sec_num, corp_name,upd_optionee_addr,
    outbound_flag, -- make it N
    corp_symbol,taxwire_approve, -- make it not applicaplabe
    exersource,
    mail_cd, sp_mail_cd,
    backup_withholding,
    user_id,
    acct_num_othr)
    VALUES(v_order_dtls.exer_num,0,v_order_dtls.exer_date,'N','N',NULL,
    -- PG 12/12/05 Changed to populate the je_flag based on dom_chek_distr 'D',
    -- PG 12/16/05 JE should not be generated for international checks.. So 'Y' always
    'Y', --je_flag
    v_order_dtls.opts_exer,0,--total tax will be 0.
    v_order_dtls.opts_exer, --shrs_sold,
    v_order_dtls.comm_value,
    --SPIF# 43161- replaced nvl(v_order_dtls.fixed_fee1, 0) with v_fixedfee1
    v_fixedfee1 + nvl(v_order_dtls.fixed_fee3,0) + nvl(v_order_dtls.sec_fee,0), --v_order_dtls.fees_amt,
    round(v_order_dtls.exec_price, 4),v_order_dtls.exer_type,
    LPAD(v_order_dtls.ssn,9,'0'), --v_order_dtls.ssn, Modified by Suresh on 02/08/07 for SPIF # 37210
    v_order_dtls.name_first,v_order_dtls.name_mi,v_order_dtls.name_last,
    v_order_dtls.check_addr_1,v_order_dtls.check_addr_2,v_order_dtls.check_addr_3,
    v_order_dtls.check_addr_4,v_order_dtls.check_addr_5,nvl(v_order_dtls.city,v_opt_dtls.city),
    nvl(v_order_dtls.state,v_opt_dtls.state),nvl(v_order_dtls.zip,v_opt_dtls.zip),
    nvl(v_order_dtls.country,v_opt_dtls.country),
    SUBSTR(nvl(v_order_dtls.city||v_order_dtls.state||v_order_dtls.zip||v_order_dtls.country,
    v_opt_dtls.city_state_zip_country),1,34), -- COLUMN LENGTH MAX IS 35
    v_opt_dtls.p_name,v_opt_dtls.opt_addr1,v_opt_dtls.opt_addr2,v_opt_dtls.opt_addr3,
    v_opt_dtls.opt_addr4,v_opt_dtls.opt_addr5,v_opt_dtls.opt_addr6,
    v_settle_dt,decode(v_order_dtls.distribution_method,'W','Y','D','Y','C','Y','D'),
    v_order_dtls.dom_chek_distr,v_order_dtls.foreign_currency_code,
    v_order_dtls.distribution_method,v_order_dtls.wire_seq_no,
    v_cusip_num,v_order_dtls.acct_num,v_order_dtls.multi_curr_handling_fee,
    -- nvl(fn_get_sec_num(replace(substr(p_voucher_num,1,7),'SSO','XOP'),v_order_dtls.symbol),v_ml_sec_num),
    nvl(fn_get_sec_num(v_ivr_plan_num, v_order_dtls.symbol),v_ml_sec_num),
    v_compy_nme,v_order_dtls.upd_optionee_addr,
    'N', --'N' is for outbound flag.
    v_order_dtls.symbol,'D', --'D' for taxwires disabled
    'S', -- 'S' for source being subsequent sale.
    v_mail_cd, --need to get mail_Cd??
    v_order_dtls.sp_mail_cd,v_order_dtls.backup_withholding,
    user,v_order_dtls.acct_num_othr);What is the Table structure of tb_ml_exer_upload and what columns do you have constraints on?
    Which column of the table tb_ml_exer_upload is your Primary Key (because constraint name mentions pk_tb_ml_exer_upload)?
    Edited by: Purvesh K on Jan 4, 2013 12:57 PM

  • [svn:fx-trunk] 10459: Change to ensure ScriptNodes are no longer part of the node tree after interface compilation stage in order to avoid the extra code that was necessary to avoid tripping over them during type checking , etc.

    Revision: 10459
    Author:   [email protected]
    Date:     2009-09-21 08:42:44 -0700 (Mon, 21 Sep 2009)
    Log Message:
    Change to ensure ScriptNodes are no longer part of the node tree after interface compilation stage in order to avoid the extra code that was necessary to avoid tripping over them during type checking, etc.
    Improving revision 10199 a bit, to allow for single line comments.
    QE notes: None
    Doc notes: None
    Bugs: SDK-22027
    Reviewer: Paul
    Tests run: Checking, Compiler cyclones
    Is noteworthy for integration: No
    Ticket Links:
        http://bugs.adobe.com/jira/browse/SDK-22027
    Modified Paths:
        flex/sdk/trunk/modules/compiler/src/java/flex2/compiler/as3/AbstractSyntaxTreeUtil.java
        flex/sdk/trunk/modules/compiler/src/java/flex2/compiler/mxml/InterfaceCompiler.java
        flex/sdk/trunk/modules/compiler/src/java/flex2/compiler/mxml/builder/AbstractBuilder.java
        flex/sdk/trunk/modules/compiler/src/java/flex2/compiler/mxml/builder/DocumentBuilder.java

    In general theory, one now has the Edit button for their posts, until someone/anyone Replies to it. I've had Edit available for weeks, as opposed to the old forum's ~ 30 mins.
    That, however, is in theory. I've posted, and immediately seen something that needed editing, only to find NO Replies, yet the Edit button is no longer available, only seconds later. Still, in that same thread, I'd have the Edit button from older posts, to which there had also been no Replies even after several days/weeks. Found one that had to be over a month old, and Edit was still there.
    Do not know the why/how of this behavior. At first, I thought that maybe there WAS a Reply, that "ate" my Edit button, but had not Refreshed on my screen. Refresh still showed no Replies, just no Edit either. In those cases, I just Reply and mention the [Edit].
    Also, it seems that the buttons get very scrambled at times, and Refresh does not always clear that up. I end up clicking where I "think" the right button should be and hope for the best. Seems that when the buttons do bunch up they can appear at random around the page, often three atop one another, and maybe one way the heck out in left-field.
    While I'm on a role, it would be nice to be able to switch between Flattened and Threaded Views on the fly. Each has a use, and having to go to Options and then come back down to the thread is a very slow process. Jive is probably incapable of this, but I can dream.
    Hunt

  • Unique Constraint Violation on Merge

    I'm getting a unique constraint violation on the following but I don't understand why. I know there are duplicates on remote.customer_id but I'm doing a distinct on that column but still the error. In my local table, customer_id is the primary key so it must be unique. If I remove the primary key constraint altogether, the error goes away.
    Can anyone tell me why both DISTINCT and UNIQUE fail to eliminate duplicates in this merge statement? I have confirmed that remote.customer_id is the source of the duplicates.
    merge into CUSTOMER c
    using (
    select DISTINCT remote.customer_id,
    remote.name_1,
    remote.name_2,
    remote.name_3,
    remote.name_4,
    remote.house_number_and_street,
    remote.city,
    remote.region,
    remote.country_code,
    remote.postal_code,
    p.customer_id_of_bus_partner
    from D_CUSTOMER@BW_LINK remote
    left join D_CUSTOMER_PARTNER_FUNCTIONS@BW_LINK p
    on p.customer_id = remote.customer_id
    where p.partner_function_id = 'ZS'
    ) remote
    on (c.customer_id = remote.customer_id)
    when matched then
    update set c.name_1 = remote.name_1,
              c.name_2 = remote.name_2,
              c.name_3 = remote.name_3,
              c.name_4 = remote.name_4,
              c.house_number_and_street = remote.house_number_and_street,
              c.city = remote.city,
              c.region = remote.region,
              c.country_code = remote.country_code,
              c.postal_code = remote.postal_code
    when not matched then
    insert (c.customer_id,
                   c.name_1,
                   c.name_2,
                   c.name_3,
                   c.name_4,
                   c.house_number_and_street,
                   c.city,
                   c.region,
                   c.country_code,
                   c.postal_code,
                   c.customer_id_of_bus_partner
    values (remote.customer_id,
                   remote.name_1,
                   remote.name_2,
                   remote.name_3,
                   remote.name_4,
                   remote.house_number_and_street,
                   remote.city,
                   remote.region,
                   remote.country_code,
                   remote.postal_code,
                   remote.customer_id_of_bus_partner
    LOG ERRORS INTO DML_ERROR_LOG ('Customer Merge') REJECT LIMIT 5;
    Edited by: bjiggs on Mar 25, 2010 10:56 AM

    When you mentioned the following in previous post...
    +unable to get a stable set of rows in the source tables+
    ...I suspected this :-)
    This is EQUIVALENT to "Mutating Table trigger/function" error...
    ...in the sense that the the "target rows" which are
    supposed to be changed (by this statement)
    are FOUND/MATCHED in the "source result set" MULTIPLE TIMESThe main reason this error comes up is...
    In the SOURCE result set, there are MORE than one ROW that MATCHED the TARGET result set.
    In this scenario the row with PK=3 matches more than one SOURCE rows, which one is supposed to be used for updating?
    Yes indeed, oracle is unable to get a stable set of rows in source tables.
    However the PK=4 is not matched in the target result set, so the statement will attenpt to insert both rows resulting in UNIQUE contraint error.
    This was the case with OP in this posts.
    This can be seen in your example by commenting one of the rows in table S with PK=3.
    sudhakar@ORCL>drop table D;
    Table dropped.
    sudhakar@ORCL>drop table S;
    Table dropped.
    sudhakar@ORCL>create table D ( pk number, a varchar2(10),
      2  constraint d_pk primary key (pk));
    Table created.
    sudhakar@ORCL>
    sudhakar@ORCL>insert into D values( 1, 'a');
    1 row created.
    sudhakar@ORCL>insert into D values( 2, 'a');
    1 row created.
    sudhakar@ORCL>insert into D values( 3, 'a');
    1 row created.
    sudhakar@ORCL>
    sudhakar@ORCL>commit;
    Commit complete.
    sudhakar@ORCL>
    sudhakar@ORCL>create table S ( pk number, a varchar2(10));
    Table created.
    sudhakar@ORCL>
    sudhakar@ORCL>insert into S values( 1, 'b');
    1 row created.
    sudhakar@ORCL>insert into S values( 2, 'b');
    1 row created.
    sudhakar@ORCL>insert into S values( 3, 'b');
    1 row created.
    sudhakar@ORCL>--insert into S values( 3, 'b');
    sudhakar@ORCL>insert into S values( 4, 's');
    1 row created.
    sudhakar@ORCL>insert into S values( 4, 't');
    1 row created.
    sudhakar@ORCL>
    sudhakar@ORCL>commit;
    Commit complete.
    sudhakar@ORCL>
    sudhakar@ORCL>
    sudhakar@ORCL>merge into d
      2  using s
      3  on (d.pk = s.pk)
      4  when matched then update
      5  set d.a = s.a
      6  when not matched then insert
      7  (d.pk, d.a)
      8  values (s.pk, s.a);
    merge into d
    ERROR at line 1:
    ORA-00001: unique constraint (SUDHAKAR.D_PK) violated
    sudhakar@ORCL>vr,
    Sudhakar B.

  • Budget control for Internal Order

    Hi
    Can any one tell me the setting for budget for internal order to avoid excess processing for procurement ?

    You have to configure your GL accounts.
    While creating GL a/c you will have to maintain Field status group as R017   Expense Accounts -Internal Order related in Control of doc creation in co code subscreen in tab Create/bank/interest.
    Hope this will help.
    Enjoy SAP,
    Parag Mahajan

  • Unique constraint violation error

    Hello All,
    I have a procedure called - FHM_DASHBOARD_PROC which inserts the data into a table called FHM_DASHBOARD_F fetching records from several tables. However, for a particular type of record, that data is not being inserted because of the Unique constraint violation
    the procedure is:
    create or replace
    PROCEDURE FHM_DASHBOARD_PROC AS
    DB_METRICS_CNT1Z number;
    --V_PODNAME varchar2(10);
    V_KI_CODE_DB_STATSZ varchar2(50);
    V_ERRORSTRING varchar2(100);
    --CURSOR PODNAME_CUR IS SELECT PODNAME,SHORTNAME FROM CRMODDEV.POD_DATA WHERE PODSTATUS_ID=1 AND PODTYPE_ID=1 ORDER BY PODNAME;
    -- DB STATS
    BEGIN
      -- OPEN PODNAME_CUR;
        --   LOOP
          --   FETCH PODNAME_CUR INTO V_PODNAME,V_POD_SHORTNAME ;
            -- EXIT WHEN PODNAME_CUR%NOTFOUND;
               BEGIN
                     SELECT COUNT(*) INTO DB_METRICS_CNT1Z FROM FHM_DB_METRICS_F A, FHM_DB_D B where A.DBNAME=B.DBNAME and PODNAME=V_PODNAME AND DB_DATE=TRUNC(SYSDATE-1);
                               DBMS_OUTPUT.PUT_LINE('DB_METRICS_CNT1Z :'|| DB_METRICS_CNT1Z);
                               IF DB_METRICS_CNT1Z >0 THEN
                        DBMS_OUTPUT.PUT_LINE('DB STATS');
                       INSERT INTO FHM_DASHBOARD_F(PODNAME,DASH_DATE,KI_CODE,KI_VALUE,KI_STATUS)
                          (SELECT PODNAME, DASH_DATE AS CU_DATE, KI.KI_CODE, NVL(PF.KI_VALUE,0),
                                                                  CASE
                                                                   WHEN PF.KI_VALUE = ki.warning_threshold then 2
                        when PF.KI_VALUE=0 then 0
                        ELSE 1
                        END  AS ALERT_STATUS
                        FROM
                        (SELECT PODNAME,DB_DATE AS DASH_DATE,decode(a.stats_last_status,'SUCCEEDED',1,'FAILED',2,'STOPPED',2,NULL,0) KI_VALUE from 
                        FHM_DB_METRICS_F a,fhm_db_d b where a.dbname=b.dbname and podname='XYZ' and db_date=TRUNC(SYSDATE-1) and dbtype='OLTP')PF,
                        FHM_KEY_INDICATOR_D KI where PF.PODNAME=KI.POD_NAME AND KI.TIER_CODE=3 AND KI.KI_NAME='DB_STATS'
                        AND (PF.PODNAME,TRUNC(PF.DASH_DATE),KI.KI_CODE) NOT IN (SELECT PODNAME,DASH_DATE,KI_CODE FROM FHM_DASHBOARD_F));
                                 COMMIT;
                             ELSE
                                    SELECT KI_CODE INTO V_KI_CODE_DB_STATSZ FROM FHM_KEY_INDICATOR_D WHERE POD_NAME=V_PODNAME AND KI_NAME='DB_STATS';
                                     DBMS_OUTPUT.PUT_LINE('V_KI_CODE_DB_STATSZ :'||V_KI_CODE_DB_STATSZ);
                                     INSERT INTO FHM_DASHBOARD_F(PODNAME,DASH_DATE,KI_CODE,KI_VALUE,KI_STATUS) VALUES(V_PODNAME,TRUNC(SYSDATE-1),V_KI_CODE_DB_STATSZ,0,0);
                                     COMMIT;
                             END IF;
         EXCEPTION
                            WHEN OTHERS THEN
                            V_ERRORSTRING :='INSERT INTO FHM_DASHBOARD_F_ERROR_LOG(POD_NAME,KI_NAME,ERRORNO,ERRORMESSAGE,DATETIME) VALUES
                   ('''||V_PODNAME||''',''DB_STATS'','''||SQLCODE||''','''||SQLERRM||''',SYSDATE)';                        
                   EXECUTE IMMEDIATE  V_ERRORSTRING;
                            COMMIT;
              END;
          --END LOOP;
      --CLOSE PODNAME_CUR;
    END;
    END FHM_DASHBOARD_PROC;and the table where the data is inserting is
    CREATE TABLE "CRMODDEV"."FHM_DASHBOARD_F"
        "PODNAME" VARCHAR2(25 BYTE) NOT NULL ENABLE,
        "DASH_DATE" DATE,
        "KI_CODE"   NUMBER NOT NULL ENABLE,
        "KI_VALUE"  NUMBER,
        "KI_STATUS" NUMBER,
        CONSTRAINT "FHM_DASHBOARD_F_DATE_PK" PRIMARY KEY ("DASH_DATE", "PODNAME", "KI_CODE") USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 NOLOGGING COMPUTE STATISTICS STORAGE(INITIAL 4194304 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "CRMODDEV_IDX" ENABLE,
        CONSTRAINT "FHM_DASHBOARD_F_KI_CODE_FK" FOREIGN KEY ("KI_CODE") REFERENCES "CRMODDEV"."FHM_KEY_INDICATOR_D" ("KI_CODE") ENABLE
      PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS NOLOGGING STORAGE
        INITIAL 3145728 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT
      TABLESPACE "CRMODDEV_TBL" ENABLE ROW MOVEMENT ;the Primary key constraint is FHM_DASHBOARD_F_DATE_PK and is on 3 columns of the table DASH_DATE, PODNAME, KI_CODE
    And this is the query used in the Procedure for inserting the data into the table
    (SELECT  PODNAME, DASH_DATE AS CU_DATE, KI.KI_CODE, NVL(PF.KI_VALUE,0),
                                   CASE
                                   WHEN PF.KI_VALUE = ki.warning_threshold then 2
    when PF.KI_VALUE=0 then 0
    ELSE 1
    END  AS ALERT_STATUS
    From
    (Select  Podname,Db_Date As Dash_Date,Decode(A.Stats_Last_Status,'SUCCEEDED',1,'FAILED',2,'STOPPED',2,Null,0) Ki_Value From  -- Added Distinct
    FHM_DB_METRICS_F a,fhm_db_d b where a.dbname=b.dbname and podname in ('XYZ') and db_date = TRUNC(SYSDATE-2) and dbtype='OLTP')PF,
    Fhm_Key_Indicator_D Ki Where Pf.Podname=Ki.Pod_Name And Ki.Tier_Code=3 And Ki.Ki_Name='DB_STATS'
    And (Pf.Podname,Trunc(Pf.Dash_Date),Ki.Ki_Code) Not In (Select Podname,Dash_Date,Ki_Code From Fhm_Dashboard_F));It gives *2 record* as result
    XYZ 20-JAN-12     2521     1     1
    XYZ 20-JAN-12     2521     1     1
    So it gives Unique constraint violation error while inserting. Then, I changed in the above inserting code by adding a distinct clause. After that the query gives only ONE record as result. However, that record also is not being inserted into the table and giving the same error.
    Now the question is How shall I insert this record into the table successfully ?
    Though the message is too long, However, I have given you the full structure of the object/procedure and error.
    Thank You in Advance.

    when you have 5 columns in the result set adding DISTINCT is n ot the solution as you may get the same error again.
    Check the target table whether the data exists before inserting ..if not check the table structure for unique constraint created on other columns.
    select *from <table_name>
    where
    DASH_DATE=date '2012-01-20'
    and PODNAME='XYZ'
    and  KI_CODE=2521;

  • FK constraint violations

    Hi,
    I'm experiencing FK constraint violations in spite of having set
    kodo.jdbc.ForeignKeyConstraints:true.
    I've got a table that stores queued elements like this:
    TABLE QUEUED_ELEMENTS (
    ID NUMBER,
    NAME VARCHAR2,
    NEXT_ELEMENT_ID NUMBER
    There is a FK defined:
    FOREIGN KEY (NEXT_ELEMENT_ID) REFERENCES QUEUED_ELEMENTS(ID).
    The reflexive relation of the JDO class is mapped as one-one relation.
    Deleting queued elements leads quite consistently to a FK constraint
    violation.
    I investigated kodo bug reports and came across bug #900. Does bug #900 also
    explain FK constraint violations in this context? When will this bug be
    fixed? If this scenario is supposed to work, do you need a test case?
    Thanks,
    Florian

    Deleting queued elements leads quite consistently to a FK constraint
    violation.
    I investigated kodo bug reports and came across bug #900. Does bug #900 also
    explain FK constraint violations in this context?
    Bug 900 would not apply in this case. Everything should work fine with
    a reflexive relation. One thing to watch out for is to make sure you do
    not null the relation when deleting instances. If you null the
    relation, Kodo can't "see" the dependency on commit, and so won't order
    the SQL appropriately. If you are not nulling the relation, then yes,
    we'd need a test case. Please send it to [email protected]

  • Constraint violation: complex PK

    hi,
    I'm working with a schema where the composite PK of one table A contains one-column FKs to two other tables B and C. I have a TopLink mapping set up with an object for each of these tables, and the add..() methods as recommended in the guides. I have had no problems with other schemata (PK containing just one FK), but in this case, the attempt to insert a row in table A is preceded by a mysterious attempt to insert a row into table B leading to a constraint violation because the row already exists in B.
    I apologise for being skimpy on the details, but I'd like to know if there's something I need to be doing, and if someone else has seen this problem.
    regards and TIA
    george

    Three possibilities that I can think of, with these limited details, are:
    1) you have a multiple table mapping between table A and B for the new object that you are inserting. Solution do not do this if partial data is pre-existing.
    or
    2) While creating the object within the UnitOfWork the B object is being registered without a primary key and TopLink is detecting the B object as new and attempts to insert it as well. To solve make sure B is read through the UnitOfWork before assigning A to it.
    or
    3) You are not using a UnitOfWork and simply executing an Insert query on A which may be cascading and attempting to insert B. Solution set cascade level on the query to shallow.
    In order to provide more help I suggest contacting support with the descriptors for these 2 objects and a TopLink log of the insert.
    --Gordon                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           

  • Copy Control between Sales Orders and Deliveries

    Hi Gurus,
    please can you tell me why copy control between Sales Order and Delivery doesn't work?
    At header level, into copy control, we can set 2 requirement routines, one as general requirement for copying (TVCPL-AUBED) and the other one as requirement for grouping orders into deliveries (TVCPL-AUZUS).
    At header level we can also set a routine for data transfer to define how data are passed from Sales Order header to Delivery header (TVCPL-GRUAK).
    Then we can set routines at item level, one as requirement (TVCPL-AUBED) and one as data transfer (TVCPL-GRUAP).
    When delivery is created with VL10A transaction, at header level only the first  general requirement routine is used (FV50B***). Grouping requirement is not used (we also set a break point and the program is not passing into this routine).
    Then it is used the requirement routine at item level (FV50B***).
    Please can you tel me how we camake working the routine for grouping requirement at header level?
    Thank you very much.
    Kind Regards
    Andrea

    Hi, we used standard routine even if to be sure we run also the generation report you mentioned.
    Please any other suggestions?
    Thank you very much.
    Kind Regards
    Andrea

Maybe you are looking for