Skip to Main Content

Breadcrumb

Question and Answer

Connor McDonald

Thanks for the question, Arun.

Asked: March 21, 2017 - 4:40 pm UTC

Last updated: December 13, 2017 - 2:00 am UTC

Version: 11g

Viewed 50K+ times! This question is

You Asked

Hi all,

"With clause" in Oracle will store the results of select query in cache and will show the results from cache to display records next time for the same statement?

What is the advantage and alternative for "With clause" other than using functions to return the table using type objects.

Thanks

and Connor said...

It is not mandatory that a WITH clause stores results in cache. Here's an example where it doesn't, and then I've hinted it to force it to do so


SQL> create table t
  2  as
  3  select *
  4  from dba_objects;

Table created.

SQL>
SQL> set feedback only
SQL> with xyz as
  2  (
  3    select owner, count(*) c
  4    from t
  5    group by owner
  6  )
  7  select * from xyz;

32 rows selected.

SQL>
SQL> set feedback on
SQL> select * from table(dbms_xplan.display_cursor);

PLAN_TABLE_OUTPUT
----------------------------------------------------------------------------------------------------------------------------------
SQL_ID  fzhrfc593c2hu, child number 0
-------------------------------------
with xyz as (   select owner, count(*) c   from t   group by owner )
select * from xyz

Plan hash value: 47235625

---------------------------------------------------------------------------
| Id  | Operation          | Name | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |      |       |       |   422 (100)|          |
|   1 |  HASH GROUP BY     |      |    32 |   192 |   422   (2)| 00:00:01 |
|   2 |   TABLE ACCESS FULL| T    | 77225 |   452K|   418   (1)| 00:00:01 |
---------------------------------------------------------------------------


15 rows selected.

SQL>
SQL> set feedback only
SQL> with xyz as
  2  (
  3    select /*+ materialize */ owner, count(*) c
  4    from t
  5    group by owner
  6  )
  7  select * from xyz;

32 rows selected.

SQL>
SQL> set feedback on
SQL> select * from table(dbms_xplan.display_cursor);

PLAN_TABLE_OUTPUT
----------------------------------------------------------------------------------------------------------------------------------
SQL_ID  35fqjpxwg3649, child number 0
-------------------------------------
with xyz as (   select /*+ materialize */ owner, count(*) c   from t
group by owner ) select * from xyz

Plan hash value: 1146019360

----------------------------------------------------------------------------------------------------------------------
| Id  | Operation                                | Name                      | Rows  | Bytes | Cost (%CPU)| Time     |
----------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                         |                           |       |       |   424 (100)|          |
|   1 |  TEMP TABLE TRANSFORMATION               |                           |       |       |            |          |
|   2 |   LOAD AS SELECT (CURSOR DURATION MEMORY)| SYS_TEMP_0FD9D6659_22ECE8 |       |       |            |          |
|   3 |    HASH GROUP BY                         |                           |    32 |   192 |   422   (2)| 00:00:01 |
|   4 |     TABLE ACCESS FULL                    | T                         | 77225 |   452K|   418   (1)| 00:00:01 |
|   5 |   VIEW                                   |                           |    32 |  2528 |     2   (0)| 00:00:01 |
|   6 |    TABLE ACCESS FULL                     | SYS_TEMP_0FD9D6659_22ECE8 |    32 |   192 |     2   (0)| 00:00:01 |
----------------------------------------------------------------------------------------------------------------------


19 rows selected.

SQL>


The WITH clause is just like any other SQL construct - another tool in the toolbox to help you write good SQL. It can provide structure and maintenance benefits by building up the SQL in sections. It can be used recursively to handle queries much harder to code in any other way.

Lots of options there.

Rating

  (4 ratings)

Is this answer out of date? If it is, please let us know via a Comment

Comments

A reader, March 23, 2017 - 2:01 pm UTC

What is the Difference between Temporary Tables and With Clause?
Connor McDonald
March 25, 2017 - 3:46 am UTC

Check the example - there is no mandate that a WITH clause will use a temporary storage area.

If it *does* do so, then the semantics are similar - in fact, if you trace the session you would see an internal "create global temporary" command being run on your behalf.

A query

shyam, September 11, 2017 - 12:04 pm UTC

Can I create an update statement using the with clause.

something like update table tablename set coulmn1=value
where tablename.column2 in (with custom as <complex code> select value from custom)
Connor McDonald
September 13, 2017 - 7:30 am UTC

Yes

SQL> create table t as select * from dba_objects;

Table created.

SQL>
SQL> update t
  2  set owner = upper(owner)
  3  where object_id in
  4  (
  5    with blah as ( select 1000 x from dual )
  6    select x from blah
  7  );

1 row updated.


With statements and temp space

Greg, October 16, 2017 - 9:33 pm UTC

Tom

I am on 11g I have sql that is running out of temp space and it is built on several WITH clauses.

