Sql Query Tuning. Please help me to tune this query

Hi All ,
I have this problematic Sql . It is taking huge time to execute. It contains a view CIDV, which i think is the bottleneck.
I have pasted the query below. I will be pasting TKPROF and explain plan for the same. Please advice me to tune this query.
SELECT GCC.SEGMENT1 || '.' || GCC.SEGMENT2 || '.' || GCC.SEGMENT3 || '.' ||
       GCC.SEGMENT4 || '.' || GCC.SEGMENT5 || '.' || GCC.SEGMENT6 || '.' ||
       GCC.SEGMENT7 || '.' || GCC.SEGMENT8 || '.' || GCC.SEGMENT9 OFFSET_ACCOUNT,
       OOD.ORGANIZATION_CODE,
       CIDV.SUBINVENTORY_CODE OFFSET_SUBINV,
       MIL.SEGMENT1 || '.' || MIL.SEGMENT2 || '.' || MIL.SEGMENT3 || '.' ||
       MIL.SEGMENT4 || '.' || MIL.SEGMENT5 OFFSET_LOCATOR,
       CIDV.LAST_UPDATE_LOGIN
  FROM APPS.CST_INV_DISTRIBUTION_V       CIDV,
       APPS.GL_CODE_COMBINATIONS         GCC,
       APPS.MTL_ITEM_LOCATIONS           MIL,
       APPS.ORG_ORGANIZATION_DEFINITIONS OOD
WHERE CIDV.TRANSACTION_ID = :B2
   AND CIDV.PRIMARY_QUANTITY = (-1) * :B1
   AND CIDV.REFERENCE_ACCOUNT = GCC.CODE_COMBINATION_ID
   AND OOD.ORGANIZATION_ID = CIDV.ORGANIZATION_ID
   AND MIL.INVENTORY_LOCATION_ID = CIDV.LOCATOR_ID
   AND GCC.ACCOUNT_TYPE = 'A'****************
TKPROF
call     count       cpu    elapsed       disk      query    current        rows
Parse        1      0.00       0.00          0          0          0           0
Execute  68337     10.32      10.32          0          0          0           0
Fetch    68337    229.75     936.36      58819    6743323       1121       68232
total   136675    240.07     946.69      58819    6743323       1121       68232
Misses in library cache during parse: 1
Misses in library cache during execute: 1
Optimizer mode: ALL_ROWS
Parsing user id: 203     (recursive depth: 1)
Number of plan statistics captured: 1
Rows (1st) Rows (avg) Rows (max)  Row Source Operation
         1          1          1  MERGE JOIN CARTESIAN (cr=102 pr=15 pw=0 time=193608 us cost=56 size=219 card=1)
         1          1          1   NESTED LOOPS  (cr=100 pr=15 pw=0 time=193483 us cost=53 size=219 card=1)
         1          1          1    NESTED LOOPS  (cr=99 pr=15 pw=0 time=193407 us cost=52 size=215 card=1)
         1          1          1     NESTED LOOPS  (cr=96 pr=15 pw=0 time=193378 us cost=51 size=190 card=1)
         1          1          1      NESTED LOOPS  (cr=93 pr=15 pw=0 time=193284 us cost=49 size=162 card=1)
         1          1          1       NESTED LOOPS  (cr=89 pr=14 pw=0 time=185515 us cost=46 size=138 card=1)
         1          1          1        NESTED LOOPS  (cr=85 pr=12 pw=0 time=157975 us cost=44 size=81 card=1)
         1          1          1         NESTED LOOPS  (cr=83 pr=12 pw=0 time=157925 us cost=43 size=73 card=1)
         1          1          1          NESTED LOOPS  (cr=81 pr=12 pw=0 time=157641 us cost=43 size=132 card=2)
         1          1          1           VIEW  CST_INV_DISTRIBUTION_V (cr=78 pr=12 pw=0 time=156386 us cost=41 size=118 card=2)
         1          1          1            UNION-ALL  (cr=78 pr=12 pw=0 time=156378 us)
         0          0          0             NESTED LOOPS OUTER (cr=44 pr=9 pw=0 time=124997 us cost=20 size=291 card=1)
         0          0          0              NESTED LOOPS  (cr=44 pr=9 pw=0 time=124993 us cost=18 size=255 card=1)
         0          0          0               NESTED LOOPS  (cr=44 pr=9 pw=0 time=124990 us cost=18 size=251 card=1)
        33         33         33                MERGE JOIN CARTESIAN (cr=25 pr=6 pw=0 time=98544 us cost=14 size=192 card=1)
         1          1          1                 NESTED LOOPS OUTER (cr=22 pr=5 pw=0 time=85754 us cost=12 size=156 card=1)
         1          1          1                  NESTED LOOPS  (cr=19 pr=4 pw=0 time=79830 us cost=10 size=120 card=1)
         1          1          1                   NESTED LOOPS OUTER (cr=17 pr=4 pw=0 time=79813 us cost=9 size=113 card=1)
         1          1          1                    NESTED LOOPS  (cr=15 pr=4 pw=0 time=79752 us cost=8 size=106 card=1)
         1          1          1                     NESTED LOOPS  (cr=11 pr=2 pw=0 time=43120 us cost=6 size=93 card=1)
         1          1          1                      NESTED LOOPS  (cr=7 pr=2 pw=0 time=43087 us cost=4 size=83 card=1)
         1          1          1                       NESTED LOOPS  (cr=6 pr=2 pw=0 time=43072 us cost=4 size=80 card=1)
         1          1          1                        TABLE ACCESS BY INDEX ROWID MTL_MATERIAL_TRANSACTIONS (cr=5 pr=2 pw=0 time=43042 us cost=4 size=76 card=1)
         1          1          1                         INDEX UNIQUE SCAN MTL_MATERIAL_TRANSACTIONS_U1 (cr=4 pr=2 pw=0 time=43011 us cost=3 size=0 card=1)(object id 12484094)
         1          1          1                        INDEX UNIQUE SCAN MTL_TRANSACTION_TYPES_U1 (cr=1 pr=0 pw=0 time=20 us cost=0 size=764 card=191)(object id 9983)
         1          1          1                       INDEX UNIQUE SCAN MTL_TXN_SOURCE_TYPES_U1 (cr=1 pr=0 pw=0 time=7 us cost=0 size=54 card=18)(object id 9987)
         1          1          1                      INDEX UNIQUE SCAN MTL_SYSTEM_ITEMS_B_U1 (cr=4 pr=0 pw=0 time=27 us cost=2 size=736324450 card=73632445)(object id 12484155)
         1          1          1                     INDEX UNIQUE SCAN MTL_SYSTEM_ITEMS_TL_U1 (cr=4 pr=2 pw=0 time=36626 us cost=2 size=957481070 card=73652390)(object id 12484137)
         1          1          1                    TABLE ACCESS BY INDEX ROWID MTL_PARAMETERS (cr=2 pr=0 pw=0 time=42 us cost=1 size=3290 card=470)
         1          1          1                     INDEX UNIQUE SCAN MTL_PARAMETERS_U1 (cr=1 pr=0 pw=0 time=28 us cost=0 size=0 card=1)(object id 9847)
         1          1          1                   TABLE ACCESS BY INDEX ROWID MTL_PARAMETERS (cr=2 pr=0 pw=0 time=12 us cost=1 size=3290 card=470)
         1          1          1                    INDEX UNIQUE SCAN MTL_PARAMETERS_U1 (cr=1 pr=0 pw=0 time=7 us cost=0 size=0 card=1)(object id 9847)
         0          0          0                  INDEX RANGE SCAN FND_LOOKUP_VALUES_U1 (cr=3 pr=1 pw=0 time=5915 us cost=2 size=36 card=1)(object id 705891)
        33         33         33                 BUFFER SORT (cr=3 pr=1 pw=0 time=12713 us cost=12 size=36 card=1)
        33         33         33                  INDEX RANGE SCAN FND_LOOKUP_VALUES_U1 (cr=3 pr=1 pw=0 time=12582 us cost=2 size=36 card=1)(object id 705891)
         0          0          0                TABLE ACCESS BY INDEX ROWID MTL_TRANSACTION_ACCOUNTS (cr=19 pr=3 pw=0 time=26591 us cost=4 size=59 card=1)
        66         66         66                 INDEX RANGE SCAN MTL_TRANSACTION_ACCOUNTS_N1 (cr=18 pr=2 pw=0 time=13607 us cost=3 size=0 card=3)(object id 12484127)
         0          0          0               INDEX UNIQUE SCAN MTL_PARAMETERS_U1 (cr=0 pr=0 pw=0 time=0 us cost=0 size=4 card=1)(object id 9847)
         0          0          0              INDEX RANGE SCAN FND_LOOKUP_VALUES_U1 (cr=0 pr=0 pw=0 time=0 us cost=2 size=36 card=1)(object id 705891)
         1          1          1             NESTED LOOPS  (cr=34 pr=3 pw=0 time=31269 us cost=21 size=288 card=1)
         1          1          1              NESTED LOOPS  (cr=30 pr=3 pw=0 time=31161 us cost=19 size=275 card=1)
         1          1          1               NESTED LOOPS  (cr=26 pr=3 pw=0 time=31105 us cost=17 size=265 card=1)
         1          1          1                NESTED LOOPS  (cr=25 pr=3 pw=0 time=31082 us cost=17 size=261 card=1)
         1          1          1                 NESTED LOOPS OUTER (cr=23 pr=3 pw=0 time=31027 us cost=16 size=254 card=1)
         1          1          1                  NESTED LOOPS  (cr=21 pr=3 pw=0 time=30980 us cost=15 size=247 card=1)
         1          1          1                   NESTED LOOPS  (cr=20 pr=3 pw=0 time=30957 us cost=15 size=243 card=1)
         1          1          1                    NESTED LOOPS OUTER (cr=19 pr=3 pw=0 time=30926 us cost=15 size=240 card=1)
         1          1          1                     NESTED LOOPS  (cr=16 pr=3 pw=0 time=30389 us cost=13 size=204 card=1)
         1          1          1                      NESTED LOOPS  (cr=11 pr=0 pw=0 time=665 us cost=9 size=131 card=1)
         1          1          1                       NESTED LOOPS OUTER (cr=8 pr=0 pw=0 time=306 us cost=7 size=95 card=1)
         1          1          1                        TABLE ACCESS BY INDEX ROWID MTL_TRANSACTION_ACCOUNTS (cr=5 pr=0 pw=0 time=37 us cost=5 size=59 card=1)
         2          2          2                         INDEX RANGE SCAN MTL_TRANSACTION_ACCOUNTS_N1 (cr=4 pr=0 pw=0 time=17 us cost=4 size=0 card=3)(object id 12484127)
         1          1          1                        INDEX RANGE SCAN FND_LOOKUP_VALUES_U1 (cr=3 pr=0 pw=0 time=216 us cost=2 size=36 card=1)(object id 705891)
         1          1          1                       INDEX RANGE SCAN FND_LOOKUP_VALUES_U1 (cr=3 pr=0 pw=0 time=352 us cost=2 size=36 card=1)(object id 705891)
         1          1          1                      TABLE ACCESS BY INDEX ROWID MTL_MATERIAL_TRANSACTIONS (cr=5 pr=3 pw=0 time=29716 us cost=4 size=73 card=1)
         1          1          1                       INDEX RANGE SCAN MTL_MATERIAL_TRANSACTIONS_N23 (cr=4 pr=3 pw=0 time=29588 us cost=3 size=0 card=1)(object id 12484133)
         0          0          0                     INDEX RANGE SCAN FND_LOOKUP_VALUES_U1 (cr=3 pr=0 pw=0 time=520 us cost=2 size=36 card=1)(object id 705891)
         1          1          1                    INDEX UNIQUE SCAN MTL_TXN_SOURCE_TYPES_U1 (cr=1 pr=0 pw=0 time=22 us cost=0 size=3 card=1)(object id 9987)
         1          1          1                   INDEX UNIQUE SCAN MTL_TRANSACTION_TYPES_U1 (cr=1 pr=0 pw=0 time=16 us cost=0 size=4 card=1)(object id 9983)
         1          1          1                  TABLE ACCESS BY INDEX ROWID MTL_PARAMETERS (cr=2 pr=0 pw=0 time=34 us cost=1 size=7 card=1)
         1          1          1                   INDEX UNIQUE SCAN MTL_PARAMETERS_U1 (cr=1 pr=0 pw=0 time=19 us cost=0 size=0 card=1)(object id 9847)
         1          1          1                 TABLE ACCESS BY INDEX ROWID MTL_PARAMETERS (cr=2 pr=0 pw=0 time=44 us cost=1 size=7 card=1)
         1          1          1                  INDEX UNIQUE SCAN MTL_PARAMETERS_U1 (cr=1 pr=0 pw=0 time=14 us cost=0 size=0 card=1)(object id 9847)
         1          1          1                INDEX UNIQUE SCAN MTL_PARAMETERS_U1 (cr=1 pr=0 pw=0 time=13 us cost=0 size=4 card=1)(object id 9847)
         1          1          1               INDEX UNIQUE SCAN MTL_SYSTEM_ITEMS_B_U1 (cr=4 pr=0 pw=0 time=49 us cost=2 size=10 card=1)(object id 12484155)
         1          1          1              INDEX UNIQUE SCAN MTL_SYSTEM_ITEMS_TL_U1 (cr=4 pr=0 pw=0 time=96 us cost=2 size=13 card=1)(object id 12484137)
         1          1          1           TABLE ACCESS BY INDEX ROWID HR_ALL_ORGANIZATION_UNITS (cr=3 pr=0 pw=0 time=1246 us cost=1 size=7 card=1)
         1          1          1            INDEX UNIQUE SCAN HR_ORGANIZATION_UNITS_PK (cr=2 pr=0 pw=0 time=24 us cost=0 size=0 card=1)(object id 250158)
         1          1          1          INDEX UNIQUE SCAN HR_ALL_ORGANIZATION_UNTS_TL_PK (cr=2 pr=0 pw=0 time=275 us cost=0 size=7 card=1)(object id 689101)
         1          1          1         TABLE ACCESS BY INDEX ROWID MTL_PARAMETERS (cr=2 pr=0 pw=0 time=38 us cost=1 size=8 card=1)
         1          1          1          INDEX UNIQUE SCAN MTL_PARAMETERS_U1 (cr=1 pr=0 pw=0 time=15 us cost=0 size=0 card=1)(object id 9847)
         1          1          1        TABLE ACCESS BY INDEX ROWID GL_CODE_COMBINATIONS (cr=4 pr=2 pw=0 time=27531 us cost=2 size=57 card=1)
         1          1          1         INDEX UNIQUE SCAN GL_CODE_COMBINATIONS_U1 (cr=3 pr=1 pw=0 time=19925 us cost=1 size=0 card=1)(object id 51426)
         1          1          1       TABLE ACCESS BY INDEX ROWID MTL_ITEM_LOCATIONS (cr=4 pr=1 pw=0 time=7758 us cost=3 size=24 card=1)
         1          1          1        INDEX RANGE SCAN MTL_ITEM_LOCATIONS_U1 (cr=3 pr=0 pw=0 time=51 us cost=2 size=0 card=1)(object id 9761)
         1          1          1      TABLE ACCESS BY INDEX ROWID HR_ORGANIZATION_INFORMATION (cr=3 pr=0 pw=0 time=85 us cost=2 size=28 card=1)
         1          1          1       INDEX RANGE SCAN HR_ORGANIZATION_INFORMATIO_FK2 (cr=2 pr=0 pw=0 time=29 us cost=1 size=0 card=2)(object id 5379798)
         1          1          1     TABLE ACCESS BY INDEX ROWID HR_ORGANIZATION_INFORMATION (cr=3 pr=0 pw=0 time=25 us cost=1 size=25 card=1)
         1          1          1      INDEX RANGE SCAN HR_ORGANIZATION_INFORMATIO_FK2 (cr=2 pr=0 pw=0 time=11 us cost=1 size=0 card=1)(object id 5379798)
         1          1          1    INDEX FULL SCAN GL_SETS_OF_BOOKS_U2 (cr=1 pr=0 pw=0 time=69 us cost=1 size=4 card=1)(object id 1380842)
         1          1          1   BUFFER SORT (cr=2 pr=0 pw=0 time=110 us cost=55 size=0 card=1)
         1          1          1    TABLE ACCESS FULL FND_PRODUCT_GROUPS (cr=2 pr=0 pw=0 time=59 us cost=3 size=0 card=1)
Elapsed times include waiting on following events:
  Event waited on                             Times   Max. Wait  Total Waited
  ----------------------------------------   Waited  ----------  ------------
  library cache lock                              2        0.00          0.00
  library cache pin                               2        0.00          0.00
  Disk file operations I/O                      249        0.00          0.00
  db file sequential read                     58819        2.61        714.28
  gc cr grant 2-way                            5198        0.16          4.52
  gc current grant busy                           1        0.00          0.00
  KJC: Wait for msg sends to complete           517        0.00          0.05
  library cache: mutex X                        433        0.01          0.04
  gc cr grant congested                          28        0.08          0.18
  latch: ges resource hash list                   5        0.00          0.00
  gc current block 2-way                        513        0.11          0.61
  gc current block congested                      2        0.00          0.00
  latch: gc element                              16        0.00          0.01
  latch: cache buffers chains                     4        0.00          0.00
  latch: object queue header operation            3        0.00          0.00
********************************************************************************

