| Oracle FAQ | Your Portal to the Oracle Knowledge Grid | |
Home -> Community -> Usenet -> c.d.o.server -> MOST EFFICIENT BULK UPDATE?
Hello. I have a table in a Data Warehouse (doc_sumr01) which contains
records that are each a single line of a multi-line document. Each
document has a document number (doc_nbr) and the line item value
(doc_val), as well as an empty summary field (doc_sum_val). There are
about a million records in this table. I want to sum up the total
value of each document and put the summed value into the (doc_sum_val)
field for each record (don't even think about non-normalization
issues, this is a data warehouse used for reporting). I have created
a self-joining update statement, but this is as slow as our White
House pResident. So I am seeking an alternative, possibly using
FORALL. Any suggestions?
MY TABLE (simplified):
DOC_KEY NOT NULL NUMBER DOC_CODE NOT NULL VARCHAR2(2) DOC_NBR NOT NULL VARCHAR2(10) DOC_SUM_VAL NOT NULL NUMBER(15,2) DOC_VAL NOT NULL NUMBER(15,2)
SAMPLE VALUES: DOC_KEY DOC_CODE DOC_NBR DOC_SUM_VAL DOC_VAL
1 OA 100001 0 5.00 2 OA 100001 0 10.00 3 OA 100005 0 12.00 4 OA 100005 0 13.00 5 OA 100007 0 20.00
EXPECTED VALUES AFTER UPDATE:
DOC_KEY DOC_CODE DOC_NBR DOC_SUM_VAL DOC_VAL
1 OA 100001 15.00 5.00 2 OA 100001 15.00 10.00 3 OA 100005 25.00 12.00 4 OA 100005 25.00 13.00 5 OA 100007 20.00 20.00
SAMPLE UPDATE STATEMENT:
UPDATE doc_sumr01 ds1
SET doc_sum_val = (
SELECT SUM(ds2.doc_val)
FROM doc_sumr01 ds2
WHERE ds2.doc_nbr = ds1.doc_nbr
AND ds2.doc_code = 'OA');
ANY HELP IS APPRECIATED!!! Received on Thu Oct 31 2002 - 02:10:10 CST
![]() |
![]() |