Is there a guide for me based on the below execution plan?
I was going to check hash_area_size value.
It is using parallel DML but I will validate how also.
Maybe I should serialize versus parallel DML?
call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.00       0.00          0          0          0           0
Execute      1      0.01       0.38          2        267         40           0
Fetch        1    544.41     887.01     352968       1463          2           0
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        3    544.43     887.40     352970       1730         42           0

Misses in library cache during parse: 0
Optimizer mode: CHOOSE
Parsing user id: SYS
Number of plan statistics captured: 1

Rows (1st) Rows (avg) Rows (max)  Row Source Operation
---------- ---------- ----------  ---------------------------------------------------
         0          0          0  TEMP TABLE TRANSFORMATION  (cr=267 pr=2 pw=4 time=382479 us)
         0          0          0   LOAD AS SELECT  (cr=192 pr=0 pw=1 time=8510 us)
        32         32         32    HASH JOIN RIGHT SEMI (cr=192 pr=0 pw=0 time=6894 us cost=34 size=84 card=4)
        32         32         32     VIEW  VW_NSO_1 (cr=177 pr=0 pw=0 time=6725 us cost=28 size=52 card=4)
        32         32         32      NESTED LOOPS  (cr=177 pr=0 pw=0 time=6663 us cost=28 size=124 card=4)
        32         32         32       NESTED LOOPS  (cr=135 pr=0 pw=0 time=6051 us cost=28 size=124 card=4)
        32         32         32        HASH JOIN  (cr=124 pr=0 pw=0 time=5731 us cost=24 size=96 card=4)
        32         32         32         HASH JOIN  (cr=123 pr=0 pw=0 time=4372 us cost=23 size=64 card=4)
       107        107        107          TABLE ACCESS BY INDEX ROWID IX_FLR_PERFORMANCE (cr=112 pr=0 pw=0 time=389 us cost=18 size=162 card=18)
       107        107        107           INDEX RANGE SCAN IX_FLR_PERFORMANCE_I2 (cr=2 pr=0 pw=0 time=158 us cost=1 size=0 card=18)(object id 89471)
       284        284        284          VIEW  index$_join$_003 (cr=11 pr=0 pw=0 time=2029 us cost=5 size=1967 card=281)
       284        284        284           HASH JOIN  (cr=11 pr=0 pw=0 time=1933 us)
       284        284        284            INLIST ITERATOR  (cr=4 pr=0 pw=0 time=323 us)
       284        284        284             INDEX RANGE SCAN IX_FLR_FLOORPLAN_I6 (cr=4 pr=0 pw=0 time=200 us cost=2 size=1967 card=281)(object id 89556)
      1074       1074       1074            INDEX FAST FULL SCAN IX_FLR_FLOORPLAN_P1 (cr=7 pr=0 pw=0 time=433 us cost=4 size=1967 card=281)(object id 89554)
       284        284        284         INDEX FULL SCAN IX_STR_STORE_FLOORPLAN_I1 (cr=1 pr=0 pw=0 time=117 us cost=1 size=2264 card=283)(object id 89465)
        32         32         32        INDEX UNIQUE SCAN IX_STR_STORE_P1 (cr=11 pr=0 pw=0 time=96 us cost=0 size=0 card=1)(object id 89050)
        32         32         32       TABLE ACCESS BY INDEX ROWID IX_STR_STORE (cr=42 pr=0 pw=0 time=321 us cost=1 size=7 card=1)
      1072       1072       1072     TABLE ACCESS FULL NEX_SALES_STORE (cr=15 pr=0 pw=0 time=44 us cost=6 size=8576 card=1072)
         0          0          0   LOAD AS SELECT  (cr=4 pr=1 pw=1 time=1187 us)
         1          1          1    SORT AGGREGATE (cr=4 pr=1 pw=0 time=424 us)
        32         32         32     VIEW  (cr=4 pr=1 pw=0 time=442 us cost=2 size=0 card=4)
        32         32         32      TABLE ACCESS FULL SYS_TEMP_0FD9D662E_ACCAE0 (cr=4 pr=1 pw=0 time=410 us cost=2 size=16 card=4)
         0          0          0   LOAD AS SELECT  (cr=11 pr=0 pw=1 time=959 us)
        18         18         18    TABLE ACCESS BY INDEX ROWID IX_SPC_PERFORMANCE (cr=11 pr=0 pw=0 time=295 us cost=83 size=2584 card=152)
        18         18         18     INDEX RANGE SCAN IX_SPC_PERFORMANCE_I1 (cr=3 pr=0 pw=0 time=59 us cost=3 size=0 card=152)(object id 89321)
         0          0          0   LOAD AS SELECT  (cr=60 pr=1 pw=1 time=2017 us)
        18         18         18    NESTED LOOPS  (cr=60 pr=1 pw=0 time=1565 us cost=459 size=3825 card=153)
        18         18         18     NESTED LOOPS  (cr=42 pr=1 pw=0 time=1379 us cost=459 size=3825 card=153)
        18         18         18      VIEW  VW_NSO_2 (cr=4 pr=1 pw=0 time=903 us cost=2 size=1976 card=152)
        18         18         18       HASH UNIQUE (cr=4 pr=1 pw=0 time=900 us)
        18         18         18        VIEW  (cr=4 pr=1 pw=0 time=313 us cost=2 size=912 card=152)
        18         18         18         TABLE ACCESS FULL SYS_TEMP_0FD9D6630_ACCAE0 (cr=4 pr=1 pw=0 time=294 us cost=2 size=2584 card=152)
        18         18         18      INDEX RANGE SCAN NEX_SALES_PROUCT_I2 (cr=38 pr=0 pw=0 time=338 us cost=2 size=0 card=1)(object id 89779)
        18         18         18     TABLE ACCESS BY INDEX ROWID NEX_SALES_PRODUCT (cr=18 pr=0 pw=0 time=184 us cost=3 size=12 card=1)
         0          0          0   PX COORDINATOR  (cr=0 pr=0 pw=0 time=369021 us)
         0          0          0    PX SEND QC (RANDOM) :TQ10007 (cr=0 pr=0 pw=0 time=0 us cost=1530 size=84816 card=152)
         0          0          0     HASH GROUP BY (cr=0 pr=0 pw=0 time=0 us cost=1530 size=84816 card=152)
         0          0          0      PX RECEIVE  (cr=0 pr=0 pw=0 time=0 us cost=1530 size=84816 card=152)
         0          0          0       PX SEND HASH :TQ10006 (cr=0 pr=0 pw=0 time=0 us cost=1530 size=84816 card=152)
         0          0          0        HASH GROUP BY (cr=0 pr=0 pw=0 time=0 us cost=1530 size=84816 card=152)
         0          0          0         HASH JOIN RIGHT OUTER (cr=0 pr=0 pw=0 time=0 us cost=1529 size=85374 card=153)
         0          0          0          BUFFER SORT (cr=0 pr=0 pw=0 time=0 us)
         0          0          0           PX RECEIVE  (cr=0 pr=0 pw=0 time=0 us cost=61 size=290 card=5)
         0          0          0            PX SEND BROADCAST :TQ10001 (cr=0 pr=0 pw=0 time=0 us cost=61 size=290 card=5)
       239        239        239             VIEW  (cr=162 pr=1 pw=0 time=4631 us cost=61 size=290 card=5)
       239        239        239              HASH GROUP BY (cr=162 pr=1 pw=0 time=4257 us cost=61 size=270 card=5)
       295        295        295               HASH JOIN  (cr=162 pr=1 pw=0 time=3769 us cost=61 size=270 card=5)
      1197       1197       1197                NESTED LOOPS  (cr=160 pr=1 pw=0 time=3975 us cost=59 size=49250 card=985)
      1197       1197       1197                 NESTED LOOPS  (cr=45 pr=1 pw=0 time=1328 us cost=59 size=49250 card=985)
        18         18         18                  MERGE JOIN CARTESIAN (cr=6 pr=1 pw=0 time=671 us cost=4 size=2907 card=153)
         1          1          1                   VIEW  (cr=4 pr=1 pw=0 time=612 us cost=2 size=13 card=1)
         1          1          1                    TABLE ACCESS FULL SYS_TEMP_0FD9D662F_ACCAE0 (cr=4 pr=1 pw=0 time=609 us cost=2 size=13 card=1)
        18         18         18                   BUFFER SORT (cr=2 pr=0 pw=0 time=62 us cost=4 size=918 card=153)
        18         18         18                    VIEW  (cr=2 pr=0 pw=0 time=24 us cost=2 size=918 card=153)
        18         18         18                     TABLE ACCESS FULL SYS_TEMP_0FD9D6631_ACCAE0 (cr=2 pr=0 pw=0 time=23 us cost=2 size=918 card=153)
      1197       1197       1197                  INDEX RANGE SCAN NEX_MVW_AGG_SALES_L4WK_I2 (cr=39 pr=0 pw=0 time=548 us cost=0 size=0 card=6)(object id 104647)
      1197       1197       1197                 MAT_VIEW ACCESS BY INDEX ROWID NEX_MVW_AGG_SALES_L4WK (cr=115 pr=0 pw=0 time=1477 us cost=1 size=186 card=6)
        32         32         32                VIEW  (cr=2 pr=0 pw=0 time=19 us cost=2 size=16 card=4)
        32         32         32                 TABLE ACCESS FULL SYS_TEMP_0FD9D662E_ACCAE0 (cr=2 pr=0 pw=0 time=19 us cost=2 size=16 card=4)
         0          0          0          HASH JOIN RIGHT OUTER (cr=0 pr=0 pw=0 time=0 us cost=1468 size=76500 card=153)
         0          0          0           BUFFER SORT (cr=0 pr=0 pw=0 time=0 us)
         0          0          0            PX RECEIVE  (cr=0 pr=0 pw=0 time=0 us cost=73 size=290 card=5)
         0          0          0             PX SEND BROADCAST :TQ10002 (cr=0 pr=0 pw=0 time=0 us cost=73 size=290 card=5)
       330        330        330              VIEW  (cr=168 pr=0 pw=0 time=7839 us cost=73 size=290 card=5)
       330        330        330               HASH GROUP BY (cr=168 pr=0 pw=0 time=6724 us cost=73 size=275 card=5)
       354        354        354                HASH JOIN  (cr=168 pr=0 pw=0 time=7130 us cost=73 size=275 card=5)
        32         32         32                 VIEW  (cr=2 pr=0 pw=0 time=86 us cost=2 size=16 card=4)
        32         32         32                  TABLE ACCESS FULL SYS_TEMP_0FD9D662E_ACCAE0 (cr=2 pr=0 pw=0 time=54 us cost=2 size=16 card=4)
      1398       1398       1398                 NESTED LOOPS  (cr=166 pr=0 pw=0 time=7832 us cost=70 size=65433 card=1283)
      1398       1398       1398                  NESTED LOOPS  (cr=46 pr=0 pw=0 time=953 us cost=70 size=65433 card=1283)
        18         18         18                   MERGE JOIN CARTESIAN (cr=4 pr=0 pw=0 time=89 us cost=4 size=2907 card=153)
         1          1          1                    VIEW  (cr=2 pr=0 pw=0 time=38 us cost=2 size=13 card=1)
         1          1          1                     TABLE ACCESS FULL SYS_TEMP_0FD9D662F_ACCAE0 (cr=2 pr=0 pw=0 time=35 us cost=2 size=13 card=1)
        18         18         18                    BUFFER SORT (cr=2 pr=0 pw=0 time=57 us cost=4 size=918 card=153)
        18         18         18                     VIEW  (cr=2 pr=0 pw=0 time=31 us cost=2 size=918 card=153)
        18         18         18                      TABLE ACCESS FULL SYS_TEMP_0FD9D6631_ACCAE0 (cr=2 pr=0 pw=0 time=30 us cost=2 size=918 card=153)
      1398       1398       1398                   INDEX RANGE SCAN NEX_MVW_AGG_SALES_L13WK_I2 (cr=42 pr=0 pw=0 time=1202 us cost=0 size=0 card=8)(object id 104655)
      1398       1398       1398                  MAT_VIEW ACCESS BY INDEX ROWID NEX_MVW_AGG_SALES_L13WK (cr=120 pr=0 pw=0 time=2834 us cost=1 size=256 card=8)
         0          0          0           HASH JOIN OUTER (cr=0 pr=0 pw=0 time=0 us cost=1395 size=67626 card=153)
         0          0          0            BUFFER SORT (cr=0 pr=0 pw=0 time=0 us)
         0          0          0             PX RECEIVE  (cr=0 pr=0 pw=0 time=0 us cost=944 size=60741 card=153)
         0          0          0              PX SEND HASH :TQ10003 (cr=0 pr=0 pw=0 time=0 us cost=944 size=60741 card=153)
 351876511  351876511  351876511               HASH JOIN OUTER (cr=1127 pr=352966 pw=3230324 time=373134042 us cost=944 size=60741 card=153)
 145685507  145685507  145685507                HASH JOIN OUTER (cr=948 pr=80941 pw=80941 time=66109109 us cost=866 size=51867 card=153)
   4756734    4756734    4756734                 HASH JOIN OUTER (cr=772 pr=0 pw=0 time=1792046 us cost=768 size=39015 card=153)
    238740     238740     238740                  HASH JOIN OUTER (cr=601 pr=0 pw=0 time=101373 us cost=707 size=30141 card=153)
      9708       9708       9708                   HASH JOIN OUTER (cr=424 pr=0 pw=0 time=19594 us cost=635 size=21267 card=153)
       388        388        388                    HASH JOIN OUTER (cr=239 pr=0 pw=0 time=10940 us cost=558 size=12393 card=153)
        18         18         18                     NESTED LOOPS  (cr=55 pr=0 pw=0 time=545 us cost=458 size=3519 card=153)
        18         18         18                      NESTED LOOPS  (cr=40 pr=0 pw=0 time=416 us cost=458 size=3519 card=153)
        18         18         18                       VIEW  (cr=2 pr=0 pw=0 time=106 us cost=2 size=1672 card=152)
        18         18         18                        TABLE ACCESS FULL SYS_TEMP_0FD9D6630_ACCAE0 (cr=2 pr=0 pw=0 time=104 us cost=2 size=2584 card=152)
        18         18         18                       INDEX RANGE SCAN NEX_SALES_PROUCT_I2 (cr=38 pr=0 pw=0 time=124 us cost=2 size=0 card=1)(object id 89779)
        18         18         18                      TABLE ACCESS BY INDEX ROWID NEX_SALES_PRODUCT (cr=15 pr=0 pw=0 time=49 us cost=3 size=12 card=1)
       386        386        386                     VIEW  (cr=184 pr=0 pw=0 time=8949 us cost=100 size=348 card=6)
       386        386        386                      HASH GROUP BY (cr=184 pr=0 pw=0 time=7878 us cost=100 size=336 card=6)
       389        389        389                       HASH JOIN  (cr=184 pr=0 pw=0 time=8772 us cost=100 size=336 card=6)
        32         32         32                        VIEW  (cr=2 pr=0 pw=0 time=75 us cost=2 size=16 card=4)
        32         32         32                         TABLE ACCESS FULL SYS_TEMP_0FD9D662E_ACCAE0 (cr=2 pr=0 pw=0 time=42 us cost=2 size=16 card=4)
      1746       1746       1746                        NESTED LOOPS  (cr=182 pr=0 pw=0 time=3151 us cost=98 size=85800 card=1650)
      1746       1746       1746                         NESTED LOOPS  (cr=44 pr=0 pw=0 time=1139 us cost=98 size=85800 card=1683)
        18         18         18                          MERGE JOIN CARTESIAN (cr=4 pr=0 pw=0 time=107 us cost=4 size=2907 card=153)
         1          1          1                           VIEW  (cr=2 pr=0 pw=0 time=23 us cost=2 size=13 card=1)
         1          1          1                            TABLE ACCESS FULL SYS_TEMP_0FD9D662F_ACCAE0 (cr=2 pr=0 pw=0 time=22 us cost=2 size=13 card=1)
        18         18         18                           BUFFER SORT (cr=2 pr=0 pw=0 time=88 us cost=4 size=918 card=153)
        18         18         18                            VIEW  (cr=2 pr=0 pw=0 time=35 us cost=2 size=918 card=153)
        18         18         18                             TABLE ACCESS FULL SYS_TEMP_0FD9D6631_ACCAE0 (cr=2 pr=0 pw=0 time=16 us cost=2 size=918 card=153)
      1746       1746       1746                          INDEX RANGE SCAN NEX_MVW_AGG_SALES_L52WK_LY_I2 (cr=40 pr=0 pw=0 time=833 us cost=0 size=0 card=11)(object id 104675)
      1746       1746       1746                         MAT_VIEW ACCESS BY INDEX ROWID NEX_MVW_AGG_SALES_L52WK_LY (cr=138 pr=0 pw=0 time=2685 us cost=1 size=363 card=11)
       352        352        352                    VIEW  (cr=185 pr=0 pw=0 time=6810 us cost=77 size=348 card=6)
       352        352        352                     HASH GROUP BY (cr=185 pr=0 pw=0 time=5748 us cost=77 size=330 card=6)
       361        361        361                      HASH JOIN  (cr=185 pr=0 pw=0 time=9285 us cost=77 size=330 card=6)
        32         32         32                       VIEW  (cr=2 pr=0 pw=0 time=58 us cost=2 size=16 card=4)
        32         32         32                        TABLE ACCESS FULL SYS_TEMP_0FD9D662E_ACCAE0 (cr=2 pr=0 pw=0 time=56 us cost=2 size=16 card=4)
      1576       1576       1576                       NESTED LOOPS  (cr=183 pr=0 pw=0 time=3072 us cost=75 size=78132 card=1532)
      1576       1576       1576                        NESTED LOOPS  (cr=47 pr=0 pw=0 time=1226 us cost=75 size=78132 card=1532)
        18         18         18                         MERGE JOIN CARTESIAN (cr=4 pr=0 pw=0 time=88 us cost=4 size=2907 card=153)
         1          1          1                          VIEW  (cr=2 pr=0 pw=0 time=19 us cost=2 size=13 card=1)
         1          1          1                           TABLE ACCESS FULL SYS_TEMP_0FD9D662F_ACCAE0 (cr=2 pr=0 pw=0 time=19 us cost=2 size=13 card=1)
        18         18         18                          BUFFER SORT (cr=2 pr=0 pw=0 time=71 us cost=4 size=918 card=153)
        18         18         18                           VIEW  (cr=2 pr=0 pw=0 time=37 us cost=2 size=918 card=153)
        18         18         18                            TABLE ACCESS FULL SYS_TEMP_0FD9D6631_ACCAE0 (cr=2 pr=0 pw=0 time=37 us cost=2 size=918 card=153)
      1576       1576       1576                         INDEX RANGE SCAN NEX_MVW_AGG_SALES_L26WK_LY_I2 (cr=43 pr=0 pw=0 time=974 us cost=0 size=0 card=10)(object id 104667)
      1576       1576       1576                        MAT_VIEW ACCESS BY INDEX ROWID NEX_MVW_AGG_SALES_L26WK_LY (cr=136 pr=0 pw=0 time=2558 us cost=1 size=320 card=10)
       312        312        312                   VIEW  (cr=177 pr=0 pw=0 time=6590 us cost=72 size=290 card=5)
       312        312        312                    HASH GROUP BY (cr=177 pr=0 pw=0 time=5026 us cost=72 size=275 card=5)
       336        336        336                     HASH JOIN  (cr=177 pr=0 pw=0 time=3933 us cost=72 size=275 card=5)
        32         32         32                      VIEW  (cr=2 pr=0 pw=0 time=32 us cost=2 size=16 card=4)
        32         32         32                       TABLE ACCESS FULL SYS_TEMP_0FD9D662E_ACCAE0 (cr=2 pr=0 pw=0 time=31 us cost=2 size=16 card=4)
      1478       1478       1478                      NESTED LOOPS  (cr=175 pr=0 pw=0 time=5940 us cost=70 size=68442 card=1342)
      1478       1478       1478                       NESTED LOOPS  (cr=43 pr=0 pw=0 time=862 us cost=70 size=68442 card=1377)
        18         18         18                        MERGE JOIN CARTESIAN (cr=4 pr=0 pw=0 time=82 us cost=4 size=2907 card=153)
         1          1          1                         VIEW  (cr=2 pr=0 pw=0 time=23 us cost=2 size=13 card=1)
         1          1          1                          TABLE ACCESS FULL SYS_TEMP_0FD9D662F_ACCAE0 (cr=2 pr=0 pw=0 time=22 us cost=2 size=13 card=1)
        18         18         18                         BUFFER SORT (cr=2 pr=0 pw=0 time=43 us cost=4 size=918 card=153)
        18         18         18                          VIEW  (cr=2 pr=0 pw=0 time=10 us cost=2 size=918 card=153)
        18         18         18                           TABLE ACCESS FULL SYS_TEMP_0FD9D6631_ACCAE0 (cr=2 pr=0 pw=0 time=9 us cost=2 size=918 card=153)
      1478       1478       1478                        INDEX RANGE SCAN NEX_MVW_AGG_SALES_L13WK_LY_I2 (cr=39 pr=0 pw=0 time=629 us cost=0 size=0 card=9)(object id 104659)
      1478       1478       1478                       MAT_VIEW ACCESS BY INDEX ROWID NEX_MVW_AGG_SALES_L13WK_LY (cr=132 pr=0 pw=0 time=2146 us cost=1 size=288 card=9)
       241        241        241                  VIEW  (cr=171 pr=0 pw=0 time=7371 us cost=61 size=290 card=5)
       241        241        241                   HASH GROUP BY (cr=171 pr=0 pw=0 time=5082 us cost=61 size=270 card=5)
       288        288        288                    HASH JOIN  (cr=171 pr=0 pw=0 time=3111 us cost=61 size=270 card=5)
      1265       1265       1265                     NESTED LOOPS  (cr=169 pr=0 pw=0 time=5094 us cost=59 size=50900 card=1018)
      1265       1265       1265                      NESTED LOOPS  (cr=46 pr=0 pw=0 time=2924 us cost=59 size=50900 card=1071)
        18         18         18                       MERGE JOIN CARTESIAN (cr=4 pr=0 pw=0 time=80 us cost=4 size=2907 card=153)
         1          1          1                        VIEW  (cr=2 pr=0 pw=0 time=37 us cost=2 size=13 card=1)
         1          1          1                         TABLE ACCESS FULL SYS_TEMP_0FD9D662F_ACCAE0 (cr=2 pr=0 pw=0 time=36 us cost=2 size=13 card=1)
        18         18         18                        BUFFER SORT (cr=2 pr=0 pw=0 time=27 us cost=4 size=918 card=153)
        18         18         18                         VIEW  (cr=2 pr=0 pw=0 time=28 us cost=2 size=918 card=153)
        18         18         18                          TABLE ACCESS FULL SYS_TEMP_0FD9D6631_ACCAE0 (cr=2 pr=0 pw=0 time=26 us cost=2 size=918 card=153)
      1265       1265       1265                       INDEX RANGE SCAN NEX_MVW_AGG_SALES_L4WK_LY_I2 (cr=42 pr=0 pw=0 time=727 us cost=0 size=0 card=7)(object id 104651)
      1265       1265       1265                      MAT_VIEW ACCESS BY INDEX ROWID NEX_MVW_AGG_SALES_L4WK_LY (cr=123 pr=0 pw=0 time=1548 us cost=1 size=217 card=7)
        32         32         32                     VIEW  (cr=2 pr=0 pw=0 time=48 us cost=2 size=16 card=4)
        32         32         32                      TABLE ACCESS FULL SYS_TEMP_0FD9D662E_ACCAE0 (cr=2 pr=0 pw=0 time=47 us cost=2 size=16 card=4)
       389        389        389                 VIEW  (cr=176 pr=0 pw=0 time=7386 us cost=99 size=504 card=6)
       389        389        389                  HASH GROUP BY (cr=176 pr=0 pw=0 time=6013 us cost=99 size=354 card=6)
       391        391        391                   HASH JOIN  (cr=176 pr=0 pw=0 time=4357 us cost=99 size=354 card=6)
        32         32         32                    VIEW  (cr=2 pr=0 pw=0 time=141 us cost=2 size=16 card=4)
        32         32         32                     TABLE ACCESS FULL SYS_TEMP_0FD9D662E_ACCAE0 (cr=2 pr=0 pw=0 time=139 us cost=2 size=16 card=4)
      1630       1630       1630                    NESTED LOOPS  (cr=174 pr=0 pw=0 time=5098 us cost=97 size=91795 card=1669)
      1630       1630       1630                     NESTED LOOPS  (cr=45 pr=0 pw=0 time=821 us cost=97 size=91795 card=1683)
        18         18         18                      MERGE JOIN CARTESIAN (cr=4 pr=0 pw=0 time=105 us cost=4 size=2907 card=153)
         1          1          1                       VIEW  (cr=2 pr=0 pw=0 time=23 us cost=2 size=13 card=1)
         1          1          1                        TABLE ACCESS FULL SYS_TEMP_0FD9D662F_ACCAE0 (cr=2 pr=0 pw=0 time=20 us cost=2 size=13 card=1)
        18         18         18                       BUFFER SORT (cr=2 pr=0 pw=0 time=68 us cost=4 size=918 card=153)
        18         18         18                        VIEW  (cr=2 pr=0 pw=0 time=22 us cost=2 size=918 card=153)
        18         18         18                         TABLE ACCESS FULL SYS_TEMP_0FD9D6631_ACCAE0 (cr=2 pr=0 pw=0 time=20 us cost=2 size=918 card=153)
      1630       1630       1630                      INDEX RANGE SCAN NEX_MVW_AGG_SALES_L52WK_I2 (cr=41 pr=0 pw=0 time=796 us cost=0 size=0 card=11)(object id 104671)
      1630       1630       1630                     MAT_VIEW ACCESS BY INDEX ROWID NEX_MVW_AGG_SALES_L52WK (cr=129 pr=0 pw=0 time=2198 us cost=1 size=396 card=11)
       366        366        366                VIEW  (cr=179 pr=0 pw=0 time=6489 us cost=77 size=348 card=6)
       366        366        366                 HASH GROUP BY (cr=179 pr=0 pw=0 time=5504 us cost=77 size=330 card=6)
       375        375        375                  HASH JOIN  (cr=179 pr=0 pw=0 time=4583 us cost=77 size=330 card=6)
        32         32         32                   VIEW  (cr=2 pr=0 pw=0 time=81 us cost=2 size=16 card=4)
        32         32         32                    TABLE ACCESS FULL SYS_TEMP_0FD9D662E_ACCAE0 (cr=2 pr=0 pw=0 time=78 us cost=2 size=16 card=4)
      1511       1511       1511                   NESTED LOOPS  (cr=177 pr=0 pw=0 time=4354 us cost=75 size=75837 card=1487)
      1511       1511       1511                    NESTED LOOPS  (cr=46 pr=0 pw=0 time=937 us cost=75 size=75837 card=1530)
        18         18         18                     MERGE JOIN CARTESIAN (cr=4 pr=0 pw=0 time=221 us cost=4 size=2907 card=153)
         1          1          1                      VIEW  (cr=2 pr=0 pw=0 time=113 us cost=2 size=13 card=1)
         1          1          1                       TABLE ACCESS FULL SYS_TEMP_0FD9D662F_ACCAE0 (cr=2 pr=0 pw=0 time=112 us cost=2 size=13 card=1)
        18         18         18                      BUFFER SORT (cr=2 pr=0 pw=0 time=92 us cost=4 size=918 card=153)
        18         18         18                       VIEW  (cr=2 pr=0 pw=0 time=43 us cost=2 size=918 card=153)
        18         18         18                        TABLE ACCESS FULL SYS_TEMP_0FD9D6631_ACCAE0 (cr=2 pr=0 pw=0 time=43 us cost=2 size=918 card=153)
      1511       1511       1511                     INDEX RANGE SCAN NEX_MVW_AGG_SALES_L26WK_I2 (cr=42 pr=0 pw=0 time=531 us cost=0 size=0 card=10)(object id 104663)
      1511       1511       1511                    MAT_VIEW ACCESS BY INDEX ROWID NEX_MVW_AGG_SALES_L26WK (cr=131 pr=0 pw=0 time=2186 us cost=1 size=320 card=10)
         0          0          0            PX RECEIVE  (cr=0 pr=0 pw=0 time=0 us cost=451 size=6885 card=153)
         0          0          0             PX SEND HASH :TQ10005 (cr=0 pr=0 pw=0 time=0 us cost=451 size=6885 card=153)
         0          0          0              VIEW  (cr=0 pr=0 pw=0 time=0 us cost=451 size=6885 card=153)
         0          0          0               HASH GROUP BY (cr=0 pr=0 pw=0 time=0 us cost=451 size=3978 card=153)
         0          0          0                PX RECEIVE  (cr=0 pr=0 pw=0 time=0 us cost=450 size=15912 card=612)
         0          0          0                 PX SEND HASH :TQ10004 (cr=0 pr=0 pw=0 time=0 us cost=450 size=15912 card=612)
         0          0          0                  NESTED LOOPS OUTER (cr=0 pr=0 pw=0 time=0 us cost=450 size=15912 card=612)
         0          0          0                   BUFFER SORT (cr=0 pr=0 pw=0 time=0 us)
         0          0          0                    PX RECEIVE  (cr=0 pr=0 pw=0 time=0 us)
         0          0          0                     PX SEND ROUND-ROBIN :TQ10000 (cr=0 pr=0 pw=0 time=0 us)
       576        576        576                      VIEW  (cr=6 pr=1 pw=0 time=1041 us cost=10 size=6120 card=612)
       576        576        576                       MERGE JOIN CARTESIAN (cr=6 pr=1 pw=0 time=808 us cost=10 size=15912 card=612)
        32         32         32                        VIEW  (cr=2 pr=0 pw=0 time=108 us cost=2 size=52 card=4)
        32         32         32                         TABLE ACCESS FULL SYS_TEMP_0FD9D662E_ACCAE0 (cr=2 pr=0 pw=0 time=107 us cost=2 size=16 card=4)
       576        576        576                        BUFFER SORT (cr=4 pr=1 pw=0 time=789 us cost=10 size=1989 card=153)
        18         18         18                         VIEW  (cr=4 pr=1 pw=0 time=626 us cost=2 size=1989 card=153)
        18         18         18                          TABLE ACCESS FULL SYS_TEMP_0FD9D6631_ACCAE0 (cr=4 pr=1 pw=0 time=625 us cost=2 size=918 card=153)
         0          0          0                   MAT_VIEW ACCESS BY INDEX ROWID NEX_MVW_STORE_ITEM_INFO (cr=0 pr=0 pw=0 time=0 us cost=2 size=16 card=1)
         0          0          0                    INDEX RANGE SCAN NEX_MVW_STORE_ITEM_INFO_I2 (cr=0 pr=0 pw=0 time=0 us cost=0 size=0 card=10)(object id 104679)