Explain Plan for the query
SELECT STATEMENT, GOAL = ALL_ROWS               Cost=56     Cardinality=1     Bytes=219
MERGE JOIN CARTESIAN               Cost=56     Cardinality=1     Bytes=219
  NESTED LOOPS               Cost=53     Cardinality=1     Bytes=219
   NESTED LOOPS               Cost=52     Cardinality=1     Bytes=215
    NESTED LOOPS               Cost=51     Cardinality=1     Bytes=190
     NESTED LOOPS               Cost=49     Cardinality=1     Bytes=162
      NESTED LOOPS               Cost=46     Cardinality=1     Bytes=138
       NESTED LOOPS               Cost=44     Cardinality=1     Bytes=81
        NESTED LOOPS               Cost=43     Cardinality=1     Bytes=73
         NESTED LOOPS               Cost=43     Cardinality=2     Bytes=132
          VIEW     Object owner=APPS     Object name=CST_INV_DISTRIBUTION_V     Cost=41     Cardinality=2     Bytes=118
           UNION-ALL                         
            NESTED LOOPS OUTER               Cost=20     Cardinality=1     Bytes=291
             NESTED LOOPS               Cost=18     Cardinality=1     Bytes=255
              NESTED LOOPS               Cost=18     Cardinality=1     Bytes=251
               MERGE JOIN CARTESIAN               Cost=14     Cardinality=1     Bytes=192
                NESTED LOOPS OUTER               Cost=12     Cardinality=1     Bytes=156
                 NESTED LOOPS               Cost=10     Cardinality=1     Bytes=120
                  NESTED LOOPS OUTER               Cost=9     Cardinality=1     Bytes=113
                   NESTED LOOPS               Cost=8     Cardinality=1     Bytes=106
                    NESTED LOOPS               Cost=6     Cardinality=1     Bytes=93
                     NESTED LOOPS               Cost=4     Cardinality=1     Bytes=83
                      NESTED LOOPS               Cost=4     Cardinality=1     Bytes=80
                       TABLE ACCESS BY INDEX ROWID     Object owner=INV     Object name=MTL_MATERIAL_TRANSACTIONS     Cost=4     Cardinality=1     Bytes=76
                        INDEX UNIQUE SCAN     Object owner=INV     Object name=MTL_MATERIAL_TRANSACTIONS_U1     Cost=3     Cardinality=1     
                       INDEX UNIQUE SCAN     Object owner=INV     Object name=MTL_TRANSACTION_TYPES_U1     Cost=0     Cardinality=191     Bytes=764
                      INDEX UNIQUE SCAN     Object owner=INV     Object name=MTL_TXN_SOURCE_TYPES_U1     Cost=0     Cardinality=18     Bytes=54
                     INDEX UNIQUE SCAN     Object owner=INV     Object name=MTL_SYSTEM_ITEMS_B_U1     Cost=2     Cardinality=73632445     Bytes=736324450
                    INDEX UNIQUE SCAN     Object owner=INV     Object name=MTL_SYSTEM_ITEMS_TL_U1     Cost=2     Cardinality=73652390     Bytes=957481070
                   TABLE ACCESS BY INDEX ROWID     Object owner=INV     Object name=MTL_PARAMETERS     Cost=1     Cardinality=470     Bytes=3290
                    INDEX UNIQUE SCAN     Object owner=INV     Object name=MTL_PARAMETERS_U1     Cost=0     Cardinality=1     
                  TABLE ACCESS BY INDEX ROWID     Object owner=INV     Object name=MTL_PARAMETERS     Cost=1     Cardinality=470     Bytes=3290
                   INDEX UNIQUE SCAN     Object owner=INV     Object name=MTL_PARAMETERS_U1     Cost=0     Cardinality=1     
                 INDEX RANGE SCAN     Object owner=APPLSYS     Object name=FND_LOOKUP_VALUES_U1     Cost=2     Cardinality=1     Bytes=36
                BUFFER SORT               Cost=12     Cardinality=1     Bytes=36
                 INDEX RANGE SCAN     Object owner=APPLSYS     Object name=FND_LOOKUP_VALUES_U1     Cost=2     Cardinality=1     Bytes=36
               TABLE ACCESS BY INDEX ROWID     Object owner=INV     Object name=MTL_TRANSACTION_ACCOUNTS     Cost=4     Cardinality=1     Bytes=59
                INDEX RANGE SCAN     Object owner=INV     Object name=MTL_TRANSACTION_ACCOUNTS_N1     Cost=3     Cardinality=3     
              INDEX UNIQUE SCAN     Object owner=INV     Object name=MTL_PARAMETERS_U1     Cost=0     Cardinality=1     Bytes=4
             INDEX RANGE SCAN     Object owner=APPLSYS     Object name=FND_LOOKUP_VALUES_U1     Cost=2     Cardinality=1     Bytes=36
            NESTED LOOPS               Cost=21     Cardinality=1     Bytes=288
             NESTED LOOPS               Cost=19     Cardinality=1     Bytes=275
              NESTED LOOPS               Cost=17     Cardinality=1     Bytes=265
               NESTED LOOPS               Cost=17     Cardinality=1     Bytes=261
                NESTED LOOPS OUTER               Cost=16     Cardinality=1     Bytes=254
                 NESTED LOOPS               Cost=15     Cardinality=1     Bytes=247
                  NESTED LOOPS               Cost=15     Cardinality=1     Bytes=243
                   NESTED LOOPS OUTER               Cost=15     Cardinality=1     Bytes=240
                    NESTED LOOPS               Cost=13     Cardinality=1     Bytes=204
                     NESTED LOOPS               Cost=9     Cardinality=1     Bytes=131
                      NESTED LOOPS OUTER               Cost=7     Cardinality=1     Bytes=95
                       TABLE ACCESS BY INDEX ROWID     Object owner=INV     Object name=MTL_TRANSACTION_ACCOUNTS     Cost=5     Cardinality=1     Bytes=59
                        INDEX RANGE SCAN     Object owner=INV     Object name=MTL_TRANSACTION_ACCOUNTS_N1     Cost=4     Cardinality=3     
                       INDEX RANGE SCAN     Object owner=APPLSYS     Object name=FND_LOOKUP_VALUES_U1     Cost=2     Cardinality=1     Bytes=36
                      INDEX RANGE SCAN     Object owner=APPLSYS     Object name=FND_LOOKUP_VALUES_U1     Cost=2     Cardinality=1     Bytes=36
                     TABLE ACCESS BY INDEX ROWID     Object owner=INV     Object name=MTL_MATERIAL_TRANSACTIONS     Cost=4     Cardinality=1     Bytes=73
                      INDEX RANGE SCAN     Object owner=INV     Object name=MTL_MATERIAL_TRANSACTIONS_N23     Cost=3     Cardinality=1     
                    INDEX RANGE SCAN     Object owner=APPLSYS     Object name=FND_LOOKUP_VALUES_U1     Cost=2     Cardinality=1     Bytes=36
                   INDEX UNIQUE SCAN     Object owner=INV     Object name=MTL_TXN_SOURCE_TYPES_U1     Cost=0     Cardinality=1     Bytes=3
                  INDEX UNIQUE SCAN     Object owner=INV     Object name=MTL_TRANSACTION_TYPES_U1     Cost=0     Cardinality=1     Bytes=4
                 TABLE ACCESS BY INDEX ROWID     Object owner=INV     Object name=MTL_PARAMETERS     Cost=1     Cardinality=1     Bytes=7
                  INDEX UNIQUE SCAN     Object owner=INV     Object name=MTL_PARAMETERS_U1     Cost=0     Cardinality=1     
                TABLE ACCESS BY INDEX ROWID     Object owner=INV     Object name=MTL_PARAMETERS     Cost=1     Cardinality=1     Bytes=7
                 INDEX UNIQUE SCAN     Object owner=INV     Object name=MTL_PARAMETERS_U1     Cost=0     Cardinality=1     
               INDEX UNIQUE SCAN     Object owner=INV     Object name=MTL_PARAMETERS_U1     Cost=0     Cardinality=1     Bytes=4
              INDEX UNIQUE SCAN     Object owner=INV     Object name=MTL_SYSTEM_ITEMS_B_U1     Cost=2     Cardinality=1     Bytes=10
             INDEX UNIQUE SCAN     Object owner=INV     Object name=MTL_SYSTEM_ITEMS_TL_U1     Cost=2     Cardinality=1     Bytes=13
          TABLE ACCESS BY INDEX ROWID     Object owner=HR     Object name=HR_ALL_ORGANIZATION_UNITS     Cost=1     Cardinality=1     Bytes=7
           INDEX UNIQUE SCAN     Object owner=HR     Object name=HR_ORGANIZATION_UNITS_PK     Cost=0     Cardinality=1     
         INDEX UNIQUE SCAN     Object owner=HR     Object name=HR_ALL_ORGANIZATION_UNTS_TL_PK     Cost=0     Cardinality=1     Bytes=7
        TABLE ACCESS BY INDEX ROWID     Object owner=INV     Object name=MTL_PARAMETERS     Cost=1     Cardinality=1     Bytes=8
         INDEX UNIQUE SCAN     Object owner=INV     Object name=MTL_PARAMETERS_U1     Cost=0     Cardinality=1     
       TABLE ACCESS BY INDEX ROWID     Object owner=GL     Object name=GL_CODE_COMBINATIONS     Cost=2     Cardinality=1     Bytes=57
        INDEX UNIQUE SCAN     Object owner=GL     Object name=GL_CODE_COMBINATIONS_U1     Cost=1     Cardinality=1     
      TABLE ACCESS BY INDEX ROWID     Object owner=INV     Object name=MTL_ITEM_LOCATIONS     Cost=3     Cardinality=1     Bytes=24
       INDEX RANGE SCAN     Object owner=INV     Object name=MTL_ITEM_LOCATIONS_U1     Cost=2     Cardinality=1     
     TABLE ACCESS BY INDEX ROWID     Object owner=HR     Object name=HR_ORGANIZATION_INFORMATION     Cost=2     Cardinality=1     Bytes=28
      INDEX RANGE SCAN     Object owner=HR     Object name=HR_ORGANIZATION_INFORMATIO_FK2     Cost=1     Cardinality=2     
    TABLE ACCESS BY INDEX ROWID     Object owner=HR     Object name=HR_ORGANIZATION_INFORMATION     Cost=1     Cardinality=1     Bytes=25
     INDEX RANGE SCAN     Object owner=HR     Object name=HR_ORGANIZATION_INFORMATIO_FK2     Cost=1     Cardinality=1     
   INDEX FULL SCAN     Object owner=GL     Object name=GL_SETS_OF_BOOKS_U2     Cost=1     Cardinality=1     Bytes=4
  BUFFER SORT               Cost=55     Cardinality=1     
   TABLE ACCESS FULL     Object owner=APPLSYS     Object name=FND_PRODUCT_GROUPS     Cost=3     Cardinality=1     

