Oracle FAQ Your Portal to the Oracle Knowledge Grid
HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US
 

Home -> Community -> Usenet -> c.d.o.server -> Possible Tune-up?

Possible Tune-up?

From: Adley <adley194_at_gmail.com>
Date: 26 Jul 2006 21:19:18 -0700
Message-ID: <1153973958.500867.13180@i3g2000cwc.googlegroups.com>


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.



SET SERVEROUTPUT ON SIZE 1000000; DECLARE
  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 IF;     EXIT WHEN c_po_no_231%NOTFOUND;

  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

Original text of this message

HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US