
|
How to get NVLs in fast refresh UNION ALL mat views
- From: "Jesse, Rich" <Rich.Jesse@xxxxxxxxxxxxxxxxx>
- To: "ORACLE-L (E-mail)" <oracle-l@xxxxxxxxxxxxx>
- Date: Wed, 1 Sep 2004 11:36:26 -0500
Hey all,
I'm trying to utilize fast refresh materialized views in 9.2.0.5.0 in =
order to prevent yet another senseless weekly/daily/hourly query table =
rebuild. Following the rules for fast refresh UNION ALL MVs, I've got =
something that looks like this:
SELECT
'1' "MV_MARKER",
partno,
SUM(CASE WHEN fy_quarter IN ('01','02','03') THEN qty ELSE 0 END) "Q1",
COUNT(CASE WHEN fy_quarter IN ('01','02','03') THEN qty ELSE 0 END) =
"Q1_COUNT",
SUM(CASE WHEN fy_quarter IN ('04','05','06') THEN qty ELSE 0 END) "Q2",
COUNT(CASE WHEN fy_quarter IN ('04','05','06') THEN qty ELSE 0 END) =
"Q2_COUNT",
COUNT(*) "MV_COUNT"
FROM myschema.inv_history
WHERE
warehouse =3D 'AB'
GROUP BY
partno
UNION ALL
SELECT
'2' "MV_MARKER",
partno,
SUM(CASE WHEN fy_quarter IN ('01','02','03') THEN qty ELSE 0 END) "Q1",
COUNT(CASE WHEN fy_quarter IN ('01','02','03') THEN qty ELSE 0 END) =
"Q1_COUNT",
SUM(CASE WHEN fy_quarter IN ('04','05','06') THEN qty ELSE 0 END) "Q2",
COUNT(CASE WHEN fy_quarter IN ('04','05','06') THEN qty ELSE 0 END) =
"Q2_COUNT",
COUNT(*) "MV_COUNT"
FROM myschema.so_history
WHERE
warehouse =3D 'BA'
GROUP BY
partno
While it works great, I think it's technically inaccurate. I would =
prefer changing all the "ELSE 0 END"s to "ELSE NULL END"s. This doesn't =
appear to affect the aggregates, but the counts are now accurate. =
Previously, the three COUNT buckets for each row held the same value. =
With the "ELSE NULL", each COUNT now reflects the actual count of the =
bucket it represents.
The problem is the resulting NULLs in the table. This seems like it =
could cause some problems for the end user (possibly thru ad-hoc query =
tools). And, since the docs don't seem to mention, I'm guessing that =
the COUNTs are used to determine MV refreshes. If these COUNTs are =
high, does that adversely affect the refresh performance?
To try and get around this problem, I wrapped each SUM and COUNT with an =
NVL. Of course, this now breaks the requirements of a fast refresh and =
ends up with a ORA-12015 (can't create fast refresh w/complex query).
I had thought about a view to the MV with NVLs, but I'd much rather fix =
the issue than hide it. Or am I just overly worried about the NULLs and =
this isn't a problem at all? Anyone?
TIA!
Rich
----------------------------------------------------------------
Please see the official ORACLE-L FAQ: http://www.orafaq.com
----------------------------------------------------------------
To unsubscribe send email to: oracle-l-request@xxxxxxxxxxxxx
put 'unsubscribe' in the subject line.
--
Archives are at http://www.freelists.org/archives/oracle-l/
FAQ is at http://www.freelists.org/help/fom-serve/cache/1.html
-----------------------------------------------------------------
Other related posts:How to get NVLs in fast refresh UNION ALL mat views
|

|

|
[ Home |
Signup |
Help |
Login |
Archives |
Lists
]
All trademarks and copyrights within the FreeLists archives are owned
by their respective owners. Everything else ©2008 Avenir Technologies, LLC.
|

|
|