| Oracle FAQ | Your Portal to the Oracle Knowledge Grid | |
Home -> Community -> Usenet -> c.d.o.server -> Possible Tune-up?
Peace all,
This is actually my friend's question. He is the developer here. The main problem is the PL/SQL script written below. It will be very slow when trying to fetch a lot of rows, in the range of thousands.
The Oracle version is still 8.1.7 on AIX 4.3.
v_PREQ_STK_CODE_221 msf221.PREQ_STK_CODE%TYPE;
v_PREQ_STK_CODE_OLD msf221.PREQ_STK_CODE%TYPE;
v_po_no_221 msf221.po_no%TYPE;
v_po_item_no_221 msf221.po_item_no%TYPE;
v_po_no_231 msf231.po_no%TYPE;
v_po_item_no_231 msf231.po_item_no%TYPE;
v_preq_no_231 msf231.preq_no%TYPE;
v_preq_item_no_231 msf231.preq_item_no%TYPE;
v_count1 NUMBER(6);
CURSOR c_po_no_231 IS
SELECT b.PREQ_STK_CODE, b.po_no, b.po_item_no,
a.po_no, a.po_item_no,
a.preq_no, a.preq_item_no
FROM msf231 a,msf221 b
WHERE (a.po_no <> b.po_no OR a.po_item_no <> b.po_item_no)
AND b.status_221 <> '3'
AND b.PO_ITEM_TYPE = 'P'
AND a.PURCHASE_REQ_3 = b.PREQ_STK_CODE
AND a.dstrct_code = b.dstrct_code
AND a.dstrct_code = '0460'
ORDER BY a.PURCHASE_REQ_3;
BEGIN
DBMS_OUTPUT.PUT_LINE('TEST1');
v_PREQ_STK_CODE_OLD := ' ';
OPEN c_po_no_231;
DBMS_OUTPUT.PUT_LINE('TEST2');
LOOP
FETCH c_po_no_231
INTO v_PREQ_STK_CODE_221, v_po_no_221, v_po_item_no_221,
v_po_no_231, v_po_item_no_231,
v_preq_no_231, v_preq_item_no_231;
IF c_po_no_231%FOUND THEN
IF (v_PREQ_STK_CODE_221 <> v_PREQ_STK_CODE_OLD) THEN
v_PREQ_STK_CODE_OLD := v_PREQ_STK_CODE_221;
DBMS_OUTPUT.PUT_LINE('TEST');
SELECT COUNT (*) INTO v_count1
FROM msf221
WHERE PREQ_STK_CODE = v_PREQ_STK_CODE_221
AND PO_ITEM_TYPE = 'P'
AND dstrct_code = '0460'
AND status_221 <> '3';
IF (v_count1 = 1) THEN
UPDATE msf231
SET po_no = v_po_no_221,
po_item_no = v_po_item_no_221
WHERE dstrct_code = '0460'
AND preq_no = v_preq_no_231
AND preq_item_no = v_preq_item_no_231;
ELSE
DBMS_OUTPUT.PUT_LINE('DUPLICATE PO Items for PR Item No: '
||
v_PREQ_STK_CODE_221 || ': ' ||
v_count1);
END IF;
END IF;
END LOOP;
CLOSE c_po_no_231;
END;
The tables in concern are as follows:
SQL> desc ellipse.msf221
Name Null? Type ----------------------------------------- -------- ---------------------------- PO_NO NOT NULL CHAR(6) PO_ITEM_NO NOT NULL CHAR(3)
...
PREQ_STK_CODE NOT NULL CHAR(9)
SQL> desc ellipse.msf231
Name Null? Type ----------------------------------------- -------- ---------------------------- DSTRCT_CODE NOT NULL CHAR(4) PREQ_NO NOT NULL CHAR(6) PREQ_ITEM_NO NOT NULL CHAR(3)
...
PO_NO NOT NULL CHAR(6) PO_ITEM_NO NOT NULL CHAR(3)
Here's a bit of index info:
INDEX_NAME TABLE_NAME COLUMN_NAME
COLUMN_POSITION COLUMN_LENGTH
--------------- ---------- -----------------------------------
--------------- -------------
MSF22101IX0 MSF221 PO_NO
1 6
MSF22101IX0 MSF221 PO_ITEM_NO
2 3
MSF22101IX1 MSF221 RECEIPT_STATUS
1 1
MSF22101IX1 MSF221 CURR_DUE_DATE
2 8
MSF22101IX1 MSF221 PO_NO
3 6
MSF22101IX2 MSF221 PREQ_STK_CODE
1 9
MSF22101IX2 MSF221 REVSD_CRT_DATE
2 8
MSF22101IX2 MSF221 PO_NO
3 6
MSF22101IX2 MSF221 PO_ITEM_NO
4 3
MSF22101IX3 MSF221 DSTRCT_CODE
1 4
MSF22101IX3 MSF221 RECEIPT_STATUS
2 1
MSF22101IX3 MSF221 EXPEDITE_DATE
3 8
MSF22101IX3 MSF221 PO_NO
4 6
MSF22101IX4 MSF221 STATUS_221
1 1
MSF22101IX4 MSF221 DSTRCT_CODE
2 4
MSF22101IX4 MSF221 PO_NO
3 6
MSF22101IX4 MSF221 PO_ITEM_NO
4 3
MSF23101IX0 MSF231 DSTRCT_CODE
1 4
MSF23101IX0 MSF231 PREQ_NO
2 6
MSF23101IX0 MSF231 PREQ_ITEM_NO
3 3
MSF23101IX1 MSF231 DSTRCT_CODE
1 4
MSF23101IX1 MSF231 STATUS_231
2 1
MSF23101IX1 MSF231 SUPPLIER_NO
3 6
MSF23101IX1 MSF231 PURCH_OFFICER
4 10
MSF23101IX1 MSF231 FRT_DLV_RUN_NO
5 19
MSF23101IX2 MSF231 DSTRCT_CODE
1 4
MSF23101IX2 MSF231 PRINT_RUN_NO_2
2 4
MSF23101IX2 MSF231 STATUS_231
3 1
MSF23101IX2 MSF231 PO_TAG_SUP
4 18
MSF23101IX2 MSF231 PURCHASE_REQ_3
5 9
MSF23101IX3 MSF231 STATUS_231
1 1
MSF23101IX3 MSF231 PO_TAG_SUP
2 18
MSF23101IX3 MSF231 PURCHASE_REQ_3
3 9
*************************
SQL> sho parameter size
NAME TYPE VALUE ------------------------------------ ------- ------------------------------ bitmap_merge_area_size integer 1048576 create_bitmap_area_size integer 8388608 db_block_size integer 8192 hash_area_size integer 131072 java_max_sessionspace_size integer 0 java_pool_size string 20000K large_pool_size string 0 max_dump_file_size string 10240 object_cache_max_size_percent integer 10 object_cache_optimal_size integer 102400 oracle_trace_collection_size integer 5242880 parallel_execution_message_size integer 2148 shared_pool_reserved_size string 1280000 shared_pool_size string 25600000 sort_area_retained_size integer 0 sort_area_size integer 65536 *********************
Is there something wrong with the PL/SQL script above?
Thanks,
=adley=
Received on Wed Jul 26 2006 - 23:19:18 CDT
![]() |
![]() |