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?
RadoThis 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, curtEdit 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.
RadoHi 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, DenmarkThanks 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 -
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.javaIn 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 AMWhen 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; -
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,
FlorianDeleting 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
georgeThree 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
AndreaHi, 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
-
iMac. 2.4GHz. Core 2 Duo. 2GB SDRAM. OS - 10.9.5. Keynote - 6.2.2 v.1878. I just completed a keynote slide show. The Finder indicates it is 5.25GB. It is 200 slides, no movies, no audio of any kind, no special transitions. It is just photos
-
My computer says i am out of paper when i am not
my computer shows its out of paper, when its not
-
"Redact blocks" available in which version of Acrobat?
I need to decide which version of Acrobat to purchase for a very specific purpose that required the use of "Redact blocks" within the "Mark for redaction" menu. From what I can gather, this is not available in the "Standard" versions, only in the "P
-
Batch Actions out of Bridge CC
Hello. I noticed that the Tools--Photoshop--Batch Actions is completely gone from Bridge CC. Where/How do you batch action files out of bridge? That was one of my most used tools in Bridge and will be very unhappy if it is gone. Please HELP!!
-
There is no option to switch from Video FaceTime to audio FaceTime??
Hi, I am able to switch from Audio FaceTime to Video Facetime during the call but vice-versa option is not there. How can I switch from video Facetime to Audio during a call?? Please let me know. If this option is not available I seriously suggest yo