Similar Messages

  • Please help to re-write this query using exists or with

    Hi please help to re-write this query using exists or with, i need to write same code for 45 day , 90 days and so on but sub query condition is same for all
    SELECT SUM (DECODE (t_one_mon_c_paid_us, 0, 0, 1)) t_two_y_m_mul_ca_
    FROM (SELECT SUM (one_mon_c_paid_us) t_one_mon_c_paid_us
    FROM (
    SELECT a.individual_id individual_id,
    CASE
    WHEN NVL
    (b.ship_dt,
    TO_DATE ('05-MAY-1955')
    ) >= SYSDATE - 45
    AND a.country_cd = 'US'
    AND b.individual_id in (
    SELECT UNIQUE c.individual_id
    FROM order c
    WHERE c.prod_cd = 'A'
    AND NVL (c.last_payment_dt,
    TO_DATE ('05-MAY-1955')
    ) >= SYSDATE - 745)
    THEN 1
    ELSE 0
    END AS one_mon_c_paid_us
    FROM items b, addr a, product d
    WHERE b.prod_id = d.prod_id
    AND d.affinity_1_cd = 'ADH'
    AND b.individual_id = a.individual_id)
    GROUP BY individual_id)
    Edited by: user4522368 on Aug 23, 2010 9:11 AM

    Please try and place \ before and after you code \Could you not remove the inline column select with the following?
    SELECT a.individual_id individual_id
         ,CASE
            when b.Ship_dt is null then
              3
            WHEN b.ship_dt >= SYSDATE - 90
              3
            WHEN b.ship_dt >= SYSDATE - 45
              2
            WHEN b.ship_dt >= SYSDATE - 30
              1
          END AS one_mon_c_paid_us
    FROM  items           b
         ,addr            a
         ,product         d
         ,order           o
    WHERE b.prod_id       = d.prod_id
    AND   d.affinity_1_cd = 'ADH'
    AND   b.individual_id = a.individual_id
    AND   b.Individual_ID = o.Individual_ID
    and   o.Prod_CD       = 'A'             
    and   NVL (o.last_payment_dt,TO_DATE ('05-MAY-1955') ) >= SYSDATE - 745
    and   a.Country_CD    = 'US'

  • Please help me to tune this PL/SQL...

    Hi everyone,
        I have a SQL query which runs ok when i run it individually but the same query if
    i use it in a procedure.The procedure is hanging up.Could someone please help to tune this
    SQL query and please check my procedure why is it hanging up.
    SQL Query
    =========
    SELECT active_members.member_nbr,
      active_members.name_last,
      active_members.name_first,
      active_members.name_middle,
      active_members.dob,
      active_members.sex,
      active_members.subsciber_nbr,
      active_members.ssn,
      active_members.name_suffix,
      active_members.class_x,
      active_members.aff_nbr,
    CASE
    WHEN TRIM(active_members.class_x) = 'SE' THEN
        (SELECT DISTINCT(mssp.member_nbr)
         FROM member_span mssp
         WHERE SUBSTR(mssp.member_nbr,    1,    9) = SUBSTR(active_members.member_nbr,    1,    9)
         AND mssp.class_x = 'SP'
         AND rownum = 1)
       WHEN TRIM(active_members.class_x) = 'SP' THEN
          (SELECT DISTINCT(mssp.member_nbr)
           FROM member_span mssp
           WHERE SUBSTR(mssp.member_nbr,    1,    9) = SUBSTR(active_members.member_nbr,    1,    9)
           AND mssp.class_x = 'SE'
           AND rownum = 1)
      ELSE
        NULL
       END)
    spouse_member_nbr,
      active_members.division_nbr,
      active_members.ymdeff,
      active_members.ymdend,
      active_members.actual_ymd_enddt,
      active_members.email_id,
      active_members.network_id,
      active_members.insurance_company_code,
      active_members.cob_flag,
      active_members.vip_flag,
      active_members.pre_x_flag,
      active_members.region,
      active_contracts.language_x,
      active_contracts.corp_nbr,
      active_members.group_nbr,
      active_members.non_erisa_status
    FROM
      (SELECT mb_active.member_nbr,
         mb_active.contract_nbr,
         mb_active.name_last,
         mb_active.name_first,
         mb_active.name_middle,
         ms_active.ymdeff,
         ms_active.ymdend,
         to_char(to_date(
       CASE
       WHEN LENGTH(mb_active.ymdbirth) = 8 THEN mb_active.ymdbirth
       ELSE NULL
       END,    'YYYYMMDD'),    'MM/DD/YYYY') dob,
         mb_active.sex,
         to_char(to_date(ms_active.ymdeff,    'YYYYMMDD'),    'MM/DD/YYYY') ymdeff_formatted,
         to_char(to_date(ms_active.ymdend,    'YYYYMMDD'),    'MM/DD/YYYY') ymdend_formatted,
         ms_active.void,
       CASE
       WHEN SUBSTR(mb_active.member_nbr,    10,    2) = '00' THEN mb_active.member_nbr
       ELSE SUBSTR(mb_active.member_nbr,    1,    9) || '00'
       END) subsciber_nbr,
         mb_active.ssn,
         mb_active.name_suffix,
         ms_active.class_x,
         ms_active.aff_nbr,
         ms_active.division_nbr,
       CASE
       WHEN TRIM(ms_active.ymdend) = '99991231' THEN NULL
       ELSE to_char(to_date(ms_active.ymdend,    'YYYYMMDD'),    'MM/DD/YYYY')
       END) actual_ymd_enddt,
       CASE
       WHEN TRIM(ms_active.business_unit) = '01' THEN ms_active.business_unit || '-' || ms_active.prog_nbr
       WHEN TRIM(ms_active.business_unit) = '03' THEN ms_active.business_unit || '-' || ms_active.prog_nbr || '-' || ms_active.carrier
       ELSE NULL
       END) network_id,
         ms_active.business_unit || '-' || ms_active.prog_nbr || '-' || ms_active.carrier insurance_company_code,
          (SELECT DISTINCT(email)
         FROM dbo.av_mem_email
         WHERE dbo.av_mem_email.member_nbr = mb_active.member_nbr
         AND rownum = 1)
      email_id,
         mb_active.lr_response cob_flag,
         mb_active.record_nbr vip_flag,
         ms_active.pre_exist pre_x_flag,
         ms_active.region region,
         ms_active.group_nbr,
       CASE
       WHEN
        (SELECT TRIM(div.div_status)
         FROM division div
         WHERE TRIM(div.division_nbr) = TRIM(ms_active.division_nbr)) = 'NULL' THEN
          'Y'
         ELSE
          'N'
         END)
      non_erisa_status
       FROM member mb_active,
         member_span ms_active
       WHERE mb_active.member_nbr = ms_active.member_nbr
       AND(20090707 BETWEEN ms_active.ymdeff
       AND ms_active.ymdend
       AND TRIM(ms_active.void) IS NULL
    active_members,
        (SELECT DISTINCT(contract.contract_nbr),
         contract.language_x,
         contract_span.corp_nbr
       FROM contract,
         contract_span
       WHERE contract.contract_nbr = contract_span.contract_nbr
       AND(20090707 BETWEEN contract_span.ymdeff
       AND contract_span.ymdend)
       AND TRIM(contract_span.void) IS
      NULL)
    active_contracts
    WHERE TRIM(active_members.contract_nbr) = TRIM(active_contracts.contract_nbr);
    Taking around 6 minute to run and it returns """"268267"""" records
    Explain Plan for the above SQL:
    ===============================
    "PLAN_TABLE_OUTPUT"
    "Plan hash value: 379550299"
    "| Id  | Operation                      | Name          | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     |"
    "|   0 | SELECT STATEMENT               |               |  2609K|   659M|       | 91679   (3)| 00:18:21 |"
    "|   1 |  HASH UNIQUE                   |               |     1 |    16 |       | 54461   (2)| 00:10:54 |"
    "|*  2 |   COUNT STOPKEY                |               |       |       |       |            |          |"
    "|*  3 |    TABLE ACCESS FULL           | MEMBER_SPAN   | 12891 |   201K|       | 54459   (2)| 00:10:54 |"
    "|   4 |    HASH UNIQUE                 |               |     1 |    16 |  2424K| 54736   (2)| 00:10:57 |"
    "|*  5 |     COUNT STOPKEY              |               |       |       |       |            |          |"
    "|*  6 |      TABLE ACCESS FULL         | MEMBER_SPAN   | 51541 |   805K|       | 54459   (2)| 00:10:54 |"
    "|   7 |  HASH UNIQUE                   |               |     1 |    50 |       |    64   (4)| 00:00:01 |"
    "|*  8 |   COUNT STOPKEY                |               |       |       |       |            |          |"
    "|*  9 |    TABLE ACCESS FULL           | AV_MEM_EMAIL  |     1 |    50 |       |    63   (2)| 00:00:01 |"
    "|* 10 |  TABLE ACCESS FULL             | DIVISION      |     1 |    14 |       |     3   (0)| 00:00:01 |"
    "|* 11 |  HASH JOIN                     |               |  2609K|   659M|       | 91679   (3)| 00:18:21 |"
    "|  12 |   VIEW                         |               |   581 | 12782 |       |  8184   (4)| 00:01:39 |"
    "|  13 |    HASH UNIQUE                 |               |   581 | 26145 |       |  8184   (4)| 00:01:39 |"
    "|  14 |     TABLE ACCESS BY INDEX ROWID| CONTRACT      |     1 |    14 |       |     2   (0)| 00:00:01 |"
    "|  15 |      NESTED LOOPS              |               |   581 | 26145 |       |  8183   (4)| 00:01:39 |"
    "|* 16 |       TABLE ACCESS FULL        | CONTRACT_SPAN |   581 | 18011 |       |  7019   (5)| 00:01:25 |"
    "|* 17 |       INDEX RANGE SCAN         | CONTRACT_IX1  |     1 |       |       |     1   (0)| 00:00:01 |"
    "|* 18 |   HASH JOIN                    |               |   449K|   104M|    39M| 83466   (2)| 00:16:42 |"
    "|* 19 |    TABLE ACCESS FULL           | MEMBER_SPAN   |   449K|    34M|       | 54964   (3)| 00:11:00 |"
    "|  20 |    TABLE ACCESS FULL           | MEMBER        |  1436K|   221M|       | 14664   (2)| 00:02:56 |"
    "Predicate Information (identified by operation id):"
    "   2 - filter(ROWNUM=1)"
    "   3 - filter(SUBSTR("MSSP"."MEMBER_NBR",1,9)=SUBSTR(:B1,1,9) AND "MSSP"."CLASS_X"='SP')"
    "   5 - filter(ROWNUM=1)"
    "   6 - filter(SUBSTR("MSSP"."MEMBER_NBR",1,9)=SUBSTR(:B1,1,9) AND "MSSP"."CLASS_X"='SE')"
    "   8 - filter(ROWNUM=1)"
    "   9 - filter("AV_MEM_EMAIL"."MEMBER_NBR"=:B1)"
    "  10 - filter(TRIM("DIV"."DIVISION_NBR")=TRIM(:B1))"
    "  11 - access(TRIM("MB_ACTIVE"."CONTRACT_NBR")=TRIM("ACTIVE_CONTRACTS"."CONTRACT_NBR"))"
    "  16 - filter("CONTRACT_SPAN"."YMDEFF"<=20090707 AND TRIM("CONTRACT_SPAN"."VOID") IS NULL AND "
    "              "CONTRACT_SPAN"."YMDEND">=20090707)"
    "  17 - access("CONTRACT"."CONTRACT_NBR"="CONTRACT_SPAN"."CONTRACT_NBR")"
    "  18 - access("MB_ACTIVE"."MEMBER_NBR"="MS_ACTIVE"."MEMBER_NBR")"
    "  19 - filter(TRIM("MS_ACTIVE"."VOID") IS NULL AND "MS_ACTIVE"."YMDEFF"<=20090707 AND "
    "              "MS_ACTIVE"."YMDEND">=20090707)"
    SAME SQL IN A PROCEDURE..IT IS HANGING UP
    ========================================
    create or replace PROCEDURE TEST_CURRENT_PCP_SPAN is
    EXTRACTED_STRING VARCHAR2(32767);
    FILEHANDLER UTL_FILE.FILE_TYPE;
    test_str varchar2(100);
    pcp_eff_date number(10);
    file_name varchar2(50);
       CURSOR MEMBERS
       IS
    SELECT active_members.member_nbr,
      active_members.name_last,
      active_members.name_first,
      active_members.name_middle,
      active_members.dob,
      active_members.sex,
      active_members.subsciber_nbr,
      active_members.ssn,
      active_members.name_suffix,
      active_members.class_x,
      active_members.aff_nbr,
    CASE
    WHEN TRIM(active_members.class_x) = 'SE' THEN
        (SELECT DISTINCT(mssp.member_nbr)
         FROM member_span mssp
         WHERE SUBSTR(mssp.member_nbr,    1,    9) = SUBSTR(active_members.member_nbr,    1,    9)
         AND mssp.class_x = 'SP'
         AND rownum = 1)
       WHEN TRIM(active_members.class_x) = 'SP' THEN
          (SELECT DISTINCT(mssp.member_nbr)
           FROM member_span mssp
           WHERE SUBSTR(mssp.member_nbr,    1,    9) = SUBSTR(active_members.member_nbr,    1,    9)
           AND mssp.class_x = 'SE'
           AND rownum = 1)
      ELSE
        NULL
       END)
    spouse_member_nbr,
      active_members.division_nbr,
      active_members.ymdeff,
      active_members.ymdend,
      active_members.actual_ymd_enddt,
      active_members.email_id,
      active_members.network_id,
      active_members.insurance_company_code,
      active_members.cob_flag,
      active_members.vip_flag,
      active_members.pre_x_flag,
      active_members.region,
      active_contracts.language_x,
      active_contracts.corp_nbr,
      active_members.group_nbr,
      active_members.non_erisa_status
    FROM
      (SELECT mb_active.member_nbr,
         mb_active.contract_nbr,
         mb_active.name_last,
         mb_active.name_first,
         mb_active.name_middle,
         ms_active.ymdeff,
         ms_active.ymdend,
         to_char(to_date(
       CASE
       WHEN LENGTH(mb_active.ymdbirth) = 8 THEN mb_active.ymdbirth
       ELSE NULL
       END,    'YYYYMMDD'),    'MM/DD/YYYY') dob,
         mb_active.sex,
         to_char(to_date(ms_active.ymdeff,    'YYYYMMDD'),    'MM/DD/YYYY') ymdeff_formatted,
         to_char(to_date(ms_active.ymdend,    'YYYYMMDD'),    'MM/DD/YYYY') ymdend_formatted,
         ms_active.void,
       CASE
       WHEN SUBSTR(mb_active.member_nbr,    10,    2) = '00' THEN mb_active.member_nbr
       ELSE SUBSTR(mb_active.member_nbr,    1,    9) || '00'
       END) subsciber_nbr,
         mb_active.ssn,
         mb_active.name_suffix,
         ms_active.class_x,
         ms_active.aff_nbr,
         ms_active.division_nbr,
       CASE
       WHEN TRIM(ms_active.ymdend) = '99991231' THEN NULL
       ELSE to_char(to_date(ms_active.ymdend,    'YYYYMMDD'),    'MM/DD/YYYY')
       END) actual_ymd_enddt,
       CASE
       WHEN TRIM(ms_active.business_unit) = '01' THEN ms_active.business_unit || '-' || ms_active.prog_nbr
       WHEN TRIM(ms_active.business_unit) = '03' THEN ms_active.business_unit || '-' || ms_active.prog_nbr || '-' || ms_active.carrier
       ELSE NULL
       END) network_id,
         ms_active.business_unit || '-' || ms_active.prog_nbr || '-' || ms_active.carrier insurance_company_code,
          (SELECT DISTINCT(email)
         FROM dbo.av_mem_email
         WHERE dbo.av_mem_email.member_nbr = mb_active.member_nbr
         AND rownum = 1)
      email_id,
         mb_active.lr_response cob_flag,
         mb_active.record_nbr vip_flag,
         ms_active.pre_exist pre_x_flag,
         ms_active.region region,
         ms_active.group_nbr,
       CASE
       WHEN
        (SELECT TRIM(div.div_status)
         FROM division div
         WHERE TRIM(div.division_nbr) = TRIM(ms_active.division_nbr)) = 'NULL' THEN
          'Y'
         ELSE
          'N'
         END)
      non_erisa_status
       FROM member mb_active,
         member_span ms_active
       WHERE mb_active.member_nbr = ms_active.member_nbr
       AND(20090707 BETWEEN ms_active.ymdeff
       AND ms_active.ymdend
       AND TRIM(ms_active.void) IS NULL
    active_members,
        (SELECT DISTINCT(contract.contract_nbr),
         contract.language_x,
         contract_span.corp_nbr
       FROM contract,
         contract_span
       WHERE contract.contract_nbr = contract_span.contract_nbr
       AND(20090707 BETWEEN contract_span.ymdeff
       AND contract_span.ymdend)
       AND TRIM(contract_span.void) IS
      NULL)
    active_contracts
    WHERE TRIM(active_members.contract_nbr) = TRIM(active_contracts.contract_nbr);
      TYPE MEM IS TABLE OF MEMBERS%ROWTYPE INDEX BY PLS_INTEGER;
      TABLE_MEM MEM;
    MEMBER_ADDR   MGONZALEZ.CPKG_UTIL.ADDR;
    BEGIN 
       test_str := '''A10000213'''||','||'''A10000213''';
       insert into test_number_char(str) values ('start time of MEMBER_LOAD_CURRENT_PCP_SPAN '||to_char(sysdate,'MM/DD/YYYY HH24:MI:SS'));
       commit;
       file_name := 'member_load'||to_char(sysdate,'YYYYMMDDHH24MI')||'.txt';
       FILEHANDLER := UTL_FILE.FOPEN('AVMED_UTL_FILE',file_name, 'W',10000);
       insert into test_number_char(str) values ('start time of opening members cursor(before open members command) '||to_char(sysdate,'MM/DD/YYYY HH24:MI:SS'));
       commit;
       OPEN MEMBERS;
    LOOP
          FETCH MEMBERS
             BULK COLLECT INTO TABLE_MEM LIMIT 1000 ;
           EXIT WHEN TABLE_MEM.COUNT = 0;
    insert into test_number_char(str) values ('start time of outer loop '||to_char(sysdate,'MM/DD/YYYY HH24:MI:SS'));
    commit;
          FOR i IN 1 .. TABLE_MEM.COUNT
          LOOP
          EXTRACTED_STRING := TRIM(TABLE_MEM(i).MEMBER_NBR)||'| '||     
                              TRIM(TABLE_MEM(i).NAME_LAST)||'| '||      
                            TRIM(TABLE_MEM(i).NAME_FIRST)||'| '||      
                             TRIM(TABLE_MEM(i).NAME_MIDDLE)||'| '||   
                             TRIM(TABLE_MEM(i).ssn)||'| '||            
                             TABLE_MEM(i).subsciber_nbr||'| '||        
                             TRIM(TABLE_MEM(i).class_x)||'| '||         
                             TRIM(TABLE_MEM(i).DOB)||'| '||             
                             TRIM(TABLE_MEM(i).SEX)||'| ' ;             
              EXTRACTED_STRING   :=
                    EXTRACTED_STRING ||
                  TRIM(TABLE_MEM(i).aff_nbr)||'| '||                         
                                pcp_eff_date||'| '||                 
              TABLE_MEM(i).actual_ymd_enddt||'| '||                        
                  TRIM(TABLE_MEM(i).division_nbr)||'| '||                    
                  ' '||'| '||                                               
                  ' '||'| '||                                                  
                  ' '||'| '||                                                 
                  TABLE_MEM(i).network_id||'| '||                              
                  ' '||'| '||                                                  
                  ' '||'| '||                                                  
                  ' '||'| '||                                                  
                  ' '||'| '||                                                 
                  ' '||'| '||                                                  
                 TRIM(TABLE_MEM(i).name_suffix)||'| '||                       
                 ' '||'| '||                                                   
                 TRIM(TABLE_MEM(i).spouse_member_nbr)||'| '||                  
                 ' '||'| '||                                                   
                 ' '||'| '||                                                   
                 ' '||'| '||                                                  
                 ' '||'| '||                                                   
                 ' '||'| '||                                                  
                 ' '||'| '||                                                   
                 ' '||'| '||                                                   
                 ' '||'| '||                                                   
                 ' '||'| '||                                                   
                 ' '||'| '||                                                   
                 ' '||'| '||                                                   
                 ' '||'| '||                                                  
                 ' '||'| '||                                                   
                TRIM(TABLE_MEM(i).email_id)||'| '||                                
                TABLE_MEM(i).Insurance_company_code||'| '||                    
                TABLE_MEM(i).group_nbr||'| '||                                 
                TABLE_MEM(i).language_x||'| '||                               
                TABLE_MEM(i).region||'| '||                                    
                TABLE_MEM(i).corp_nbr||'| '||                                  
                TABLE_MEM(i).non_erisa_status||'| '||                          
                TABLE_MEM(i).cob_flag||'| '||                                  
                TABLE_MEM(i).pre_x_flag||'| '||                                
                TABLE_MEM(i).vip_flag                                       
                 EXTRACTED_STRING   := rtrim(EXTRACTED_STRING,' ');
            UTL_FILE.PUT_LINE(FILEHANDLER,EXTRACTED_STRING,TRUE);
            EXTRACTED_STRING := NULL;
            pcp_eff_date := NULL;
          END LOOP;
          insert into test_number_char(str) values ('end time of outer loop '||to_char(sysdate,'MM/DD/YYYY HH24:MI:SS'));
    commit;
    END LOOP;
    close members;
    insert into test_number_char(str) values ('end time of opening members cursor '||to_char(sysdate,'MM/DD/YYYY HH24:MI:SS'));
    commit;
    commit;
       UTL_FILE.FCLOSE(FILEHANDLER);
       insert into test_number_char(str) values ('End time of MEMBER_LOAD_CURRENT_PCP_SPAN '||to_char(sysdate,'MM/DD/YYYY HH24:MI:SS'));
       commit;
       EXCEPTION
          WHEN OTHERS
          THEN
             DBMS_OUTPUT.put_line(   'ERROR getting members '
                                  || SQLCODE
                                  || ' '
                                  || SQLERRM);
    END ;
    In my Test table which i am inserting to check the times...
    I am geting on these 2 records after that it hangs up...
    start time of MEMBER_LOAD_CURRENT_PCP_SPAN 07/08/2009 11:41:21
    start time of opening members cursor(before open members command) 07/08/2009 11:41:21I have to call some other functions for each member to get additional details thats the reason i am going for Procedure.Instead it is just a simple SQL
    Thanks in advance

    It is taking lot of timeYou could perhaps split it up in smaller, isolated parts.
    Running certain steps separate.
    ..is it possible to find out the issues without running the proc?Other than have other people on OTN give their ideas/share experiences?
    Not that I'm aware of.
    There are lots of statistical views, you might be able to deduct from their data, but I personally prefer running the procedure and just trace it. But I'm always willing to learn new approaches, btw.
    Still, you have 2 things to look at, at least:
    - avoid loops in loops if possible
    - check your predicates, if you apply a function, you lose the index, unless you create a function based index.
    edit
    One more thing (how could I overlook that):
    You commit your instrumentation code ( insert into test_number_char(str) ) IN the loop.
    Please remove commit in your loops...
    Commit only once, at the end of your transaction.
    Never commit in a loop.
    (Preferrably the client commits)
    And remove every commit in your loop...
    Edited by: hoek on Jul 8, 2009 8:03 PM

  • Urgent Help required in Tunning this query

    I have table ACCOUNT SPONSOR HOMESTORE ASH with more than 30 million rows.
    My batch daily need to update or insert into this table from a temporary table TEMP_HSTRALCT. The data for temporary table is populated by below query which selects from two tables TRANSACTION POINTS and REDEMPTIONS.However both these tables are partitioned on date time and is run daily and this is running for hours.
    Can anyone please help me on tuning this query
    INSERT INTO temp_hstralct
    (tmp_n_collector_account_num, tmp_v_location_id,
    tmp_v_sponsor_id, tmp_v_source_file_name,
    tmp_n_psc_insert_ind, tmp_n_psc_update_ind,
    tmp_n_transaction_amount, tmp_n_transaction_points,
    tmp_n_acc_insert_ind, tmp_n_ash_insert_ind,
    tmp_n_col_insert_ind, tmp_n_check_digit,
    tmp_n_collector_issue_num, tmp_n_csl_insert_ind,
    tmp_v_offer_code, tmp_n_psa_insert_ind)
    SELECT DISTINCT trp_n_collector_account_num account_num,
    trp_v_location_id location_id,
    trp_v_sponsor_id sponsor_id,
    trp_c_creation_user batch_id, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0
    FROM transaction_points, ACCOUNT, locations_master,homestores
    WHERE hsr_v_accrual_allowed = 'Y'
    AND trp_n_collector_account_num = ACCOUNT.acc_n_account_num(+)
    AND ( ( ( ACCOUNT.acc_v_account_type = 'C'
    OR ACCOUNT.acc_v_account_type IS NULL
    AND hsr_v_b2c_accounts = 'Y'
    OR ( ACCOUNT.acc_v_account_type = 'B'
    AND hsr_v_nfb_accounts = 'Y'
    OR ( ACCOUNT.acc_v_account_type = 'H'
    AND hsr_v_hybrid_accounts = 'Y'
    AND trp_d_creation_date_time BETWEEN SYSDATE-3
    AND SYSDATE
    AND trp_v_sponsor_id = 'JSAINSBURY'
    AND trp_v_location_id =
    locations_master.lnm_v_location_id
    AND locations_master.lnm_v_partner_id = 'JSAINSBURY'
    AND ( ( ( (INSTR
    (hsr_v_store_status,
    locations_master.lnm_c_location_status
    ) > 0
    AND (INSTR
    (hsr_v_store_type,
    locations_master.lnm_c_location_type
    ) > 0
    AND hsr_v_homestore_assignment = 'ST'
    OR ( ( locations_master.lnm_c_homestore_ind =
    'Y'
    AND (INSTR
    (hsr_v_store_status,
    locations_master.lnm_c_location_status
    ) > 0
    AND hsr_v_homestore_assignment = 'HS'
    UNION ALL
    SELECT DISTINCT rdm_n_collector_account_num account_num,
    rdm_v_location_id location_id,
    rom_v_supplier_id sponsor_id,
    rdm_c_creation_user batch_id, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0
    FROM redemption_details,
    reward_offer_master,
    ACCOUNT,
    locations_master,
    HOMESTORES
    WHERE hsr_v_redemption_allowed = 'Y'
    AND rdm_n_collector_account_num = ACCOUNT.acc_n_account_num(+)
    AND ( ( ( ACCOUNT.acc_v_account_type = 'C'
    OR ACCOUNT.acc_v_account_type IS NULL
    AND hsr_v_b2c_accounts = 'Y'
    OR ( ACCOUNT.acc_v_account_type = 'B'
    AND hsr_v_nfb_accounts = 'Y'
    OR ( ACCOUNT.acc_v_account_type = 'H'
    AND hsr_v_hybrid_accounts = 'Y'
    AND rdm_d_creation_date_time BETWEEN SYSDATE-3
    AND SYSDATE
    AND rom_v_reward_offer_id = rdm_v_reward_id
    AND rom_v_supplier_id = 'JSAINSBURY'
    AND rdm_v_location_id =
    locations_master.lnm_v_location_id
    AND locations_master.lnm_v_partner_id ='JSAINSBURY'
    AND ( ( ( (INSTR
    (hsr_v_store_status,
    locations_master.lnm_c_location_status
    ) > 0
    AND (INSTR
    (hsr_v_store_type,
    locations_master.lnm_c_location_type
    ) > 0
    AND hsr_v_homestore_assignment = 'ST'
    OR ( ( locations_master.lnm_c_homestore_ind =
    'Y'
    AND (INSTR
    (hsr_v_store_status,
    locations_master.lnm_c_location_status
    ) > 0
    AND hsr_v_homestore_assignment = 'HS'
    );

    I have copied the explain as it is and can you please try pasting in the text pad.Can you let me know whether parallel hint on this will speed up the select queries.
              Plan
              INSERT STATEMENT CHOOSECost: 410,815 Bytes: 2,798,394 Cardinality: 15,395                                                        
                   32 UNION-ALL                                                   
                        15 SORT UNIQUE Cost: 177,626 Bytes: 2,105,592 Cardinality: 11,896                                              
                             14 FILTER                                         
                                  13 HASH JOIN Cost: 177,312 Bytes: 2,105,592 Cardinality: 11,896                                    
                                       2 TABLE ACCESS BY INDEX ROWID LMHOLTP.LOCATIONS_MASTER Cost: 37 Bytes: 23,184 Cardinality: 966                               
                                            1 INDEX RANGE SCAN NON-UNIQUE LMHOLTP.IX_LOCATIONS_MASTER_3 Cost: 3 Cardinality: 1                          
                                       12 FILTER                               
                                            11 HASH JOIN OUTER                          
                                                 8 MERGE JOIN CARTESIAN Cost: 155,948 Bytes: 702,656,660 Cardinality: 4,845,908                     
                                                      3 TABLE ACCESS FULL LMHOLTP.HOMESTORES Cost: 2 Bytes: 104 Cardinality: 1                
                                                      7 BUFFER SORT Cost: 155,946 Bytes: 198,682,228 Cardinality: 4,845,908                
                                                           6 PARTITION RANGE ITERATOR Partition #: 12           
                                                                5 TABLE ACCESS BY LOCAL INDEX ROWID LMHOLTP.TRANSACTION_POINTS Cost: 155,946 Bytes: 198,682,228 Cardinality: 4,845,908 Partition #: 12      
                                                                     4 INDEX RANGE SCAN NON-UNIQUE LMHOLTP.IX_TRANSACTION_POINTS_1 Cost: 24,880 Cardinality: 6,978,108 Partition #: 12
                                                 10 PARTITION RANGE ALL Partition #: 15 Partitions accessed #1 - #5                    
                                                      9 TABLE ACCESS FULL LMHOLTP.ACCOUNT Cost: 6,928 Bytes: 68,495,680 Cardinality: 8,561,960 Partition #: 15 Partitions accessed #1 - #5               
                        31 SORT UNIQUE Cost: 233,189 Bytes: 692,802 Cardinality: 3,499                                              
                             30 FILTER                                         
                                  29 FILTER                                    
                                       28 NESTED LOOPS OUTER                               
                                            24 HASH JOIN Cost: 226,088 Bytes: 664,810 Cardinality: 3,499                          
                                                 16 TABLE ACCESS FULL LMHOLTP.REWARD_OFFER_MASTER Cost: 8 Bytes: 2,280 Cardinality: 114                     
                                                 23 HASH JOIN Cost: 226,079 Bytes: 8,327,280 Cardinality: 48,984                     
                                                      20 TABLE ACCESS BY INDEX ROWID LMHOLTP.LOCATIONS_MASTER Cost: 37 Bytes: 432 Cardinality: 18                
                                                           19 NESTED LOOPS Cost: 39 Bytes: 2,304 Cardinality: 18           
                                                                17 TABLE ACCESS FULL LMHOLTP.HOMESTORES Cost: 2 Bytes: 104 Cardinality: 1      
                                                                18 INDEX RANGE SCAN NON-UNIQUE LMHOLTP.IX_LOCATIONS_MASTER_3 Cost: 3 Cardinality: 966      
                                                      22 PARTITION RANGE ITERATOR Partition #: 28                
                                                           21 TABLE ACCESS FULL LMHOLTP.REDEMPTION_DETAILS Cost: 226,019 Bytes: 261,636,270 Cardinality: 6,229,435 Partition #: 28           
                                            27 PARTITION RANGE ITERATOR Partition #: 30                          
                                                 26 TABLE ACCESS BY LOCAL INDEX ROWID LMHOLTP.ACCOUNT Cost: 2 Bytes: 8 Cardinality: 1 Partition #: 30                     
                                                      25 INDEX UNIQUE SCAN UNIQUE LMHOLTP.CO_PK_ACCOUNT Cost: 1 Cardinality: 1 Partition #: 30

  • PLease help me in wrirting this query

    Hi all,
    i want to write a query using standard emp table.But output required is like
    deptno ename
    10 smith
    alen
    mark
    20 ram
    hanuman
    Thus if deptno is same for some employees it should be printed once only
    Any help is highly appreciated

    SQL> select decode(row_number() over(partition by deptno order by ename),1, deptno, '') deptno,
      2         ename
      3    from emp
      4  /
        DEPTNO ENAME
            10 CLARK
               KING
               MILLER
            20 ADAMS
               FORD
               JONES
               SCOTT
               SMITH
            30 ALLEN
               BLAKE
               JAMES
               MARTIN
               TURNER
               WARD
    14 rows selected.or just in SQLPLUS for display purpose
    SQL> break on deptno
    SQL> select deptno, ename from emp order by deptno, ename
      2  /
        DEPTNO ENAME
            10 CLARK
               KING
               MILLER
            20 ADAMS
               FORD
               JONES
               SCOTT
               SMITH
            30 ALLEN
               BLAKE
               JAMES
               MARTIN
               TURNER
               WARD
    14 rows selected.Edited by: Karthick_Arp on Jun 1, 2009 11:33 PM

  • Please provide advices on tunning this query

    I have the 10gR2. the SGA and PGA info as:
    sql> @showpga
    NAME VALUE
    session uga memory 921,776
    session uga memory max 1,518,856
    session pga memory 1,569,048
    session pga memory max 1,896,728
    sum 5,906,408
    sql>
    sql> @vsga
    NAME VALUE
    Database Buffers 2,248,146,944
    Fixed Size 2,242,736
    Redo Buffers 10,813,440
    Variable Size 2,033,764,176
    sum 4,294,967,296
    The tables' info in the query:
    Tables info
    num_rows table_name last_analyzed
    54470 PA_PROJECTS_ALL 08-FEB-09
    2104470 PA_TASKS 08-FEB-09
    5420270 PA_RESOURCE_ASSIGNMENTS 08-FEB-09
    119610 PA_BUDGET_VERSIONS 08-FEB-09
    The query to be shown run more than 2 hours for returning 1263880 records.
    I ran it as:
    01:25:10 sql>> set autotrace trace
    01:25:22 sql>> SELECT
    01:25:32 2 'PRJ_'||UPPER(P.SEGMENT1),
    01:25:32 3 'PRJ_'||UPPER(P.SEGMENT1)||'_TSK_'||UPPER(T.TASK_NUMBER),
    01:25:32 4 UPPER('ACTIVITY '||P.SEGMENT1||', '||T.TASK_NUMBER||' - '||T.DESCRIPTION),
    01:25:32 5 UPPER(P.SEGMENT1||', '||T.TASK_NUMBER||' - '||T.DESCRIPTION),
    01:25:32 6 UPPER(P.SEGMENT1||', '||T.TASK_NUMBER)
    01:25:32 7 FROM PA_PROJECTS_ALL P
    01:25:32 8 , PA_TASKS T
    01:25:32 9 , PA_RESOURCE_ASSIGNMENTS A
    01:25:32 10 , PA_BUDGET_VERSIONS B
    01:25:32 11 WHERE P.PROJECT_ID = T.PROJECT_ID
    01:25:32 12 AND T.TASK_ID <> T.PARENT_TASK_ID
    01:25:32 13 AND T.PARENT_TASK_ID IS NOT NULL
    01:25:32 14 AND P.PROJECT_ID = B.PROJECT_ID
    01:25:32 15 AND P.PROJECT_ID = A.PROJECT_ID
    01:25:32 16 AND T.TASK_ID = A.TASK_ID
    01:25:32 17 AND B.BUDGET_VERSION_ID = A.BUDGET_VERSION_ID
    01:25:32 18 AND B.BUDGET_STATUS_CODE = 'B'
    01:25:32 19 AND B.BUDGET_TYPE_CODE = 'Current'
    01:25:32 20 AND B.CURRENT_FLAG = 'Y'
    01:25:32 21 /
    1263880 rows selected.
    Execution Plan
    | Id | Operation | Name | Rows | Bytes | Cost |
    | 0 | SELECT STATEMENT | | 1 | 106 | 25304 |
    | 1 | NESTED LOOPS | | 1 | 106 | 25304 |
    | 2 | HASH JOIN | | 12 | 636 | 25280 |
    | 3 | HASH JOIN | | 9968 | 350K| 3579 |
    | 4 | TABLE ACCESS FULL | PA_BUDGET_VERSIONS | 9968 | 223K| 3109 |
    | 5 | VIEW | index$_join$_001 | 54470 | 691K| 469 |
    | 6 | HASH JOIN | | | | |
    | 7 | INDEX FAST FULL SCAN | PA_PROJECTS_U1 | 54470 | 691K| 145 |
    | 8 | INDEX FAST FULL SCAN | PA_PROJECTS_U2 | 54470 | 691K| 321 |
    | 9 | INDEX FAST FULL SCAN | PA_RESOURCE_ASSIGNMENTS_U2 | 5420K| 87M| 21615 |
    | 10 | TABLE ACCESS BY INDEX ROWID| PA_TASKS | 1 | 53 | 2 |
    | 11 | INDEX UNIQUE SCAN | PA_TASKS_U1 | 1 | | 1 |
    Statistics
    1 recursive calls
    0 db block gets
    4668610 consistent gets
    460575 physical reads
    10220 redo size
    77725800 bytes sent via SQL*Net to client
    884947 bytes received via SQL*Net from client
    126389 SQL*Net roundtrips to/from client
    0 sorts (memory)
    0 sorts (disk)
    1263880 rows processed
    04:02:44 sql>>
    It had run about 2.5 hrs.
    Then I tried to force the hash-join since we have hugh SGA and PGA.
    sql>> set time on
    02:31:59 sql>> set autotrace trace
    02:32:28 sql>>
    02:32:28 sql>> SELECT /*+ use_hash(p t) */
    02:32:41 2 'PRJ_'||UPPER(P.SEGMENT1),
    02:32:41 3 'PRJ_'||UPPER(P.SEGMENT1)||'_TSK_'||UPPER(T.TASK_NUMBER),
    02:32:41 4 UPPER('ACTIVITY '||P.SEGMENT1||', '||T.TASK_NUMBER||' - '||T.DESCRIPTION),
    02:32:41 5 UPPER(P.SEGMENT1||', '||T.TASK_NUMBER||' - '||T.DESCRIPTION),
    02:32:42 6 UPPER(P.SEGMENT1||', '||T.TASK_NUMBER)
    02:32:42 7 FROM PA_PROJECTS_ALL P
    02:32:42 8 , PA_TASKS T
    02:32:42 9 , PA_RESOURCE_ASSIGNMENTS A
    02:32:42 10 , PA_BUDGET_VERSIONS B
    02:32:42 11 WHERE P.PROJECT_ID = T.PROJECT_ID
    02:32:42 12 AND T.TASK_ID <> T.PARENT_TASK_ID
    02:32:42 13 AND T.PARENT_TASK_ID IS NOT NULL
    02:32:42 14 AND P.PROJECT_ID = B.PROJECT_ID
    02:32:42 15 AND P.PROJECT_ID = A.PROJECT_ID
    02:32:42 16 AND T.TASK_ID = A.TASK_ID
    02:32:42 17 AND B.BUDGET_VERSION_ID = A.BUDGET_VERSION_ID
    02:32:42 18 AND B.BUDGET_STATUS_CODE = 'B'
    02:32:42 19 AND B.BUDGET_TYPE_CODE = 'Current'
    02:32:42 20 AND B.CURRENT_FLAG = 'Y'
    02:32:42 21 /
    1263880 rows selected.
    Execution Plan
    | Id | Operation | Name | Rows | Bytes | Cost |
    | 0 | SELECT STATEMENT | | 1 | 106 | 42350 |
    | 1 | HASH JOIN | | 1 | 106 | 42350 |
    | 2 | HASH JOIN | | 8 | 424 | 25280 |
    | 3 | HASH JOIN | | 9968 | 350K| 3579 |
    | 4 | TABLE ACCESS FULL | PA_BUDGET_VERSIONS | 9968 | 223K| 3109 |
    | 5 | VIEW | index$_join$_001 | 54470 | 691K| 469 |
    | 6 | HASH JOIN | | | | |
    | 7 | INDEX FAST FULL SCAN| PA_PROJECTS_U1 | 54470 | 691K| 145 |
    | 8 | INDEX FAST FULL SCAN| PA_PROJECTS_U2 | 54470 | 691K| 321 |
    | 9 | INDEX FAST FULL SCAN | PA_RESOURCE_ASSIGNMENTS_U2 | 5420K| 87M| 21615 |
    | 10 | TABLE ACCESS FULL | PA_TASKS | 1837K| 92M| 17041 |
    Statistics
    1 recursive calls
    0 db block gets
    535322 consistent gets
    355917 physical reads
    772 redo size
    79117543 bytes sent via SQL*Net to client
    884948 bytes received via SQL*Net from client
    126389 SQL*Net roundtrips to/from client
    0 sorts (memory)
    0 sorts (disk)
    1263880 rows processed
    04:48:07 sql>>
    it still had run 2 hrs.
    Based on the info presented to you, I would like to know your adivces on how to make the
    improvement.
    TIA

    I have the 10gR2.
    SQL> select * from v$version;
    BANNER
    Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi
    PL/SQL Release 10.2.0.4.0 - Production
    CORE 10.2.0.4.0 Production
    TNS for Solaris: Version 10.2.0.4.0 - Production
    NLSRTL Version 10.2.0.4.0 - Production
    SQL>
    the SGA and PGA info as:
    sql> @showpga
    NAME VALUE
    session uga memory 921,776
    session uga memory max 1,518,856
    session pga memory 1,569,048
    session pga memory max 1,896,728
    sum 5,906,408
    sql>
    sql> @vsga
    NAME VALUE
    Database Buffers 2,248,146,944
    Fixed Size 2,242,736
    Redo Buffers 10,813,440
    Variable Size 2,033,764,176
    sum 4,294,967,296
    The tables' info in the query:
    Tables info
    num_rows table_name last_analyzed
    54470 PA_PROJECTS_ALL 08-FEB-09
    2104470 PA_TASKS 08-FEB-09
    5420270 PA_RESOURCE_ASSIGNMENTS 08-FEB-09
    119610 PA_BUDGET_VERSIONS 08-FEB-09
    The query to be shown run more than 2 hours for returning 1263880 records.
    A) I ran it as:
    01:25:10 sql>> set autotrace trace
    01:25:22 sql>> SELECT
    01:25:32 2 'PRJ_'||UPPER(P.SEGMENT1),
    01:25:32 3 'PRJ_'||UPPER(P.SEGMENT1)||'_TSK_'||UPPER(T.TASK_NUMBER),
    01:25:32 4 UPPER('ACTIVITY '||P.SEGMENT1||', '||T.TASK_NUMBER||' - '||T.DESCRIPTION),
    01:25:32 5 UPPER(P.SEGMENT1||', '||T.TASK_NUMBER||' - '||T.DESCRIPTION),
    01:25:32 6 UPPER(P.SEGMENT1||', '||T.TASK_NUMBER)
    01:25:32 7 FROM PA_PROJECTS_ALL P
    01:25:32 8 , PA_TASKS T
    01:25:32 9 , PA_RESOURCE_ASSIGNMENTS A
    01:25:32 10 , PA_BUDGET_VERSIONS B
    01:25:32 11 WHERE P.PROJECT_ID = T.PROJECT_ID
    01:25:32 12 AND T.TASK_ID <> T.PARENT_TASK_ID
    01:25:32 13 AND T.PARENT_TASK_ID IS NOT NULL
    01:25:32 14 AND P.PROJECT_ID = B.PROJECT_ID
    01:25:32 15 AND P.PROJECT_ID = A.PROJECT_ID
    01:25:32 16 AND T.TASK_ID = A.TASK_ID
    01:25:32 17 AND B.BUDGET_VERSION_ID = A.BUDGET_VERSION_ID
    01:25:32 18 AND B.BUDGET_STATUS_CODE = 'B'
    01:25:32 19 AND B.BUDGET_TYPE_CODE = 'Current'
    01:25:32 20 AND B.CURRENT_FLAG = 'Y'
    01:25:32 21 /
    1263880 rows selected.
    set markup html preformat on
    Rem
    Rem Use the display table function from the dbms_xplan package to display the last
    Rem explain plan. Force serial option for backward compatibility
    Rem
    set linesize 152
    set pagesize 0
    select plan_table_output from table(dbms_xplan.display('plan_table',null,'serial'));
    Execution Plan
    | Id | Operation | Name | Rows | Bytes | Cost |
    | 0 | SELECT STATEMENT | | 1 | 106 | 25304 |
    | 1 | NESTED LOOPS | | 1 | 106 | 25304 |
    | 2 | HASH JOIN | | 12 | 636 | 25280 |
    | 3 | HASH JOIN | | 9968 | 350K| 3579 |
    | 4 | TABLE ACCESS FULL | PA_BUDGET_VERSIONS | 9968 | 223K| 3109 |
    | 5 | VIEW | index$_join$_001 | 54470 | 691K| 469 |
    | 6 | HASH JOIN | | | | |
    | 7 | INDEX FAST FULL SCAN | PA_PROJECTS_U1 | 54470 | 691K| 145 |
    | 8 | INDEX FAST FULL SCAN | PA_PROJECTS_U2 | 54470 | 691K| 321 |
    | 9 | INDEX FAST FULL SCAN | PA_RESOURCE_ASSIGNMENTS_U2 | 5420K| 87M| 21615 |
    | 10 | TABLE ACCESS BY INDEX ROWID| PA_TASKS | 1 | 53 | 2 |
    | 11 | INDEX UNIQUE SCAN | PA_TASKS_U1 | 1 | | 1 |
    Statistics
    1 recursive calls
    0 db block gets
    4668610 consistent gets
    460575 physical reads
    10220 redo size
    77725800 bytes sent via SQL*Net to client
    884947 bytes received via SQL*Net from client
    126389 SQL*Net roundtrips to/from client
    0 sorts (memory)
    0 sorts (disk)
    1263880 rows processed
    04:02:44 sql>>
    It had run about 2.5 hrs.
    B)
    Then I tried to force the hash-join since we have hugh SGA and PGA.
    sql>> set time on
    02:31:59 sql>> set autotrace trace
    02:32:28 sql>>
    02:32:28 sql>> SELECT /*+ use_hash(p t) */
    02:32:41 2 'PRJ_'||UPPER(P.SEGMENT1),
    02:32:41 3 'PRJ_'||UPPER(P.SEGMENT1)||'_TSK_'||UPPER(T.TASK_NUMBER),
    02:32:41 4 UPPER('ACTIVITY '||P.SEGMENT1||', '||T.TASK_NUMBER||' - '||T.DESCRIPTION),
    02:32:41 5 UPPER(P.SEGMENT1||', '||T.TASK_NUMBER||' - '||T.DESCRIPTION),
    02:32:42 6 UPPER(P.SEGMENT1||', '||T.TASK_NUMBER)
    02:32:42 7 FROM PA_PROJECTS_ALL P
    02:32:42 8 , PA_TASKS T
    02:32:42 9 , PA_RESOURCE_ASSIGNMENTS A
    02:32:42 10 , PA_BUDGET_VERSIONS B
    02:32:42 11 WHERE P.PROJECT_ID = T.PROJECT_ID
    02:32:42 12 AND T.TASK_ID <> T.PARENT_TASK_ID
    02:32:42 13 AND T.PARENT_TASK_ID IS NOT NULL
    02:32:42 14 AND P.PROJECT_ID = B.PROJECT_ID
    02:32:42 15 AND P.PROJECT_ID = A.PROJECT_ID
    02:32:42 16 AND T.TASK_ID = A.TASK_ID
    02:32:42 17 AND B.BUDGET_VERSION_ID = A.BUDGET_VERSION_ID
    02:32:42 18 AND B.BUDGET_STATUS_CODE = 'B'
    02:32:42 19 AND B.BUDGET_TYPE_CODE = 'Current'
    02:32:42 20 AND B.CURRENT_FLAG = 'Y'
    02:32:42 21 /
    1263880 rows selected.
    set markup html preformat on
    Rem
    Rem Use the display table function from the dbms_xplan package to display the last
    Rem explain plan. Force serial option for backward compatibility
    Rem
    set linesize 152
    set pagesize 0
    select plan_table_output from table(dbms_xplan.display('plan_table',null,'serial'));
    Execution Plan
    | Id | Operation | Name | Rows | Bytes | Cost |
    | 0 | SELECT STATEMENT | | 1 | 106 | 42350 |
    | 1 | HASH JOIN | | 1 | 106 | 42350 |
    | 2 | HASH JOIN | | 8 | 424 | 25280 |
    | 3 | HASH JOIN | | 9968 | 350K| 3579 |
    | 4 | TABLE ACCESS FULL | PA_BUDGET_VERSIONS | 9968 | 223K| 3109 |
    | 5 | VIEW | index$_join$_001 | 54470 | 691K| 469 |
    | 6 | HASH JOIN | | | | |
    | 7 | INDEX FAST FULL SCAN| PA_PROJECTS_U1 | 54470 | 691K| 145 |
    | 8 | INDEX FAST FULL SCAN| PA_PROJECTS_U2 | 54470 | 691K| 321 |
    | 9 | INDEX FAST FULL SCAN | PA_RESOURCE_ASSIGNMENTS_U2 | 5420K| 87M| 21615 |
    | 10 | TABLE ACCESS FULL | PA_TASKS | 1837K| 92M| 17041 |
    Statistics
    1 recursive calls
    0 db block gets
    535322 consistent gets
    355917 physical reads
    772 redo size
    79117543 bytes sent via SQL*Net to client
    884948 bytes received via SQL*Net from client
    126389 SQL*Net roundtrips to/from client
    0 sorts (memory)
    0 sorts (disk)
    1263880 rows processed
    04:48:07 sql>>
    it still had run 2 hrs.
    Based on the info presented to you, I would like to know your adivces on how to make the
    improvement.
    TIA

  • Can any one help me to tune this query

    This is the query.
    ~~~~~~~~~~
    SELECT
    S_CONTACT.ROW_ID,
    S_CONTACT.MODIFICATION_NUM,
    S_CONTACT.LAST_UPD
    FROM
    S_CONTACT,
    S_CONTACT_FNX,
    S_ETL_I_IMG_118 IMG
    WHERE
    IMG.ROW_ID = S_CONTACT_FNX.ROW_ID
    AND
    S_CONTACT_FNX.PAR_ROW_ID = S_CONTACT.ROW_ID
    AND NOT EXISTS
    ( SELECT 'X'
    FROM
    S_ETL_I_IMG_12 IMG1
    WHERE
    IMG1.ROW_ID = S_CONTACT.ROW_ID
    UNION ALL
    SELECT
    S_CONTACT.ROW_ID,
    S_CONTACT.MODIFICATION_NUM,
    S_CONTACT.LAST_UPD
    FROM
    S_CONTACT,
    S_ETL_I_IMG_109 IMG
    WHERE
    IMG.ROW_ID = S_CONTACT.PR_SPECIALTY_ID
    AND NOT EXISTS
    ( SELECT 'X'
    FROM
    S_ETL_I_IMG_12 IMG1
    WHERE
    IMG1.ROW_ID = S_CONTACT.ROW_ID
    UNION ALL
    SELECT
    S_CONTACT.ROW_ID,
    S_CONTACT.MODIFICATION_NUM,
    S_CONTACT.LAST_UPD
    FROM
    S_CONTACT,
    S_ETL_I_IMG_113 IMG
    WHERE
    IMG.ROW_ID = S_CONTACT.MED_SPEC_ID
    AND NOT EXISTS
    ( SELECT 'X'
    FROM
    S_ETL_I_IMG_12 IMG1
    WHERE
    IMG1.ROW_ID = S_CONTACT.ROW_ID
    UNION ALL
    SELECT
    S_CONTACT.ROW_ID,
    S_CONTACT.MODIFICATION_NUM,
    S_CONTACT.LAST_UPD
    FROM
    S_CONTACT,
    S_ETL_I_IMG_125 IMG
    WHERE
    IMG.ROW_ID = S_CONTACT.REGION_ID
    AND NOT EXISTS
    ( SELECT 'X'
    FROM
    S_ETL_I_IMG_12 IMG1
    WHERE
    IMG1.ROW_ID = S_CONTACT.ROW_ID
    Below is the explain plan
    ~~~~~~~~~~~~~~~~~~~~~
    PLAN_TABLE_OUTPUT
    Plan hash value: 363891185
    | Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time |
    | 0 | SELECT STATEMENT | | 4 | 334 | | 214K(100)| 00:42:50 |
    | 1 | UNION-ALL | | | | | | |
    |* 2 | HASH JOIN ANTI | | 1 | 64 | | 122 (1)| 00:00:02 |
    | 3 | NESTED LOOPS | | 3518 | 178K| | 119 (0)| 00:00:02 |
    | 4 | NESTED LOOPS | | 3518 | 98504 | | 13 (0)| 00:00:01 |
    | 5 | INDEX FULL SCAN | S_ETL_I_IMG_118_M2 | 3518 | 35180 | | 1 (0)| 00:00:01 |
    PLAN_TABLE_OUTPUT
    | 6 | TABLE ACCESS BY INDEX ROWID| S_CONTACT_FNX | 1 | 18 | | 1 (0)| 00:00:01 |
    |* 7 | INDEX UNIQUE SCAN | S_CONTACT_FNX_P1 | 1 | | | 1 (0)| 00:00:01 |
    | 8 | TABLE ACCESS BY INDEX ROWID | S_CONTACT | 1 | 24 | | 1 (0)| 00:00:01 |
    |* 9 | INDEX UNIQUE SCAN | S_CONTACT_P1 | 1 | | | 1 (0)| 00:00:01 |
    | 10 | INDEX FULL SCAN | S_ETL_I_IMG_12_M2 | 94772 | 1110K| | 2 (0)| 00:00:01 |
    | 11 | NESTED LOOPS | | 1 | 70 | | 214K (1)| 00:42:49 |
    | 12 | MERGE JOIN ANTI | | 1 | 38 | | 214K (1)| 00:42:49 |
    |* 13 | TABLE ACCESS BY INDEX ROWID | S_CONTACT | 72253 | 1834K| | 213K (1)| 00:42:43 |
    | 14 | INDEX FULL SCAN | S_CONTACT_P1 | 57M| | | 2904 (1)| 00:00:35 |
    |* 15 | SORT UNIQUE | | 94772 | 1110K| 3736K| 441 (2)| 00:00:06 |
    | 16 | INDEX FULL SCAN | S_ETL_I_IMG_12_M2 | 94772 | 1110K| | 2 (0)| 00:00:01 |
    PLAN_TABLE_OUTPUT
    |* 17 | INDEX RANGE SCAN | S_ETL_I_IMG_109_M2 | 1 | 32 | | 1 (0)| 00:00:01 |
    | 18 | NESTED LOOPS | | 1 | 100 | | 3 (0)| 00:00:01 |
    | 19 | NESTED LOOPS ANTI | | 1 | 68 | | 2 (0)| 00:00:01 |
    | 20 | TABLE ACCESS BY INDEX ROWID | S_CONTACT | 1 | 56 | | 1 (0)| 00:00:01 |
    |* 21 | INDEX FULL SCAN | S_CONTACT_F58 | 1 | | | 1 (0)| 00:00:01 |
    |* 22 | INDEX RANGE SCAN | S_ETL_I_IMG_12_M2 | 94772 | 1110K| | 1 (0)| 00:00:01 |
    |* 23 | INDEX RANGE SCAN | S_ETL_I_IMG_113_M2 | 1 | 32 | | 1 (0)| 00:00:01 |
    | 24 | NESTED LOOPS ANTI | | 1 | 100 | | 3 (0)| 00:00:01 |
    | 25 | NESTED LOOPS | | 1 | 88 | | 2 (0)| 00:00:01 |
    | 26 | TABLE ACCESS BY INDEX ROWID | S_CONTACT | 1 | 56 | | 1 (0)| 00:00:01 |
    |* 27 | INDEX FULL SCAN | S_CONTACT_F62 | 1 | | | 1 (0)| 00:00:01 |
    PLAN_TABLE_OUTPUT
    |* 28 | INDEX RANGE SCAN | S_ETL_I_IMG_125_M2 | 1 | 32 | | 1 (0)| 00:00:01 |
    |* 29 | INDEX RANGE SCAN | S_ETL_I_IMG_12_M2 | 94772 | 1110K| | 1 (0)| 00:00:01 |
    Predicate Information (identified by operation id):
    2 - access("IMG1"."ROW_ID"="S_CONTACT"."ROW_ID")
    7 - access("IMG"."ROW_ID"="S_CONTACT_FNX"."ROW_ID")
    9 - access("S_CONTACT_FNX"."PAR_ROW_ID"="S_CONTACT"."ROW_ID")
    13 - filter("S_CONTACT"."PR_SPECIALTY_ID" IS NOT NULL)
    PLAN_TABLE_OUTPUT
    15 - access("IMG1"."ROW_ID"="S_CONTACT"."ROW_ID")
    filter("IMG1"."ROW_ID"="S_CONTACT"."ROW_ID")
    17 - access("IMG"."ROW_ID"="S_CONTACT"."PR_SPECIALTY_ID")
    21 - filter("S_CONTACT"."MED_SPEC_ID" IS NOT NULL)
    22 - access("IMG1"."ROW_ID"="S_CONTACT"."ROW_ID")
    23 - access("IMG"."ROW_ID"="S_CONTACT"."MED_SPEC_ID")
    27 - filter("S_CONTACT"."REGION_ID" IS NOT NULL)
    28 - access("IMG"."ROW_ID"="S_CONTACT"."REGION_ID")
    29 - access("IMG1"."ROW_ID"="S_CONTACT"."ROW_ID")

    PLAN_TABLE_OUTPUT
    Plan hash value: 363891185
    | Id  | Operation                       | Name               | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     |
    |   0 | SELECT STATEMENT                |                    |     4 |   334 |       |   214K(100)| 00:42:50 |
    |   1 |  UNION-ALL                      |                    |       |       |       |            |          |
    |*  2 |   HASH JOIN ANTI                |                    |     1 |    64 |       |   122   (1)| 00:00:02 |
    |   3 |    NESTED LOOPS                 |                    |  3518 |   178K|       |   119   (0)| 00:00:02 |
    |   4 |     NESTED LOOPS                |                    |  3518 | 98504 |       |    13   (0)| 00:00:01 |
    |   5 |      INDEX FULL SCAN            | S_ETL_I_IMG_118_M2 |  3518 | 35180 |       |     1   (0)| 00:00:01 |
    PLAN_TABLE_OUTPUT
    |   6 |      TABLE ACCESS BY INDEX ROWID| S_CONTACT_FNX      |     1 |    18 |       |     1   (0)| 00:00:01 |
    |*  7 |       INDEX UNIQUE SCAN         | S_CONTACT_FNX_P1   |     1 |       |       |     1   (0)| 00:00:01 |
    |   8 |     TABLE ACCESS BY INDEX ROWID | S_CONTACT          |     1 |    24 |       |     1   (0)| 00:00:01 |
    |*  9 |      INDEX UNIQUE SCAN          | S_CONTACT_P1       |     1 |       |       |     1   (0)| 00:00:01 |
    |  10 |    INDEX FULL SCAN              | S_ETL_I_IMG_12_M2  | 94772 |  1110K|       |     2   (0)| 00:00:01 |
    |  11 |   NESTED LOOPS                  |                    |     1 |    70 |       |   214K  (1)| 00:42:49 |
    |  12 |    MERGE JOIN ANTI              |                    |     1 |    38 |       |   214K  (1)| 00:42:49 |
    |* 13 |     TABLE ACCESS BY INDEX ROWID | S_CONTACT          | 72253 |  1834K|       |   213K  (1)| 00:42:43 |
    |  14 |      INDEX FULL SCAN            | S_CONTACT_P1       |    57M|       |       |  2904   (1)| 00:00:35 |
    |* 15 |     SORT UNIQUE                 |                    | 94772 |  1110K|  3736K|   441   (2)| 00:00:06 |
    |  16 |      INDEX FULL SCAN            | S_ETL_I_IMG_12_M2  | 94772 |  1110K|       |     2   (0)| 00:00:01 |
    PLAN_TABLE_OUTPUT
    |* 17 |    INDEX RANGE SCAN             | S_ETL_I_IMG_109_M2 |     1 |    32 |       |     1   (0)| 00:00:01 |
    |  18 |   NESTED LOOPS                  |                    |     1 |   100 |       |     3   (0)| 00:00:01 |
    |  19 |    NESTED LOOPS ANTI            |                    |     1 |    68 |       |     2   (0)| 00:00:01 |
    |  20 |     TABLE ACCESS BY INDEX ROWID | S_CONTACT          |     1 |    56 |       |     1   (0)| 00:00:01 |
    |* 21 |      INDEX FULL SCAN            | S_CONTACT_F58      |     1 |       |       |     1   (0)| 00:00:01 |
    |* 22 |     INDEX RANGE SCAN            | S_ETL_I_IMG_12_M2  | 94772 |  1110K|       |     1   (0)| 00:00:01 |
    |* 23 |    INDEX RANGE SCAN             | S_ETL_I_IMG_113_M2 |     1 |    32 |       |     1   (0)| 00:00:01 |
    |  24 |   NESTED LOOPS ANTI             |                    |     1 |   100 |       |     3   (0)| 00:00:01 |
    |  25 |    NESTED LOOPS                 |                    |     1 |    88 |       |     2   (0)| 00:00:01 |
    |  26 |     TABLE ACCESS BY INDEX ROWID | S_CONTACT          |     1 |    56 |       |     1   (0)| 00:00:01 |
    |* 27 |      INDEX FULL SCAN            | S_CONTACT_F62      |     1 |       |       |     1   (0)| 00:00:01 |
    PLAN_TABLE_OUTPUT
    |* 28 |     INDEX RANGE SCAN            | S_ETL_I_IMG_125_M2 |     1 |    32 |       |     1   (0)| 00:00:01 |
    |* 29 |    INDEX RANGE SCAN             | S_ETL_I_IMG_12_M2  | 94772 |  1110K|       |     1   (0)| 00:00:01 |
    Predicate Information (identified by operation id):
       2 - access("IMG1"."ROW_ID"="S_CONTACT"."ROW_ID")
       7 - access("IMG"."ROW_ID"="S_CONTACT_FNX"."ROW_ID")
       9 - access("S_CONTACT_FNX"."PAR_ROW_ID"="S_CONTACT"."ROW_ID")
      13 - filter("S_CONTACT"."PR_SPECIALTY_ID" IS NOT NULL)
    PLAN_TABLE_OUTPUT
      15 - access("IMG1"."ROW_ID"="S_CONTACT"."ROW_ID")
           filter("IMG1"."ROW_ID"="S_CONTACT"."ROW_ID")
      17 - access("IMG"."ROW_ID"="S_CONTACT"."PR_SPECIALTY_ID")
      21 - filter("S_CONTACT"."MED_SPEC_ID" IS NOT NULL)
      22 - access("IMG1"."ROW_ID"="S_CONTACT"."ROW_ID")
      23 - access("IMG"."ROW_ID"="S_CONTACT"."MED_SPEC_ID")
      27 - filter("S_CONTACT"."REGION_ID" IS NOT NULL)
      28 - access("IMG"."ROW_ID"="S_CONTACT"."REGION_ID")
      29 - access("IMG1"."ROW_ID"="S_CONTACT"."ROW_ID")

  • Please help me in writing this query

    Hi all,
    How to do a token match of a string with the token of another mathc
    EX:
    LET THE FIRST STRINGS WITH A COMMA separated like below
    "firsttoken,second,third,are,the,parts,of,a,string"
    LET THE SECOND STRING WITH A COMMA separated like below
    "this,is,the,search,tokens"
    Now I have to match any token of the SECOND string with any TOKEN OF THE FIRST string
    If atleast one match is exist then its treated as success..
    I need only sql, not pl/sql
    Preferrable if analytical functions not used.
    Thanks in advance,
    Khaleel

    Khaleel,
    I understand the limitation to use PL/SQL. I have similar kind of limitations at my end, I am not allowed
    to leave any custom procedure/function definitions in the db with out taking the permissions for them.
    Here is the SQL solution for you for variable number of TOKENS. Only requirement is UPPER BOUND
    should be known. You could have variable number of tokens in either of the strings as long as you code it for the maximum number of tokens in each string. Here I coded it for 4 tokens in each string, hence I could use any number of tokens <= 4 in each string. Couple of tests here, -- Strings with different number of tokens but with a matching word
    SQL> SELECT DECODE(count(*), 0, 'MATCH NOT FOUND', 'MATCH FOUND') yes_no FROM DUAL,
      2  (SELECT DECODE(str1_comma1, 0, str1, SUBSTR(str1, 1, str1_comma1 - 1)) str1_token1,
      3          DECODE(str1_comma1, 0, NULL, decode(str1_comma2, 0, SUBSTR(str1, str1_comma1 + 1),
      4                    SUBSTR(str1, str1_comma1 + 1, str1_comma2 - str1_comma1 - 1))) str1_token2,
      5          DECODE(str1_comma2, 0, NULL, decode(str1_comma3, 0,  SUBSTR(str1, str1_comma2 + 1 ),
      6                    SUBSTR(str1, str1_comma2 + 1, str1_comma3 - str1_comma2 - 1))) str1_token3,
      7          DECODE(str1_comma3, 0, NULL, SUBSTR(str1, str1_comma3 + 1)) str1_token4,
      8          -- string2 tokens
      9          DECODE(str2_comma1, 0, str1, SUBSTR(str2, 1, str2_comma1 - 1)) str2_token1,
    10          DECODE(str2_comma1, 0, NULL, decode(str2_comma2, 0, SUBSTR(str2, str2_comma1 + 1),
    11                    SUBSTR(str2, str2_comma1 + 1, str2_comma2 - str2_comma1 - 1))) str2_token2,
    12          DECODE(str2_comma2, 0, NULL, decode(str2_comma3, 0,  SUBSTR(str2, str2_comma2 + 1 ),
    13                    SUBSTR(str2, str2_comma2 + 1, str2_comma3 - str2_comma2 - 1))) str2_token3,
    14          DECODE(str2_comma3, 0, NULL, SUBSTR(str2, str2_comma3 + 1)) str2_token4
    15  FROM
    16  (
    17  Select A.str1, Instr(A.str1, ',', 1, 1) str1_comma1,
    18                 Instr(A.str1, ',', 1, 2) str1_comma2,
    19            Instr(A.str1, ',', 1, 3) str1_comma3,
    20         B.str2,  Instr(B.str2, ',', 1, 1) str2_comma1,
    21             Instr(B.str2, ',', 1, 2) str2_comma2,
    22             Instr(B.str2, ',', 1, 3) str2_comma3
    23  From
    24  (Select 'Shaik,Khaleel,Java,Solution' str1 from dual) A,
    25  (Select 'SriDHAR,SQL,Solution' str2 from dual) B
    26  )
    27  ) X
    28  WHERE X.str2_token1 IN (X.str1_token1, X.str1_token2, X.str1_token3, X.str1_token4)
    29  OR    X.str2_token2 IN (X.str1_token1, X.str1_token2, X.str1_token3, X.str1_token4)
    30  OR    X.str2_token3 IN (X.str1_token1, X.str1_token2, X.str1_token3, X.str1_token4)
    31  OR    X.str2_token4 IN (X.str1_token1, X.str1_token2, X.str1_token3, X.str1_token4)
    32  /
    YES_NO
    MATCH FOUND
    -- Strings with same numer of tokens, with no matching word
    SQL> SELECT DECODE(count(*), 0, 'MATCH NOT FOUND', 'MATCH FOUND') yes_no FROM DUAL,
      2  (SELECT DECODE(str1_comma1, 0, str1, SUBSTR(str1, 1, str1_comma1 - 1)) str1_token1,
      3          DECODE(str1_comma1, 0, NULL, decode(str1_comma2, 0, SUBSTR(str1, str1_comma1 + 1),
      4                    SUBSTR(str1, str1_comma1 + 1, str1_comma2 - str1_comma1 - 1))) str1_token2,
      5          DECODE(str1_comma2, 0, NULL, decode(str1_comma3, 0,  SUBSTR(str1, str1_comma2 + 1 ),
      6                    SUBSTR(str1, str1_comma2 + 1, str1_comma3 - str1_comma2 - 1))) str1_token3,
      7          DECODE(str1_comma3, 0, NULL, SUBSTR(str1, str1_comma3 + 1)) str1_token4,
      8          -- string2 tokens
      9          DECODE(str2_comma1, 0, str1, SUBSTR(str2, 1, str2_comma1 - 1)) str2_token1,
    10          DECODE(str2_comma1, 0, NULL, decode(str2_comma2, 0, SUBSTR(str2, str2_comma1 + 1),
    11                    SUBSTR(str2, str2_comma1 + 1, str2_comma2 - str2_comma1 - 1))) str2_token2,
    12          DECODE(str2_comma2, 0, NULL, decode(str2_comma3, 0,  SUBSTR(str2, str2_comma2 + 1 ),
    13                    SUBSTR(str2, str2_comma2 + 1, str2_comma3 - str2_comma2 - 1))) str2_token3,
    14          DECODE(str2_comma3, 0, NULL, SUBSTR(str2, str2_comma3 + 1)) str2_token4
    15  FROM
    16  (
    17  Select A.str1, Instr(A.str1, ',', 1, 1) str1_comma1,
    18                 Instr(A.str1, ',', 1, 2) str1_comma2,
    19            Instr(A.str1, ',', 1, 3) str1_comma3,
    20         B.str2,  Instr(B.str2, ',', 1, 1) str2_comma1,
    21             Instr(B.str2, ',', 1, 2) str2_comma2,
    22             Instr(B.str2, ',', 1, 3) str2_comma3
    23  From
    24  (Select 'Shaik,Khaleel,Java,Program' str1 from dual) A,
    25  (Select 'SriDHAR,SQL,Solution,Possible' str2 from dual) B
    26  )
    27  ) X
    28  WHERE X.str2_token1 IN (X.str1_token1, X.str1_token2, X.str1_token3, X.str1_token4)
    29  OR    X.str2_token2 IN (X.str1_token1, X.str1_token2, X.str1_token3, X.str1_token4)
    30  OR    X.str2_token3 IN (X.str1_token1, X.str1_token2, X.str1_token3, X.str1_token4)
    31  OR    X.str2_token4 IN (X.str1_token1, X.str1_token2, X.str1_token3, X.str1_token4)
    32  /
    YES_NO
    MATCH NOT FOUNDLooks cumbersome, but works. You should be able to take it from here to extend the functionality also,
    like if you want to know which words are matching OR which words are not matching etc.., you should be
    able to tweak the SQL accordingly.
    Good luck,
    Thx,
    SriDHAR

  • Please help me to build this query

    hi,
    i have two tables a and b.
    i am inserting data into table a.
    i am inserting same data into table b.
    but i need to eleminate any duplicate rows in table b.
    this work should be done using trigger.
    means we need to write on insert trigger while inserting data into table a
    at the same time need to insert data into table b.
    final tables like this
    table a
    col1
    1234
    1234
    1234
    5678
    5678
    3456
    3456
    3456
    table b
    1234
    5678
    3456
    i really apricate your time and help

    hi
    thanks for your great support.
    if my table haveing more than 40 columns how can i
    write these queries
    insert into b (col1, col2) values (:new.col1,
    :new.col2);RTFM*: http://download-east.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_9014.htm#SQLRF01604
    update b set col2=:new.col2 where col1=:new.col1;RTFM*: http://download-east.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_10007.htm#SQLRF01708
    I'll assume (since you didn't provide any details) that your unique key is composed of col1 and col3, for example. Then your update will be...
    update b set col2=:new.col2, col4=:new.col4, col5=:new.col5 ... col40=:new.col40
    where col1 = :new.col1 and col3 = :new.col3;
    *Read The "Fascinating" Manual if you want to learn the syntax.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               

  • Please help me re write this query

    select case
    when MONTHS>=6 then YRS++
         else YRS
    end,
    from some_tab
    Edited by: user9027633 on Feb 25, 2010 1:44 AM

    Hi,
    It sounds like you want to round the length of service to the nearest year; the rounded figure may as much as 6 months more or less than the actual length of service.
    How to do that depends on your data.
    If you have 2 separate columns, months (a number, where 0 <= months < 12) and yrs (an integer) then you could say
    select  case
                when MONTHS >= 6 then YRS+1
                                 else YRS
            end     AS rounded_service_years
    from    some_tab
    ;but you might find it easier to say:
    select  ROUND (yrs + (months / 12))     AS rounded_service_years
    from    some_tab
    ;

  • Help needed to tune the Query:Statistics added

    Can someone DBA please help me to tune this query:
    SELECT DISTINCT K.ATTRIBUTE_VALUE AGENCY_ID,B.PROFILE_NM ,NVL(G.OFFICE_DESC,'--') OFFICE_DESC,f.OFFICE_ID,B.PROFILE_ID,'%' ROLE,'%' LAYOUT,
    CASE
    WHEN 'flagB' = '%' THEN
    NVL(J.ISS_GRP_DESC,'BILLING')
    WHEN 'flagO' = '%' THEN
    NVL(J.ISS_GRP_DESC,'ORDERING')
    WHEN 'flag' = '%' THEN
    NVL(J.ISS_GRP_DESC,'BILLING/ORDERING')
    ELSE
    NVL(J.ISS_GRP_DESC,' ')
    END ISS_GRP_DESC,
    DECODE(NVL(H.USERID,' ') ,' ','--','<a sbcuid_in=' || H.USERID || ' target=NEW >'||H.FIRSTNAME || ' ' || H.LASTNAME || '( ' || H.USERID || ' )</a>' ) USER_NAME
    FROM
    PROFILE_PORTAL B ,
    TBL_BDA_AGENCY_RESP_REP C ,
    TBL_BDA_AGENCY_OFFICE F,
    TBL_BDA_OFFICE G,
    USERS_PORTAL H,
    TBL_BDA_USR_ISS_GRP I ,
    TBL_BDA_ISS_GROUP J,
    ATTRIBUTE_VALUES_PORTAL K,
    PROFILE_TYPE_PORTAL L
    WHERE
    B.PROFILE_ID = F.AGENCY_ID (+)
    AND B.PROFILE_ID = C.AGENCY_ID (+)
    AND G.OFFICE_ID (+)= F.OFFICE_ID
    AND H.USERID (+)= C.RESP_USR_ID
    AND C.ISS_GRP_ID = I.ISS_GRP_ID (+)
    AND I.ISS_GRP_ID = J.ISS_GRP_ID(+)
    AND 'PROFILE.'||B.PROFILE_ID = K.ENTITY_ID(+)
    AND K.ATTRIBUTE_VALUE IS NOT NULL
    AND L.PROFILE_TYPE_ID = B.PROFILE_TYPE_ID
    AND L.APPLICATION_CD='BDA'
    AND NOT EXISTS (SELECT agency_id
    FROM TBL_BDA_AGENCY_RESP_REP t
    WHERE t.ISS_GRP_ID IN ('%')
    AND t.AGENCY_ID = C.AGENCY_ID)
    AND K.ATTRIBUTE_VALUE LIKE '%'
    AND UPPER(B.PROFILE_NM) LIKE UPPER('%')
    AND (to_char(NVL(B.PROFILE_ID,0)) LIKE '%' OR NVL(B.PROFILE_ID,0) IN ('a'))
    AND NVL(G.OFFICE_ID,0) IN ('%')
    AND (to_char(NVL(C.RESP_USR_ID,'0')) LIKE '%' OR NVL(C.RESP_USR_ID,'0') IN ('k'))
    ORDER BY PROFILE_NM
    The number of rows in these tables are as follows:
    PROFILE_PORTAL -- 2392
    TBL_BDA_AGENCY_RESP_REP 3508
    TBL_BDA_AGENCY_OFFICE 2151
    TBL_BDA_OFFICE 3
    USERS_PORTAL 270500
    TBL_BDA_USR_ISS_GRP 234
    TBL_BDA_ISS_GROUP 2
    ATTRIBUTE_VALUES_PORTAL 2790
    PROFILE_TYPE_PORTAL 3
    The Explain pal nhas given this o/p to me:
    SQL> select * from table(dbms_xplan.display) dual;
    PLAN_TABLE_OUTPUT
    | Id | Operation | Name | Rows | Bytes |TempSpc| Cost |
    | 0 | SELECT STATEMENT | | 807 | 102K| | 2533 |
    | 1 | SORT UNIQUE | | 807 | 102K| 232K| 82 |
    |* 2 | FILTER | | | | | |
    |* 3 | HASH JOIN OUTER | | 807 | 102K| | 52 |
    |* 4 | HASH JOIN OUTER | | 807 | 95226 | | 40 |
    |* 5 | TABLE ACCESS BY INDEX ROWID | ATTRIBUTE_VALUES | 1 | 23 | | 2 |
    | 6 | NESTED LOOPS | | 7 | 805 | | 37 |
    | 7 | NESTED LOOPS OUTER | | 6 | 552 | | 25 |
    |* 8 | FILTER | | | | | |
    | 9 | NESTED LOOPS OUTER | | | | | |
    |* 10 | FILTER | | | | | |
    | 11 | NESTED LOOPS OUTER | | | | | |
    | 12 | NESTED LOOPS OUTER | | 3 | 141 | | 10 |
    |* 13 | HASH JOIN | | 3 | 120 | | 7 |
    |* 14 | TABLE ACCESS FULL | PROFILE | 6 | 198 | | 4 |
    |* 15 | TABLE ACCESS FULL | PROFILE_TYPE | 1 | 7 | | 2 |
    |* 16 | INDEX RANGE SCAN | SYS_C0019777 | 1 | 7 | | 1 |
    | 17 | TABLE ACCESS BY INDEX ROWID| TBL_BDA_OFFICE | 1 | 10 | | 1 |
    |* 18 | INDEX UNIQUE SCAN | SYS_C0019800 | 1 | | | |
    | 19 | TABLE ACCESS BY INDEX ROWID | TBL_BDA_AGENCY_RESP_REP | 2 | 26 | | 2 |
    |* 20 | INDEX RANGE SCAN | IDX_AGECYRESP_AGNCYID | 2 | | | 1 |
    | 21 | TABLE ACCESS BY INDEX ROWID | USER_ | 1 | 22 | | 1 |
    |* 22 | INDEX UNIQUE SCAN | USER_PK | 1 | | | |
    |* 23 | INDEX RANGE SCAN | IDX_ATTVAL_ENTATTID | 1 | | | 1 |
    | 24 | TABLE ACCESS FULL | TBL_BDA_USR_ISS_GRP | 234 | 702 | | 2 |
    | 25 | TABLE ACCESS FULL | TBL_BDA_ISS_GROUP | 2 | 24 | | 2 |
    |* 26 | TABLE ACCESS BY INDEX ROWID | TBL_BDA_AGENCY_RESP_REP | 1 | 7 | | 3 |
    |* 27 | INDEX RANGE SCAN | IDX_AGECYRESP_AGNCYID | 2 | | | 1 |
    Predicate Information (identified by operation id):
    2 - filter( NOT EXISTS (SELECT /*+ */ 0 FROM "TBL_BDA_AGENCY_RESP_REP" "T" WHERE "T"."AGENCY_ID"=:B1
    AND "T"."ISS_GRP_ID"=TO_NUMBER('%')))
    3 - access("I"."ISS_GRP_ID"="J"."ISS_GRP_ID"(+))
    4 - access("SYS_ALIAS_1"."ISS_GRP_ID"="I"."ISS_GRP_ID"(+))
    5 - filter("K"."ATTRIBUTE_VALUE" IS NOT NULL AND "K"."ATTRIBUTE_VALUE" LIKE '%')
    8 - filter(NVL("SYS_ALIAS_1"."RESP_USR_ID",'0') LIKE '%' OR NVL("SYS_ALIAS_1"."RESP_USR_ID",'0')='k')
    10 - filter(NVL("G"."OFFICE_ID",0)=TO_NUMBER('%'))
    13 - access("L"."PROFILE_TYPE_ID"="B"."PROFILE_TYPE_ID")
    14 - filter(UPPER("B"."PROFILE_NM") LIKE '%' AND (TO_CHAR(NVL("B"."PROFILE_ID",0)) LIKE '%' OR
    NVL("B"."PROFILE_ID",0)=TO_NUMBER('a')))
    15 - filter("L"."APPLICATION_CD"='BDA')
    16 - access("B"."PROFILE_ID"="F"."AGENCY_ID"(+))
    18 - access("G"."OFFICE_ID"(+)="F"."OFFICE_ID")
    20 - access("B"."PROFILE_ID"="SYS_ALIAS_1"."AGENCY_ID"(+))
    22 - access("H"."USERID"(+)="SYS_ALIAS_1"."RESP_USR_ID")
    23 - access("K"."ENTITY_ID"='PROFILE.'||TO_CHAR("B"."PROFILE_ID"))
    26 - filter("T"."ISS_GRP_ID"=TO_NUMBER('%'))
    27 - access("T"."AGENCY_ID"=:B1)
    Note: cpu costing is off
    57 rows selected.
    Elapsed: 00:00:01.08
    Please help me.
    Aashish S.

    Hello Eric,
    Here is the code:
    SELECT DISTINCT
    K.ATTRIBUTE_VALUE AGENCY_ID,
    B.PROFILE_NM ,
    NVL(G.OFFICE_DESC,'--') OFFICE_DESC,
    f.OFFICE_ID,
    B.PROFILE_ID,
    '%' ROLE,
    '%' LAYOUT,
    case
    WHEN 'flagB' = '%' THEN
    NVL(J.ISS_GRP_DESC,'BILLING')
    WHEN 'flagO' = '%' THEN
    NVL(J.ISS_GRP_DESC,'ORDERING')
    WHEN 'flag' = '%' THEN
    NVL(J.ISS_GRP_DESC,'BILLING/ORDERING')
    else
    NVL(J.ISS_GRP_DESC,' ')
    END ISS_GRP_DESC,
    DECODE(NVL(H.USERID,' ') ,' ','--','&lt;a sbcuid_in=' || H.USERID || ' target=NEW &gt;'||H.FIRSTNAME || ' ' || H.LASTNAME ||
    '( ' || H.USERID || ' )&lt;/a&gt;' ) USER_NAME
    from
    PROFILE_PORTAL B ,
    TBL_BDA_AGENCY_RESP_REP C ,
    TBL_BDA_AGENCY_OFFICE F,
    TBL_BDA_OFFICE G,
    USERS_PORTAL H,
    TBL_BDA_USR_ISS_GRP I ,
    TBL_BDA_ISS_GROUP J,
    ATTRIBUTE_VALUES_PORTAL K,
    PROFILE_TYPE_PORTAL L
    WHERE
    B.PROFILE_ID = F.AGENCY_ID (+)
    AND B.PROFILE_ID = C.AGENCY_ID (+)
    AND G.OFFICE_ID (+)= F.OFFICE_ID
    AND H.USERID (+)= C.RESP_USR_ID
    AND C.ISS_GRP_ID = I.ISS_GRP_ID (+)
    AND I.ISS_GRP_ID = J.ISS_GRP_ID(+)
    AND 'PROFILE.'||B.PROFILE_ID = K.ENTITY_ID(+)
    AND K.ATTRIBUTE_VALUE IS NOT NULL
    AND L.PROFILE_TYPE_ID = B.PROFILE_TYPE_ID
    AND L.APPLICATION_CD='BDA'
    AND NOT EXISTS
    (SELECT agency_id
    FROM TBL_BDA_AGENCY_RESP_REP t
    WHERE t.ISS_GRP_ID IN (1)
    AND t.AGENCY_ID = C.AGENCY_ID)
    AND K.ATTRIBUTE_VALUE LIKE '%'
    AND UPPER(B.PROFILE_NM) LIKE UPPER('%')
    AND (to_char(NVL(B.PROFILE_ID,0))
    LIKE '%'
    OR NVL(B.PROFILE_ID,0) IN (1))
    AND NVL(G.OFFICE_ID,0) IN (1)
    AND (to_char(NVL(C.RESP_USR_ID,'0'))
    LIKE '%'
    OR NVL(C.RESP_USR_ID,'0') IN ('%'))
    ORDER BY PROFILE_NM
    This is the Query and the query takes some mins. to run in prod environment.
    From the Query plan ,I am not able to get any idea for optimization.
    Now,Can you tell me which steps I need to follow to run it faster and which all modifications should be made?
    Thanks.
    Aashish S.

  • Please tune this query.

    Hi Experts,
    My below query is taking long time.
    [code]SELECT FAX_LIST.*
        FROM (SELECT /*+ use_nl(fax, src)  */
                    ROW_NUMBER () OVER (ORDER BY fax.ID ASC NULLS FIRST) RN,
                     fax.ACCOUNT_TYPE,
                     fax.BU_FILE_LOCATION,
                     fax.COUNT_PAGES_RECEIVED,
                     NVL (fax.CUSTOMER_NAME, fax.SENDER_NAME) AS CUSTOMER_NAME,
                     fax.FAX_SOURCE,
                     fax.CUSTOMER_NUMBER,
                     fax.CUSTOMER_OMEGA_NUMBER,
                     fax.GENIFAX_RECIPIENT_ID,
                     fax.ID AS FAX_ID,
                     fax.DATE_RECEIVED AS FAX_RECEIVED,
                     fax.IS_LOCKED,
                     fax.LOCKED_BY,
                     fax.ORIGINATOR_CSI,
                     fax.MARGIN,
                     fax.PAYMENT_TYPE,
                     fax.PRIORITY_CODE,
                     fax.PRIORITY_VALUE,
                     FROM_TZ (fax.DATE_RECEIVED, 'UTC')
                        AT TIME ZONE fax.LOCAL_TZ_NAME
                        AS DATE_RECEIVED,
                     fax.SALES_PERSON,
                     fax.SENDER_EMAIL,
                     fax.SENDER_NAME,
                     fax.SUBJECT,
                     fax.WORKGROUP_ID,
                     fax.LOCKED_TIME,
                     src.DESCRIPTION,
                     src.FAX_NUMBER,
                     src.WORKFLOW_ID,
                     fax.CREATED_BY,
                     fax.CREATED_DATE,
                     fax.UPDATE_DATE,
                     fax.UPDATED_BY,
                     fax.RESERVED_BY,
                     fax.PRICE_TO_ORDER,
                     fax.SKU_COUNT_TO_ORDER,
                     NVL (ORL.GET_FTH_WTR (fax.LAST_TRANSITION_ID).CHANGED_BY,
                        CASE
                           WHEN fax.LAST_TRANSITION_ID IS NULL
                                AND fax.GENIFAX_RECIPIENT_ID IS NOT NULL
                           THEN
                              'ORL FEEDER'
                           ELSE
                              'Admin'
                        END)
                        AS LAST_USER,
                     FROM_TZ (
                        NVL (ORL.GET_FTH_WTR (fax.LAST_TRANSITION_ID).CHANGED_DATE,
                             fax.DATE_RECEIVED),
                        'UTC')
                        AT TIME ZONE fax.LOCAL_TZ_NAME
                        AS MOVE_DATETIME,
                     NVL (ORL.GET_FTH_WTR (fax.LAST_TRANSITION_ID).REASON,
                          'Reroute')
                        AS MOVE_REASON,
                     NVL (
                        (SELECT fw.DESCRIPTION
                           FROM ORL.WORKGROUP_TRANSITION wt, ORL.WORKGROUP fw
                          WHERE wt.ID =
                                   ORL.GET_FTH_WTR (fax.LAST_TRANSITION_ID).WORKGROUP_TRANSITION_ID
                                AND fw.ID = wt.CURRENT_WORKGROUP_ID),
                        CASE
                           WHEN fax.LAST_TRANSITION_ID IS NULL
                                AND fax.GENIFAX_RECIPIENT_ID IS NOT NULL
                           THEN
                              'ORL FEEDER STAGING'
                           ELSE
                              'N/A'
                        END)
                        AS OLD_STATUS,
                     (SELECT MAX (PURCHASE_ORDER_NUMBER)
                        FROM ORL.FAX_OFFER_DETAIL
                       WHERE FAX_ID = fax.ID)
                        AS MAXPO,
                     (SELECT CASE COUNT (PURCHASE_ORDER_NUMBER)
                                WHEN 0 THEN NULL
                                ELSE COUNT (PURCHASE_ORDER_NUMBER)
                             END
                                AS POCOUNT
                        FROM ORL.FAX_OFFER_DETAIL
                       WHERE FAX_ID = fax.ID)
                        AS POCOUNT,
                     (SELECT SUM (VALUE) AS ORDER_VALUE
                        FROM ORL.FAX_OFFER_DETAIL
                       WHERE FAX_ID = fax.ID)
                        AS ORDER_VALUE,
                     fax.SALESPERSON_NAME,
                     fax.GROUP_NAME,
                     fax.ROLE_NAME,
                     fax.EMAIL,
                     fax.SALES_CHANNEL
                FROM (SELECT fax.*,
                             map.ORACLE_TZ_NAME AS LOCAL_TZ_NAME,
                             ORL.GET_SALESPERSON (map.ORG_ID, fax.SALES_PERSON).SALESPERSON_NAME
                                AS SALESPERSON_NAME,
                             ORL.GET_SALESPERSON (map.ORG_ID, fax.SALES_PERSON).GROUP_NAME
                                AS GROUP_NAME,
                             ORL.GET_SALESPERSON (map.ORG_ID, fax.SALES_PERSON).ROLE_NAME
                                AS ROLE_NAME,
                             ORL.GET_SALESPERSON (map.ORG_ID, fax.SALES_PERSON).EMAIL
                                AS EMAIL,
                             ORL.GET_SALESPERSON (map.ORG_ID, fax.SALES_PERSON).SALES_CHANNEL
                                AS SALES_CHANNEL
                        FROM APPS_GLOBAL.GLOBAL_BU_MAPPING map,
                             (SELECT *
                                FROM ORL.FAX_HEADER FH
                               WHERE FH.WORKGROUP_ID = 262) fax
                       WHERE map.GEDIS = 'Y'
                             AND map.BU_ID = (SELECT BUID
                                                FROM ORL.WORKGROUP
                                               WHERE ID = fax.WORKGROUP_ID)
                             AND ORL.GET_SALESPERSON (map.ORG_ID, fax.SALES_PERSON).SALESPERSON_NAME =
                                    'A_CARRICK') fax,
                     (SELECT *
                        FROM ORL.FAX_SOURCE FS
                       WHERE FS.WORKFLOW_ID IN
                                (SELECT  /*+ CARDINALITY(t, 1) */
                                       TO_NUMBER (
                                           COLUMN_VALUE)
                                           AS COLUMN_VALUE
                                   FROM TABLE (
                                           SplitClob ('1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
            16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
            32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
            48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
            64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
            80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
            96, 97, 98', ',')) t)) src
               WHERE src.ID(+) = fax.FAX_SOURCE) FAX_LIST
       WHERE RN BETWEEN 1 AND 100
    ORDER BY RN ASC;[/code]
    In my query the following three functions are using.
    ORL.GET_FTH_WTR
    ORL.GET_SALESPERSON
    APPS_GLOBAL.SplitClob
    [code]CREATE OR REPLACE FUNCTION ORL.GET_FTH_WTR(p_LAST_TRANSITION_ID NUMBER)
            RETURN ORL.FTH_WTR_T
            DETERMINISTIC
        IS
            v_REASON nvarchar2(1024 char);
            v_WORKGROUP_TRANSITION_ID number;
            v_CHANGED_BY nvarchar2(64 char);
            v_CHANGED_DATE timestamp(6);
        BEGIN
        SELECT
            WTR.REASON,
            wtr.WORKGROUP_TRANSITION_ID,
            fth.CHANGED_BY,
            fth.CHANGED_DATE
        INTO
            v_REASON,
            v_WORKGROUP_TRANSITION_ID,
            v_CHANGED_BY,
            v_CHANGED_DATE
        FROM
            ORL.FAX_TRANSITION_HISTORY fth,
            ORL.WORKGROUP_TRANSITION_REASON wtr
        WHERE
             fth.ID = p_LAST_TRANSITION_ID
            AND wtr.ID(+) = fth.TRANSITION_REASON_ID;
        RETURN ORL.FTH_WTR_T(v_CHANGED_BY, v_CHANGED_DATE, v_REASON, v_WORKGROUP_TRANSITION_ID);
        EXCEPTION
            WHEN NO_DATA_FOUND THEN
            RETURN ORL.FTH_WTR_T(NULL, NULL, NULL, NULL);
        END GET_FTH_WTR;
    CREATE OR REPLACE function ORL.GET_SALESPERSON(ORG_ID number, SALESPERSON_ID number)
        return ORL.SALESPERSON_T
        deterministic
    is
        apps_bu             varchar2(30);
        salesperson_name    varchar2(150 char);
        email               varchar2(70 char);
        sales_channel       varchar2(60 char);
        role_name           varchar2(60 char);
        group_name          varchar2(60 char);
    begin
        select OWNER_NAME into apps_bu
          from APPS_GLOBAL.GLOBAL_BU_MAPPING
         where ORG_ID = GET_SALESPERSON.ORG_ID;
        execute immediate
        replace('
            select SALESPERSON_NAME
                 , EMAIL
                 , SALES_CHANNEL
                 , ROLE_NAME
                 , GROUP_NAME
              from APPS_**.ORL_ACTIVE_SALESPERSON
             where SALESPERSON_ID = :1
      and  rownum = 1
                ', 'APPS_**', apps_bu)
        into salesperson_name, email, sales_channel, role_name, group_name
        using SALESPERSON_ID;
        return SALESPERSON_T(ORG_ID, SALESPERSON_ID, salesperson_name, email, sales_channel, role_name, group_name);
    exception
        when no_data_found then
            return SALESPERSON_T(null, null, null, null, null, null, null);
    end GET_SALESPERSON;
    CREATE OR REPLACE function APPS_GLOBAL.SplitClob
        p_clob          clob
      , p_delimiter     varchar2 := ','
    return StringTable
    deterministic
    pipelined
    as
        v_current_pos   pls_integer := 1;
        v_delimiter_pos pls_integer;
    begin
        if (p_clob is not NULL) and (p_delimiter is not NULL) then
            while v_current_pos <= length(p_clob) loop
                v_delimiter_pos := instr(p_clob, p_delimiter, v_current_pos);
                if  v_delimiter_pos < 1  then   -- no more delimiters
                    v_delimiter_pos := length(p_clob) + 1;
                end if;
                pipe row( to_char( substr(p_clob,
                                          v_current_pos,
                                          v_delimiter_pos - v_current_pos) ) );
                v_current_pos := v_delimiter_pos + length(p_delimiter);
            end loop;
        end if;
    end SplitClob;
    CREATE OR REPLACE TYPE SALESPERSON_T  AS OBJECT
      SALESPERSON_ID        number(15)
    , SALESPERSON_NUMBER    varchar2(150 char)
    , FIRST_NAME            varchar2(20 char)
    , LAST_NAME             varchar2(40 char)
    , SALES_CHANNEL         varchar2(60 char)
    , ORG_ID                number(15)
    , USER_NAME             varchar2(61 char)
    , EFFECTIVE_START_DATE  date
    , EFFECTIVE_END_DATE    date
    , STATUS_FLAG           varchar2(1 char)
    , EMAIL                 varchar2(70 char)
    , WORK_TELEPHONE        varchar2(60 char)
    , MANAGERS_NAME         varchar2(50 char)
    , FAX_NO                varchar2(60 char)
    , SALESPERSON_NAME      varchar2(30 char)
    , TERRITORY             varchar2(40 char)
    , FO_LOGON              varchar2(150 char)
    , BO_LOGON              varchar2(150 char)
    , SUB_CHANNEL           varchar2(25 char)
    , BUSINESS_SEGMENT      varchar2(3 char)
    , DISCOUNT_NAME         varchar2(30 char)
    , RESPONSIBILITY_ID     number
    , RESPONSIBILITY_KEY    varchar2(30 char)
    CREATE OR REPLACE TYPE STRINGTABLE as table of varchar2(4000);[/code]
    The total number of records in each table.
    [code]SELECT COUNT(*) FROM ORL.FAX_HEADER FH --4397829
    SELECT COUNT(*) FROM APPS_GLOBAL.GLOBAL_BU_MAPPING map --31
    SELECT COUNT(*) FROM ORL.WORKGROUP_TRANSITION  --6735
    SELECT COUNT(*) FROM ORL.WORKGROUP fw --1495
    SELECT COUNT(*) FROM ORL.FAX_OFFER_DETAIL --5904039
    SELECT COUNT(*) FROM  ORL.FAX_SOURCE--2368 --2457[/code]
    Indexes on the columns.
    [code]ORL.WORKGROUP_TRANSITION(ID),
    ORL.WORKGROUP(ID),
    ORL.FAX_OFFER_DETAIL(FAX_ID),
    ORL.FAX_HEADER(WORKGROUP_ID).[/code]
    Please help me to tune this query.
    Thanks in advance.

    Hi,
    Thanks for your reply.
    For split the numbers into different rows , we are sending randomly.
    It's not constant numbers.We have used bind variables.
    For testing purpose I have hard coded the values.
    How to do this split without using user defined function.
    I am sending the actual query along with execution plan without any hints.
    [code]SELECT   FAX_LIST.*
      FROM   (SELECT   ROW_NUMBER () OVER (ORDER BY fax.ID ASC) RN,
                       fax.ACCOUNT_TYPE,
                       fax.BU_FILE_LOCATION,
                       fax.COUNT_PAGES_RECEIVED,
                       NVL (fax.CUSTOMER_NAME, fax.SENDER_NAME) AS CUSTOMER_NAME,
                       fax.FAX_SOURCE,
                       fax.CUSTOMER_NUMBER,
                       fax.CUSTOMER_OMEGA_NUMBER,
                       fax.GENIFAX_RECIPIENT_ID,
                       fax.ID AS FAX_ID,
                       fax.DATE_RECEIVED AS FAX_RECEIVED,
                       fax.IS_LOCKED,
                       fax.LOCKED_BY,
                       fax.ORIGINATOR_CSI,
                       fax.MARGIN,
                       fax.PAYMENT_TYPE,
                       fax.PRIORITY_CODE,
                       fax.PRIORITY_VALUE,
                       FROM_TZ (fax.DATE_RECEIVED, 'UTC') AT TIME ZONE map.ORACLE_TZ_NAME AS DATE_RECEIVED,
                       fax.SALES_PERSON,
                       fax.SENDER_EMAIL,
                       fax.SENDER_NAME,
                       fax.SUBJECT,
                       fax.WORKGROUP_ID,
                       fax.LOCKED_TIME,
                       src.DESCRIPTION,
                       src.FAX_NUMBER,
                       src.WORKFLOW_ID,
                       fax.CREATED_BY,
                       fax.CREATED_DATE,
                       fax.UPDATE_DATE,
                       fax.UPDATED_BY,
                       fax.RESERVED_BY,
                       fax.PRICE_TO_ORDER,
                       fax.SKU_COUNT_TO_ORDER,
                       NVL (
                          ORL.GET_FTH_WTR (fax.LAST_TRANSITION_ID).CHANGED_BY,
                          CASE
                             WHEN fax.LAST_TRANSITION_ID IS NULL
                                  AND fax.GENIFAX_RECIPIENT_ID IS NOT NULL
                             THEN
                                'ORL FEEDER'
                             ELSE
                                'Admin'
                          END
                          AS LAST_USER,
                       FROM_TZ (NVL (ORL.GET_FTH_WTR (fax.LAST_TRANSITION_ID).CHANGED_DATE,fax.DATE_RECEIVED),'UTC')
                       AT TIME ZONE map.ORACLE_TZ_NAME AS MOVE_DATETIME,
                       NVL (ORL.GET_FTH_WTR (fax.LAST_TRANSITION_ID).REASON,'Reroute')AS MOVE_REASON,
                       NVL ((SELECT   fw.DESCRIPTION
                             FROM   ORL.WORKGROUP_TRANSITION wt, ORL.WORKGROUP fw
                            WHERE   wt.ID =
                                       ORL.GET_FTH_WTR (
                                          fax.LAST_TRANSITION_ID
                                       ).WORKGROUP_TRANSITION_ID
                                    AND fw.ID = wt.CURRENT_WORKGROUP_ID),
                          CASE
                             WHEN fax.LAST_TRANSITION_ID IS NULL
                                  AND fax.GENIFAX_RECIPIENT_ID IS NOT NULL
                             THEN
                                'ORL FEEDER STAGING'
                             ELSE
                                'N/A'
                          END
                          AS OLD_STATUS,
                       (SELECT   MAX (PURCHASE_ORDER_NUMBER)
                          FROM   ORL.FAX_OFFER_DETAIL
                         WHERE   FAX_ID = fax.ID)
                          AS MAXPO,
                       (SELECT   CASE COUNT (PURCHASE_ORDER_NUMBER)
                                    WHEN 0 THEN NULL
                                    ELSE COUNT (PURCHASE_ORDER_NUMBER)
                                 END
                                    AS POCOUNT
                          FROM   ORL.FAX_OFFER_DETAIL
                         WHERE   FAX_ID = fax.ID)
                          AS POCOUNT,
                       (SELECT   SUM (VALUE) AS ORDER_VALUE
                          FROM   ORL.FAX_OFFER_DETAIL
                         WHERE   FAX_ID = fax.ID) AS ORDER_VALUE,
                       ORL.GET_SALESPERSON (map.ORG_ID,fax.SALES_PERSON).SALESPERSON_NAME AS SALESPERSON_NAME,
                       ORL.GET_SALESPERSON (map.ORG_ID,fax.SALES_PERSON).GROUP_NAME AS GROUP_NAME,
                       ORL.GET_SALESPERSON (map.ORG_ID,fax.SALES_PERSON).ROLE_NAME AS ROLE_NAME,
                       ORL.GET_SALESPERSON (map.ORG_ID, fax.SALES_PERSON).EMAIL AS EMAIL,
                       ORL.GET_SALESPERSON (map.ORG_ID, fax.SALES_PERSON).SALES_CHANNEL AS SALES_CHANNEL
                FROM   ORL.FAX_HEADER fax,
                       APPS_GLOBAL.GLOBAL_BU_MAPPING map,
                       ORL.FAX_SOURCE src
               WHERE       fax.WORKGROUP_ID = :WORKGROUP_ID
                       AND map.GEDIS = 'Y'
                       AND map.BU_ID = (SELECT   BUID
                                          FROM   ORL.WORKGROUP
                                         WHERE   ID = fax.WORKGROUP_ID)
                       AND ORL.GET_SALESPERSON (map.ORG_ID,fax.SALES_PERSON).GROUP_NAME =:SALES_TEAM
                       AND ORL.GET_SALESPERSON (map.ORG_ID,fax.SALES_PERSON
                          ).SALESPERSON_NAME = :SALESPERSON_NAME
                       AND src.WORKFLOW_ID IN
                                (SELECT TO_NUMBER (COLUMN_VALUE) AS COLUMN_VALUE
                                   FROM table(SplitClob (:WORKFLOW_ID,:WORKFLOW_ID_delim)) t)
                       AND src.ID(+) = fax.FAX_SOURCE) FAX_LIST
    WHERE   RN BETWEEN 1 AND 100;
    Execution Plan
    | Id  | Operation                               | Name                    | Rows  | Bytes | Cost (%CPU)|
    |   0 | SELECT STATEMENT                        |                         |     2 | 12092 | 88923   (1)|
    |   1 |  NESTED LOOPS                           |                         |     1 |    38 |     3   (0)|
    |   2 |   TABLE ACCESS BY INDEX ROWID           | WORKGROUP_TRANSITION    |     1 |     9 |     2   (0)|
    |   3 |    INDEX UNIQUE SCAN                    | PK_WORKGROUP_TRANSITION |     1 |       |     1   (0)|
    |   4 |   TABLE ACCESS BY INDEX ROWID           | WORKGROUP               |  1482 | 42978 |     1   (0)|
    |   5 |    INDEX UNIQUE SCAN                    | PK_WORKGROUP            |     1 |       |     0   (0)|
    |   6 |  SORT AGGREGATE                         |                         |     1 |    16 |            |
    |   7 |   TABLE ACCESS BY INDEX ROWID           | FAX_OFFER_DETAIL        |     1 |    16 |     5   (0)|
    |   8 |    INDEX RANGE SCAN                     | FAX_OFFER_DETAIL_IDX1   |     1 |       |     3   (0)|
    |   9 |  SORT AGGREGATE                         |                         |     1 |    16 |            |
    |  10 |   TABLE ACCESS BY INDEX ROWID           | FAX_OFFER_DETAIL        |     1 |    16 |     5   (0)|
    |  11 |    INDEX RANGE SCAN                     | FAX_OFFER_DETAIL_IDX1   |     1 |       |     3   (0)|
    |  12 |  SORT AGGREGATE                         |                         |     1 |    11 |            |
    |  13 |   TABLE ACCESS BY INDEX ROWID           | FAX_OFFER_DETAIL        |     1 |    11 |     5   (0)|
    |  14 |    INDEX RANGE SCAN                     | FAX_OFFER_DETAIL_IDX1   |     1 |       |     3   (0)|
    |  15 |  VIEW                                   |                         |     2 | 12092 | 88923   (1)|
    |  16 |   WINDOW SORT PUSHED RANK               |                         |     2 |  1378 | 88923   (1)|
    |  17 |    NESTED LOOPS                         |                         |       |       |            |
    |  18 |     NESTED LOOPS                        |                         |     2 |  1378 | 88920   (1)|
    |  19 |      NESTED LOOPS                       |                         | 18420 |    11M| 70490   (1)|
    |  20 |       HASH JOIN RIGHT SEMI              |                         |    69 |  3657 |    49   (3)|
    |  21 |        COLLECTION ITERATOR PICKLER FETCH| SPLITCLOB               |  8168 | 16336 |    29   (0)|
    |  22 |        TABLE ACCESS FULL                | FAX_SOURCE              |  2409 |   119K|    19   (0)|
    |  23 |       TABLE ACCESS BY INDEX ROWID       | FAX_HEADER              |   268 |   160K|  2854   (1)|
    |  24 |        INDEX RANGE SCAN                 | FAX_HEADER_FS_IDX       |  4345 |       |     7   (0)|
    |  25 |      INDEX RANGE SCAN                   | GLOBAL_BU_MAPPING_BUID  |     1 |       |     0   (0)|
    |  26 |       TABLE ACCESS BY INDEX ROWID       | WORKGROUP               |     1 |     8 |     2   (0)|
    |  27 |        INDEX UNIQUE SCAN                | PK_WORKGROUP            |     1 |       |     1   (0)|
    |  28 |     TABLE ACCESS BY INDEX ROWID         | GLOBAL_BU_MAPPING       |     1 |    24 |     1   (0)|
    Note
       - 'PLAN_TABLE' is old version
    Statistics
         894400  recursive calls
             60  db block gets
        7402741  consistent gets
              0  physical reads
              0  redo size
          46309  bytes sent via SQL*Net to client
            430  bytes received via SQL*Net from client
              8  SQL*Net roundtrips to/from client
         848304  sorts (memory)
              0  sorts (disk)
            100  rows processed[/code]
    Please help me.
    Thanks in advance.

  • Re-write and tune this query

    Hi All,
    Please help me to improve this query
    Objective of this query is find count of individual who order product in last 380 days and there gender.
    SELECT /* PARALLEL_MAX_SERVERS */
    COUNT(unique CASE WHEN cc.order_date >= SYSDATE - 45 and a.gender in (1,2,7) THEN cc.individual_id END) AS male_45
    ,COUNT(unique CASE WHEN cc.order_date >= SYSDATE - 105 and a.gender in (1,2,7) THEN cc.individual_id END) AS male_105
    ,COUNT(unique CASE WHEN cc.order_date >= SYSDATE - 195 and a.gender in (1,2,7) THEN cc.individual_id END) AS male_195
    ,COUNT(unique CASE WHEN cc.order_date >= SYSDATE - 380 and a.gender in (1,2,7) THEN cc.individual_id END) AS male_380
    ,COUNT(unique CASE WHEN cc.order_date >= SYSDATE - 45 and a.gender in (4,5,8) THEN cc.individual_id END) AS female_45
    ,COUNT(unique CASE WHEN cc.order_date >= SYSDATE - 105 and a.gender in (4,5,8) THEN cc.individual_id END) AS female_105
    ,COUNT(unique CASE WHEN cc.order_date >= SYSDATE - 195 and a.gender in (4,5,8) THEN cc.individual_id END) AS female_195
    ,COUNT(unique CASE WHEN cc.order_date >= SYSDATE - 380 and a.gender in (4,5,8) THEN cc.individual_id END) AS female_380
    ,COUNT(unique CASE WHEN cc.order_date >= SYSDATE - 45 and e.DEVOTIONAL in ('Y') THEN cc.individual_id END) AS b_45
    ,COUNT(unique CASE WHEN cc.order_date >= SYSDATE - 105 and e.DEVOTIONAL in ('Y') THEN cc.individual_id END) AS b_105
    ,COUNT(unique CASE WHEN cc.order_date >= SYSDATE - 195 and e.DEVOTIONAL in ('Y') THEN cc.individual_id END) AS b_195
    ,COUNT(unique CASE WHEN cc.order_date >= SYSDATE - 380 and e.DEVOTIONAL in ('Y') THEN cc.individual_id END) AS b_380
    FROM order cc, profile e , address a, seg d
    WHERE nbr IN (090)
    AND cc.order_date >= SYSDATE - 380
    AND cc.individual_id = e.individual_id
    and cc.individual_id = a.individual_id
    and cc.individual_id = d.individual_id;
    Plan hash value: 999897
    | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Pstart| Pstop | TQ |IN-OUT| PQ Distrib |
    | 0 | SELECT STATEMENT | | 1 | 43 | 4461 (2)| 00:00:12 | | | | | |
    | 1 | SORT GROUP BY | | 1 | 43 | | | | | | | |
    | 2 | PX COORDINATOR | | | | | | | | | | |
    | 3 | PX SEND QC (RANDOM) | :TQ10001 | 1 | 43 | | | | | Q1,01 | P->S | QC (RAND) |
    | 4 | SORT GROUP BY | | 1 | 43 | | | | | Q1,01 | PCWP | |
    | 5 | PX RECEIVE | | 1 | 43 | | | | | Q1,01 | PCWP | |
    | 6 | PX SEND HASH | :TQ10000 | 1 | 43 | | | | | Q1,00 | P->P | HASH |
    | 7 | SORT GROUP BY | | 1 | 43 | | | | | Q1,00 | PCWP | |
    | 8 | NESTED LOOPS | | 94955 | 3987K| 4461 (2)| 00:00:12 | | | Q1,00 | PCWP | |
    | 9 | NESTED LOOPS | | 91745 | 3225K| 3652 (2)| 00:00:10 | | | Q1,00 | PCWP | |
    | 10 | NESTED LOOPS | | 91745 | 2419K| 2039 (3)| 00:00:06 | | | Q1,00 | PCWP | |
    | 11 | PX BLOCK ITERATOR | | 91745 | 1612K| 427 (7)| 00:00:02 | 1 | 16 | Q1,00 | PCWC | |
    |* 12 | TABLE ACCESS FULL | ORDER | 91745 | 1612K| 427 (7)| 00:00:02 | 1 | 16 | Q1,00 | PCWP | |
    | 13 | PARTITION HASH ITERATOR | | 1 | 9 | 0 (0)| 00:00:01 | KEY | KEY | Q1,00 | PCWP | |
    | 14 | TABLE ACCESS BY LOCAL INDEX ROWID| address | 1 | 9 | 0 (0)| 00:00:01 | KEY | KEY | Q1,00 | PCWP | |
    |* 15 | INDEX UNIQUE SCAN | XPKaddrsss | 1 | | 0 (0)| 00:00:01 | KEY | KEY | Q1,00 | PCWP | |
    | 16 | PARTITION HASH ITERATOR | | 1 | 9 | 0 (0)| 00:00:01 | KEY | KEY | Q1,00 | PCWP | |
    | 17 | TABLE ACCESS BY LOCAL INDEX ROWID | PROFILE | 1 | 9 | 0 (0)| 00:00:01 | KEY | KEY | Q1,00 | PCWP | |
    |* 18 | INDEX UNIQUE SCAN | XPK_PROFILE | 1 | | 0 (0)| 00:00:01 | KEY | KEY | Q1,00 | PCWP | |
    |* 19 | INDEX UNIQUE SCAN | IDPK_SEG | 1 | 7 | 1 (0)| 00:00:01 | | | Q1,00 | PCWP | |
    Predicate Information (identified by operation id):
    12 - filter("CC"."NBR"=090 AND "CC"."ORDER_DT">=SYSDATE@!-380)
    15 - access("CC"."INDIVIDUAL_ID"="A"."INDIVIDUAL_ID")
    18 - access("CC"."INDIVIDUAL_ID"="E"."INDIVIDUAL_ID")
    19 - access("CC"."INDIVIDUAL_ID"="D"."INDIVIDUAL_ID")

    show parameter optimizer
    optimizer_dynamic_sampling integer 2
    optimizer_features_enable string 10.2.0.1
    optimizer_index_caching integer 0
    optimizer_index_cost_adj integer 100
    optimizer_mode string CHOOSE
    optimizer_secure_view_merging boolean TRUE
    SQL> show parameter db_file_multi
    db_file_multiblock_read_count integer 64
    with cc as
    (select individual_id , order_date  from order  WHERE nbr IN (090)
       AND order_date >= SYSDATE - 380) ,
    a as(select gender , individual_id from address ),
    e as(select individual_id , DEVOTIONAL   from  profile where DEVOTIONAL='Y')
    SELECT /* PARALLEL_MAX_SERVERS */
    COUNT(unique  CASE WHEN cc.order_date >= SYSDATE - 45 and a.gender in (1,2,7) THEN cc.individual_id END) AS male_45
    ,COUNT(unique  CASE WHEN cc.order_date >= SYSDATE - 105 and a.gender in (1,2,7)  THEN cc.individual_id END) AS male_105
    ,COUNT(unique  CASE WHEN cc.order_date >= SYSDATE - 195 and a.gender in (1,2,7)  THEN cc.individual_id END) AS male_195
    ,COUNT(unique  CASE WHEN cc.order_date >= SYSDATE - 380 and a.gender in (1,2,7)  THEN cc.individual_id END) AS male_380
    ,COUNT(unique  CASE WHEN cc.order_date >= SYSDATE - 45 and a.gender in (4,5,8) THEN cc.individual_id END) AS female_45
    ,COUNT(unique  CASE WHEN cc.order_date >= SYSDATE - 105 and a.genderin (4,5,8) THEN cc.individual_id END) AS female_105
    ,COUNT(unique  CASE WHEN cc.order_date >= SYSDATE - 195 and a.gender in (4,5,8)  THEN cc.individual_id END) AS female_195
    ,COUNT(unique  CASE WHEN cc.order_date >= SYSDATE - 380 and a.gender in (4,5,8)  THEN cc.individual_id END) AS female_380
    ,COUNT(unique  CASE WHEN cc.order_date >= SYSDATE - 45 and  e.DEVOTIONAL in ('Y') THEN cc.individual_id END) AS dev_45
    ,COUNT(unique  CASE WHEN cc.order_date >= SYSDATE - 105 and e.DEVOTIONAL in ('Y')  THEN cc.individual_id END) AS dev_105
    ,COUNT(unique  CASE WHEN cc.order_date >= SYSDATE - 195 and e.DEVOTIONAL in ('Y') THEN cc.individual_id END) AS dev_195
    ,COUNT(unique  CASE WHEN cc.order_date >= SYSDATE - 380 and e.DEVOTIONAL in ('Y')  THEN cc.individual_id END) AS dev_380
      FROM cc,  e  , a, seg d   
    where cc.individual_id = e.individual_id
       and cc.individual_id = a.individual_id
       and cc.individual_id = d.individual_id; Plan hash value: 898635832
    | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Pstart| Pstop | TQ |IN-OUT| PQ Distrib |
    | 0 | SELECT STATEMENT | | 1 | 43 | 4461 (2)| 00:00:12 | | | | | |
    | 1 | SORT GROUP BY | | 1 | 43 | | | | | | | |
    | 2 | PX COORDINATOR | | | | | | | | | | |
    | 3 | PX SEND QC (RANDOM) | :TQ10001 | 1 | 43 | | | | | Q1,01 | P->S | QC (RAND) |
    | 4 | SORT GROUP BY | | 1 | 43 | | | | | Q1,01 | PCWP | |
    | 5 | PX RECEIVE | | 1 | 43 | | | | | Q1,01 | PCWP | |
    | 6 | PX SEND HASH | :TQ10000 | 1 | 43 | | | | | Q1,00 | P->P | HASH |
    | 7 | SORT GROUP BY | | 1 | 43 | | | | | Q1,00 | PCWP | |
    | 8 | NESTED LOOPS | | 94956 | 3987K| 4461 (2)| 00:00:12 | | | Q1,00 | PCWP | |
    | 9 | NESTED LOOPS | | 91747 | 3225K| 3652 (2)| 00:00:10 | | | Q1,00 | PCWP | |
    | 10 | NESTED LOOPS | | 91747 | 2419K| 2039 (3)| 00:00:06 | | | Q1,00 | PCWP | |
    | 11 | PX BLOCK ITERATOR | | 91747 | 1612K| 427 (7)| 00:00:02 | 1 | 16 | Q1,00 | PCWC | |
    |* 12 | TABLE ACCESS FULL |           ORDER | 91747 | 1612K| 427 (7)| 00:00:02 | 1 | 16 | Q1,00 | PCWP | |
    | 13 | PARTITION HASH ITERATOR | | 1 | 9 | 0 (0)| 00:00:01 | KEY | KEY | Q1,00 | PCWP | |
    | 14 | TABLE ACCESS BY LOCAL INDEX ROWID| address | 1 | 9 | 0 (0)| 00:00:01 | KEY | KEY | Q1,00 | PCWP | |
    |* 15 | INDEX UNIQUE SCAN | XPKaddress | 1 | | 0 (0)| 00:00:01 | KEY | KEY | Q1,00 | PCWP | |
    | 16 | PARTITION HASH ITERATOR | | 1 | 9 | 0 (0)| 00:00:01 | KEY | KEY | Q1,00 | PCWP | |
    |* 17 | TABLE ACCESS BY LOCAL INDEX ROWID | PROFILE | 1 | 9 | 0 (0)| 00:00:01 | KEY | KEY | Q1,00 | PCWP | |
    |* 18 | INDEX UNIQUE SCAN | XPK PROFILE | 1 | | 0 (0)| 00:00:01 | KEY | KEY | Q1,00 | PCWP | |
    |* 19 | INDEX UNIQUE SCAN | IDPK_SEG | 1 | 7 | 1 (0)| 00:00:01 | | | Q1,00 | PCWP | |
    Predicate Information (identified by operation id):
    12 - filter("NBR"=090 AND "DATE">=SYSDATE@!-380)
    15 - access("INDIVIDUAL_ID"="INDIVIDUAL_ID")
    17 - filter("DEVOTIONAL"='Y')
    18 - access("INDIVIDUAL_ID"="INDIVIDUAL_ID")
    19 - access("INDIVIDUAL_ID"="D"."INDIVIDUAL_ID")
    SELECT /* PARALLEL_MAX_SERVERS */
    COUNT(unique  CASE WHEN cc.order_date >= SYSDATE - 45 and a.gender in (1,2,7) THEN cc.individual_id END) AS male_45
    ,COUNT(unique  CASE WHEN cc.order_date >= SYSDATE - 105 and a.gender in (1,2,7)  THEN cc.individual_id END) AS male_105
    ,COUNT(unique  CASE WHEN cc.order_date >= SYSDATE - 195 and a.gender in (1,2,7)  THEN cc.individual_id END) AS male_195
    ,COUNT(unique  CASE WHEN cc.order_date >= SYSDATE - 380 and a.gender in (1,2,7)  THEN cc.individual_id END) AS male_380
    ,COUNT(unique  CASE WHEN cc.order_date >= SYSDATE - 45 and a.gender in (4,5,8) THEN cc.individual_id END) AS female_45
    ,COUNT(unique  CASE WHEN cc.order_date >= SYSDATE - 105 and a.gender in (4,5,8) THEN cc.individual_id END) AS female_105
    ,COUNT(unique  CASE WHEN cc.order_date >= SYSDATE - 195 and a.gender in (4,5,8)  THEN cc.individual_id END) AS female_195
    ,COUNT(unique  CASE WHEN cc.order_date >= SYSDATE - 380 and a.gender in (4,5,8)  THEN cc.individual_id END) AS female_380
    ,COUNT(unique  CASE WHEN cc.order_date >= SYSDATE - 45 and  e.DEVOTIONAL in ('Y') THEN cc.individual_id END) AS bible_45
    ,COUNT(unique  CASE WHEN cc.order_date >= SYSDATE - 105 and e.DEVOTIONAL in ('Y')  THEN cc.individual_id END) AS bible_105
    ,COUNT(unique  CASE WHEN cc.order_date >= SYSDATE - 195 and e.DEVOTIONAL in ('Y') THEN cc.individual_id END) AS bible_195
    ,COUNT(unique  CASE WHEN cc.order_date >= SYSDATE - 380 and e.DEVOTIONAL in ('Y')  THEN cc.individual_id END) AS bible_380
      FROM order cc, profile e  , address a, seg d   
    WHERE nbr IN (090)
       AND cc.order_date >= SYSDATE - 380
       AND cc.individual_id = e.individual_id
       and cc.individual_id = a.individual_id
       and cc.individual_id = d.individual_id;Plan hash value: 898635832
    | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Pstart| Pstop | TQ |IN-OUT| PQ Distrib |
    | 0 | SELECT STATEMENT | | 1 | 43 | 4461 (2)| 00:00:12 | | | | | |
    | 1 | SORT GROUP BY | | 1 | 43 | | | | | | | |
    | 2 | PX COORDINATOR | | | | | | | | | | |
    | 3 | PX SEND QC (RANDOM) | :TQ10001 | 1 | 43 | | | | | Q1,01 | P->S | QC (RAND) |
    | 4 | SORT GROUP BY | | 1 | 43 | | | | | Q1,01 | PCWP | |
    | 5 | PX RECEIVE | | 1 | 43 | | | | | Q1,01 | PCWP | |
    | 6 | PX SEND HASH | :TQ10000 | 1 | 43 | | | | | Q1,00 | P->P | HASH |
    | 7 | SORT GROUP BY | | 1 | 43 | | | | | Q1,00 | PCWP | |
    | 8 | NESTED LOOPS | | 94955 | 3987K| 4461 (2)| 00:00:12 | | | Q1,00 | PCWP | |
    | 9 | NESTED LOOPS | | 91745 | 3225K| 3652 (2)| 00:00:10 | | | Q1,00 | PCWP | |
    | 10 | NESTED LOOPS | | 91745 | 2419K| 2039 (3)| 00:00:06 | | | Q1,00 | PCWP | |
    | 11 | PX BLOCK ITERATOR | | 91745 | 1612K| 427 (7)| 00:00:02 | 1 | 16 | Q1,00 | PCWC | |
    |* 12 | TABLE ACCESS FULL | ORDER | 91745 | 1612K| 427 (7)| 00:00:02 | 1 | 16 | Q1,00 | PCWP | |
    | 13 | PARTITION HASH ITERATOR | | 1 | 9 | 0 (0)| 00:00:01 | KEY | KEY | Q1,00 | PCWP | |
    | 14 | TABLE ACCESS BY LOCAL INDEX ROWID| address | 1 | 9 | 0 (0)| 00:00:01 | KEY | KEY | Q1,00 | PCWP | |
    |* 15 | INDEX UNIQUE SCAN | XPKaddrsss | 1 | | 0 (0)| 00:00:01 | KEY | KEY | Q1,00 | PCWP | |
    | 16 | PARTITION HASH ITERATOR | | 1 | 9 | 0 (0)| 00:00:01 | KEY | KEY | Q1,00 | PCWP | |
    | 17 | TABLE ACCESS BY LOCAL INDEX ROWID | PROFILE | 1 | 9 | 0 (0)| 00:00:01 | KEY | KEY | Q1,00 | PCWP | |
    |* 18 | INDEX UNIQUE SCAN | XPK_PROFILE | 1 | | 0 (0)| 00:00:01 | KEY | KEY | Q1,00 | PCWP | |
    |* 19 | INDEX UNIQUE SCAN | IDPK_SEG | 1 | 7 | 1 (0)| 00:00:01 | | | Q1,00 | PCWP | |
    Predicate Information (identified by operation id):
    12 - filter("CC"."NBR"=090 AND "CC"."ORDER_DT">=SYSDATE@!-380)
    15 - access("CC"."INDIVIDUAL_ID"="A"."INDIVIDUAL_ID")
    18 - access("CC"."INDIVIDUAL_ID"="E"."INDIVIDUAL_ID")
    19 - access("CC"."INDIVIDUAL_ID"="D"."INDIVIDUAL_ID")

  • HELP TO TUNE THIS QUERY

    Hi,
    I'm using below query in procedure.It's taking more more time can some one help to tune this query or advice to rewrite the query.
    Databse :10.1
    SELECT   'Reading Comprehension' TEST_NAME,T.TEST_END_DATE TEST_SESSION_DATE,
            C.POOL_VERSION_ID, I.CREATED_ON POOL_CREATED_DT,
            C.ITEM_ID, C.ITEM_RESPONSE_ID, S.STUDENT_ID_PK, C.RESPONSE_KEY, C.IS_CORRECT RESPONSE_IS_CORRECT,
            T.SCORE SCALE_SCORE, C.RESPONSE_DURATION, P.ITEM_KEY,
            T.TEST_SESSION_DETAIL_ID, SYSDATE CREATED_ON
           -- BULK COLLECT INTO TV_PSYCHO_DET
            FROM
            CAT_ITEM_PARAMETER P, CAT_ITEM_USER_RESPONSE C, TEST_SESSION_DETAIL T,
            TEST_SESSION S, ITEM_POOL_VERSION I, TEST_DETAIL D
            ,INSTITUTION E
            WHERE  TRUNC(T.TEST_END_DATE) BETWEEN TO_DATE('01-11-09','dd-mm-yy') AND TO_DATE('30-11-09','dd-mm-yy')
            AND D.TEST_NAME =  'Reading Comprehension'
            AND T.TEST_SESSION_STATUS_ID = 3
            AND I.POOL_AVAILABILITY='Y'
            AND P.PRETEST=0 AND C.RESTART_FLAG=0
            AND T.TEST_DETAIL_ID = D.TEST_DETAIL_ID
            AND S.TEST_SESSION_ID = T.TEST_SESSION_ID
            AND C.TEST_SESSION_DETAIL_ID = T.TEST_SESSION_DETAIL_ID
            AND S.INSTITUTION_ID=E.INSTITUTION_ID
            AND SUBSTR(E.INSTITUTION_ID_DISPLAY,8,3) <> '000'
            AND I.ITEM_ID = C.ITEM_ID
            AND P.ITEM_ID = I.ITEM_ID;expln plan
    Plan hash value: 3712814491                                                                                                      
    | Id  | Operation                                 | Name                        | Rows  | Bytes | Cost (%CPU)| Time     | Pstart|
    Pstop |                                                                                                                          
    |   0 | SELECT STATEMENT                          |                             | 50857 |  7151K| 93382   (1)| 00:18:41 |       |
          |                                                                                                                          
    |*  1 |  FILTER                                   |                             |       |       |            |          |       |
          |                                                                                                                          
    |*  2 |   HASH JOIN                               |                             | 50857 |  7151K| 93382   (1)| 00:18:41 |       |
          |                                                                                                                          
    |   3 |    PARTITION HASH ALL                     |                             |  2312 | 23120 |    25   (0)| 00:00:01 |     1 |
        5 |                                                                                                                          
    |*  4 |     TABLE ACCESS FULL                     | CAT_ITEM_PARAMETER          |  2312 | 23120 |    25   (0)| 00:00:01 |     1 |
        5 |                                                                                                                          
    |*  5 |    HASH JOIN                              |                             | 94938 |    12M| 93356   (1)| 00:18:41 |       |
          |                                                                                                                          
    |*  6 |     TABLE ACCESS FULL                     | ITEM_POOL_VERSION           |  9036 |   132K|    30   (0)| 00:00:01 |       |
          |                                                                                                                          
    |*  7 |     TABLE ACCESS BY GLOBAL INDEX ROWID    | CAT_ITEM_USER_RESPONSE      |     9 |   279 |    18   (0)| 00:00:01 | ROWID |
    ROWID |                                                                                                                          
    |   8 |      NESTED LOOPS                         |                             | 45349 |  5270K| 93325   (1)| 00:18:40 |       |
          |                                                                                                                          
    |*  9 |       HASH JOIN                           |                             |  4923 |   423K| 11377   (1)| 00:02:17 |       |
          |                                                                                                                          
    |* 10 |        INDEX FAST FULL SCAN               | INSTI_ID_NAME_COUN_DISP_IDX |  8165 |   111K|    18   (0)| 00:00:01 |       |
          |                                                                                                                          
    |* 11 |        HASH JOIN                          |                             |  4923 |   355K| 11359   (1)| 00:02:17 |       |
          |                                                                                                                          
    |* 12 |         TABLE ACCESS BY GLOBAL INDEX ROWID| TEST_SESSION_DETAIL         |  4107 |   148K|  6804   (1)| 00:01:22 | ROWID |
    ROWID |                                                                                                                          
    |  13 |          NESTED LOOPS                     |                             |  4923 |   278K|  6806   (1)| 00:01:22 |       |
          |                                                                                                                          
    |* 14 |           INDEX RANGE SCAN                | TEST_DETAIL_AK_1            |     1 |    21 |     2   (0)| 00:00:01 |       |
          |                                                                                                                          
    |* 15 |           INDEX RANGE SCAN                | TEST_SESSION_DETAIL_FK2_I   | 39737 |       |   102   (0)| 00:00:02 |       |
          |                                                                                                                          
    |  16 |         PARTITION HASH ALL                |                             |  1672K|    25M|  4546   (1)| 00:00:55 |     1 |
        5 |                                                                                                                          
    |  17 |          TABLE ACCESS FULL                | TEST_SESSION                |  1672K|    25M|  4546   (1)| 00:00:55 |     1 |
        5 |                                                                                                                          
    |* 18 |       INDEX RANGE SCAN                    | CAT_ITEM_USER_RESP_IDX1     |    18 |       |     3   (0)| 00:00:01 |       |
          |                                                                                                                          
    Predicate Information (identified by operation id):                                                                              
       1 - filter(TO_DATE('01-11-09','dd-mm-yy')<=TO_DATE('30-11-09','dd-mm-yy'))                                                    
       2 - access("P"."ITEM_ID"="I"."ITEM_ID")                                                                                       
       4 - filter("P"."PRETEST"=0)                                                                                                   
       5 - access("I"."ITEM_ID"="C"."ITEM_ID")                                                                                       
       6 - filter("I"."POOL_AVAILABILITY"='Y')                                                                                       
       7 - filter(TO_NUMBER("C"."RESTART_FLAG")=0)                                                                                   
       9 - access("S"."INSTITUTION_ID"="E"."INSTITUTION_ID")                                                                         
      10 - filter(SUBSTR("E"."INSTITUTION_ID_DISPLAY",8,3)<>'000')                                                                   
      11 - access("S"."TEST_SESSION_ID"="T"."TEST_SESSION_ID")                                                                       
      12 - filter(TRUNC(INTERNAL_FUNCTION("T"."TEST_END_DATE"))>=TO_DATE('01-11-09','dd-mm-yy') AND "T"."TEST_SESSION_STATUS_ID"=3   
                  AND TRUNC(INTERNAL_FUNCTION("T"."TEST_END_DATE"))<=TO_DATE('30-11-09','dd-mm-yy'))                                 
      14 - access("D"."TEST_NAME"='Reading Comprehension')                                                                           
      15 - access("T"."TEST_DETAIL_ID"="D"."TEST_DETAIL_ID")                                                                         
      18 - access("C"."TEST_SESSION_DETAIL_ID"="T"."TEST_SESSION_DETAIL_ID")                                                         
    43 rows selected.Edited by: user575115 on Dec 18, 2009 12:31 AM

    When you see something like ...
       7 - filter(TO_NUMBER("C"."RESTART_FLAG")=0)                                                                                    It means that Oracle had to do a conversion for you since you aren't using the proper data type in your query.
    That would mean IF there is an index on that column, it won't be useable...

  • I have problem with account that i can't make update or buy from app store There is massage appear in my payment page that i must contact with i tunes support to complete this transaction Please help me to fixe this problem as soon possible Hany hassan 00

    I have problem with account that i can't make update or buy from app store
    There is massage appear in my payment page that i must contact with i tunes support to complete this transaction
    Please help me to fixe this problem as soon possible
    Hany hassan
    0096597617317
    0096596677186
    Thank you

    You need to Contact iTunes Support...
    Apple  Support  iTunes Store  Contact Us

Maybe you are looking for

  • Mode not supported when trying to connect mac to tv

    I'm trying to connect my Mac to the TV as I do nearly every day using my HDMI cable via the apple HDMI adaptor (don't know exactly what that cable is called). But when I try it cuts in and out in fuzziness for a bit then eventually comes up with the

  • Windows Does Not Remember Screen Resolution after restart

    Hi Everyone, I have a strange problem with Windows 8.1 Pro My screen resolution resets to 800 x 600 everytime i restart my PC, and I will have to set my resolution again everytime I start my PC. Any idea? Cheers Nelson

  • Finder/Desktop not recognizing/seeing external Hard Disks

    For 2 weeks, I've used two external hard disks for Time Machine. Both have Mac partitions, with GUID Partition table, and Mac OS Extended (journaled) format. Things worked for 2 weeks. Then today, the Mac wouldn't recognize one of the Hard Disks, i.e

  • Requisition Losing PO information

    Hello, I am running into a problem with keeping the link between a purchase requisition/item and a purchase order/item. Once the requisition is converted into a PO, the requisition gets updated with the PO/item numbers. Is there a situation or proces

  • Using Loop to read value

    Hello !!  I am detecting rising and falling edge of a square wave in a loop.......but i am not able to do it.....kindly help........sample code is... Case 1 : do Val = readhardware(channel number); if (val >2) break; }while(1)