Connor McDonald
October 17, 2017 - 3:11 am UTC

Two scenarios are potentially in play here

1) the LOAD AS SELECT is trying to dump a SQL in your WITH clause to temporary storage (which consume temp space).

2) a work operation (sort, hash join etc) is consuming too much temporary space.

Looking at the stats above, I'd suspect it is (2) in particular, the 350million rows coming out of the hash join.

Bottom line - you need more temp space (or you need to look at what you are trying to achieve with the query)

Limited use of WITH in UPDATE?

Stew, December 08, 2017 - 8:01 pm UTC

Thanks for your answer about using the WITH clause in an UPDATE statement, but it seems the implementation is pretty limited, no?

I want to do something like the dummy code below, where I can re-use the WITH cause in both the SET and WHERE clauses. I was hoping for the performance benefit you sometimes get when you use the WITH clause multiple times.

But Oracle 12c won't seem to let me do that (at least with the syntax I tried). I tried to identify the WITH up front, so I can use it both places, but Oracle complains:

ORA-00928: missing SELECT keyword

In this fictitious example, let's say my hardware store's database keeps the order date on the order detail lines, as well as in the order header. (Yes, bad data model, but it's not real so extra CPU cycles were consumed.)

Now if the header record's order date gets changed, they want me to update the order date in the details to match. If I don't use the WITH clause, I'm looking at the order header record twice for each order item/detail record.

WITH new_header AS (SELECT oh.order_number, 
                           oh.order_date
                      FROM order_header)
UPDATE order_items
   SET order_items.order_date = (SELECT new_header.order_date
                                   FROM new_header
                                  WHERE new_header.order_number = order_items.order_number)
 WHERE order_items.order_date <> (SELECT new_header.order_date
                                    FROM new_header
                                   WHERE new_header.order_number = order_items.order_number)


Do you have any suggestions for a different syntax?

Thanks in Advance
Connor McDonald
December 13, 2017 - 2:00 am UTC

merge into order_items o
using (SELECT oh.order_number, 
                           oh.order_date
                      FROM order_header) n
on ( o.order_date = n.order_date )
when matched then ...


More to Explore

Hints

Need more information on hints? Check out the complete hint descriptions