Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
![]() |
![]() |
Home -> Community -> Mailing Lists -> Oracle-L -> HELP!!! ---- MViews...
Ok... I'm trying to build an MView that will fast refresh (on commit would
be nice but it's not required). Looking at the Oracle documentation, it
seems this should be ok, but I keep getting this error:
ORA-12015: cannot create a fast refresh materialized view from a complex query
This is in 9.2.0.4
I have MView logs created on each table with ROWID and the non pk coumn names listed as well as including new values as seen in this example:
create materialized view log on bag_tag_flt_leg with rowid, ( dep_rte_type_cd, scan_on_ind, flt_leg_actv_ind) including new values ;
It's got a UNION ALL in it, but I beleive that this is supported (at least the doc's say so). I've also added counts for each aggregate expression. I've run this through dbms_mview.explain_mview and I get no usable results.
Tis is the statement I'm trying to get to fast refresh, anyone see anything that seems out of place?
create materialized view mv_test_rf
build immediate
refresh fast
-- on commit
as
SELECT BAG_TAG_FLT_LEG.flt_leg_lcl_dep_dt AS summ_dt, BAG_TAG_FLT_LEG.orig_arpt_cd AS arpt_iata_cd, BAG_TAG_FLT_LEG.carr_iata_cd, 'D' AS ind, BAG_TAG_FLT_LEG.dep_rte_type_cd AS rte_type_cd, COUNT(*) AS bag_tag_tot_cnt, SUM(BAG_TAG_FLT_LEG.scan_on_ind) AS bag_tag_scan_ind_cnt, COUNT(BAG_TAG_FLT_LEG.scan_on_ind) as count_one FROM BAG_TAG_FLT_LEG, OPS_FLT_LEG WHERE
-- Join OPS_FLT_LEG and BAG_TAG_FLT_LEG tables
OPS_FLT_LEG.flt_nbr = BAG_TAG_FLT_LEG.flt_nbr AND OPS_FLT_LEG.carr_iata_cd = BAG_TAG_FLT_LEG.carr_iata_cd AND OPS_FLT_LEG.flt_lcl_orig_dt = BAG_TAG_FLT_LEG.flt_lcl_orig_dt AND OPS_FLT_LEG.orig_arpt_cd = BAG_TAG_FLT_LEG.orig_arpt_cd AND
-- Select active flight legs scheduled to depart yesterday and
today
-- and actually departing since 23:00 2 days ago
BAG_TAG_FLT_LEG.flt_leg_lcl_dep_dt BETWEEN TRUNC(SYSDATE - 1) AND TRUNC(SYSDATE) AND BAG_TAG_FLT_LEG.flt_leg_actv_ind = '1' AND OPS_FLT_LEG.lcl_out_dtm >= TRUNC(SYSDATE - 1) - 1/24 AND OPS_FLT_LEG.active_ind = 1 GROUP BY BAG_TAG_FLT_LEG.flt_leg_lcl_dep_dt, BAG_TAG_FLT_LEG.orig_arpt_cd, BAG_TAG_FLT_LEG.carr_iata_cd, 'D', BAG_TAG_FLT_LEG.dep_rte_type_cd UNION ALL SELECT TRUNC(SCHED_FLT_LEG.lcl_arr_dtm) AS summ_dt, BAG_TAG_FLT_LEG.dest_arpt_cd AS arpt_iata_cd, BAG_TAG_FLT_LEG.carr_iata_cd, 'A' AS ind, BAG_TAG_FLT_LEG.arr_rte_type_cd AS rte_type_cd, COUNT(*) AS bag_tag_tot_cnt, SUM(BAG_TAG_FLT_LEG.scan_off_ind) AS bag_tag_scan_ind_cnt, COUNT(bag_tag_flt_leg.scan_off_ind) as count_two FROM SCHED_FLT_LEG, BAG_TAG_FLT_LEG, OPS_FLT_LEG WHERE
-- Join SCHED_FLT_LEG and BAG_TAG_FLT_LEG tables
SCHED_FLT_LEG.flt_nbr = BAG_TAG_FLT_LEG.flt_nbr AND SCHED_FLT_LEG.carr_iata_cd = BAG_TAG_FLT_LEG.carr_iata_cd AND SCHED_FLT_LEG.flt_lcl_orig_dt = BAG_TAG_FLT_LEG.flt_lcl_orig_dt AND SCHED_FLT_LEG.orig_arpt_cd = BAG_TAG_FLT_LEG.orig_arpt_cd AND SCHED_FLT_LEG.dest_arpt_cd = BAG_TAG_FLT_LEG.dest_arpt_cd AND
-- Join OPS_FLT_LEG and SCHED_FLT_LEG tables
OPS_FLT_LEG.flt_nbr = SCHED_FLT_LEG.flt_nbr AND OPS_FLT_LEG.carr_iata_cd = SCHED_FLT_LEG.carr_iata_cd AND OPS_FLT_LEG.flt_lcl_orig_dt = SCHED_FLT_LEG.flt_lcl_orig_dt AND OPS_FLT_LEG.dest_arpt_cd = SCHED_FLT_LEG.dest_arpt_cd AND
-- Select active flight legs scheduled to arrive yesterday and
today
-- and actually arriving since 21:00 2 days ago
SCHED_FLT_LEG.lcl_arr_dtm BETWEEN TRUNC(SYSDATE - 1) AND TRUNC(SYSDATE + 1) AND BAG_TAG_FLT_LEG.flt_leg_actv_ind = '1' AND OPS_FLT_LEG.lcl_in_dtm >= TRUNC(SYSDATE - 1) - 3/24 AND OPS_FLT_LEG.active_ind = 1 GROUP BY TRUNC(SCHED_FLT_LEG.lcl_arr_dtm), BAG_TAG_FLT_LEG.dest_arpt_cd, BAG_TAG_FLT_LEG.carr_iata_cd, 'A', BAG_TAG_FLT_LEG.arr_rte_type_cd
Robert
-- Archives are at http://www.freelists.org/archives/oracle-l/ FAQ is at http://www.freelists.org/help/fom-serve/cache/1.html -----------------------------------------------------------------Received on Wed Jul 14 2004 - 12:15:08 CDT
![]() |
![]() |