Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
![]() |
![]() |
Home -> Community -> Usenet -> c.d.o.server -> Foreign Key Deletion problem
Environment: Windows XP SP2
Database: Oracle 9.2.0.6
I have a table with self-referencing Foreign Keys; here is the
definition:
CREATE TABLE fin_invoice
(
invoice_nbr number not null, location_id varchar2(10) not null, customer_vendor_id varchar2(10) not null, financial_source char(3) not null CONSTRAINT ckc_fin_inv_financial_source CHECK (financial_source IN ('A/P','A/R')), journal_source_code varchar2(10) not null, invoice_id varchar2(10) not null, term_code varchar2(10) null, description varchar2(50) null, currency_code varchar2(10) not null, invoice_date date not null, journal_nbr number(10) null, check_list_id varchar2(10) null, invoice_status char(1) not null CONSTRAINT ckc_fin_invoice_status CHECK (invoice_status IN
('O','C')),
discount_date date null, due_date date not null, bank_id varchar2(10) null, balance_amount number(18,6) not null, original_amount number(18,6) not null, transaction_nbr number null, reversed_transaction_nbr number DEFAULT 0 not null, gl_exchange_rate number(10,6) null, plc_exchange_rate number(10,6) null, cust_vend_exchange_rate number(10,6) null, print_flag char(1) DEFAULT 'N' not null CONSTRAINT ckc_fin_invoice_print_flag CHECK (print_flag IN
('Y','N')),
contra_amount number(18,6) null, balance_forward_print_flag char(1) DEFAULT 'N' not null CONSTRAINT ckc_fin_inv_bal_for_print_flag CHECK
(balance_forward_print_flag IN ('Y','N')),
reference_id varchar2(10) null, discount_percent number(10,6) null, discount_amount number(18,6) null, quick_check_nbr number null, quick_check_date date null, gl_date date null, reversed_journal_nbr number null, discount_taken_amount number(18,6) DEFAULT 0 not null, check_list_discount number(18,6) null, interest_calculation_date date null, interest_grace_days number null, interest_grace_amount number(18,6) null, interest_percent number(5,3) null, interest_min_amount number(18,6) null, interest_ioi_flag char(1) DEFAULT 'N' not null CONSTRAINT ckc_fin_inv_interest_ioi_flag CHECK
(interest_ioi_flag IN ('Y','N')),
control_acct_nbr varchar2(22) not null, row_source varchar(2) null CONSTRAINT ckc_fin_inv_row_source CHECK (row_source is null OR (row_source IN
('A','S','VA','VS','DC','AC','U','I','OP','RC'))),
row_source_nbr number null, quick_check_amount number(18,6) null, ngc_id varchar2(10) null, add_by varchar2(40) DEFAULT user not null, add_date date DEFAULT sysdate not null, change_by varchar2(40) DEFAULT user not null, change_date date DEFAULT sysdate not null, check_list_pay_amount number(18,6) null, last_transaction_date date DEFAULT sysdate not null, qc_journal_nbr number null, payment_method_code varchar2(10) null, hold_payment_flag char(1) DEFAULT 'N' not null CONSTRAINT ckc_fin_inv_hold_payment_flag CHECK
(hold_payment_flag IN ('Y','N')),
trader_id varchar2(10) null, tax_1_code varchar2(10) null, tax_1_nbr number(5) null, tax_2_flag char(1) DEFAULT 'N' not null CONSTRAINT ckc_fin_inv_tax_2_flag CHECK (tax_2_flag IN
('Y','N')),
tax_3_flag char(1) DEFAULT 'N' not null CONSTRAINT ckc_fin_inv_tax_3_flag CHECK (tax_3_flag IN
('Y','N')),
dp_interest_flag char(1) DEFAULT 'N' not null CONSTRAINT ckc_fin_inv_dp_interest_flag CHECK (dp_interest_flag IN ('Y','N')), payment_eligible_flag char(1) DEFAULT 'Y' not null CONSTRAINT ckc_fininv_paymenteligibleflag CHECK
(payment_eligible_flag IN ('Y','N')),
interest_invoice_nbr number null, CONSTRAINT pk_fin_invoice PRIMARY KEY (invoice_nbr) using index tablespace smartsoft_index
I also have a Foreign Key defined as follows: ALTER TABLE fin_invoice
ADD CONSTRAINT fk7_fin_invoice FOREIGN KEY (interest_invoice_nbr)
REFERENCES fin_invoice (invoice_nbr)
/
in addition to several other Foreign Keys, which are NOT
self-referencing.
Notice that this Foreign Key is self-referencing; the business case is that an invoice may also generate a separate invoice for interest calculations only.
I would like to TRUNCATE (not DELETE) the data in this table; I do NOT want to log any of this activity. This code will be executed within an application via a PURGE function; it will not be executed externally via SQL or SQL*PLUS.
Is it possible to DISABLE all Foreign Keys on this table; preferrably, I would like to DISABLE all Foreign Keys on this table, perform the TRUNCATE operation, and then ENABLE the Foreign Keys again.
I have tried the following SQL:
alter table fin_invoice
disable CONSTRAINT fk7_fin_invoice
;
which works correctly, but I am looking for a more generic solution:
the name of the Foreign Key (i.e. fk7_fin_invoice) may change due to
design changes.
I have also tried the following SQL:
alter table fin_invoice
disable CONSTRAINT all
;
but it produces this error:
ERROR at line 2:
ORA-02250: missing or invalid constraint name
I was hoping to use SQL similar to this for a trigger:
alter trigger <name of the trigger> disable/enable
;
but have not found anything yet.
Thanks
Murray Sobol
dbcSMARTsoftware inc.
Received on Thu Oct 13 2005 - 10:43:35 CDT
![]() |
![]() |