Help regarding query rewrite
Hi,
I have created a view for the employee table and i am trying to fetch the list of employees who are not managers.
Below is the query which i was trying to use.
select emp_id from v_emp where emp_id not in (select distinct mgr_id from v_emp);
but this query is not returning any results. also I tried
select emp_id from v_emp where emp_id not in (select mgr_id from v_emp);
This query also does not return any values. So i tried writing the query using not exists which seems to be working fine.
select emp_id from v_emp a where not exists(select 1 from v_emp b where b.mgr_id=a.emp_id);
This seems to be working. It seems to be problem when the oracle is doing the query_rewrite. because when i tried to change the execution plan by giving a condition inside it seems to be working fine.
select emp_id from v_emp where emp_id not in(select mgr_id from v_emp where rownum>0)
this seems to be working fine.
Could you please let me know what exactly will be creating this issue, I tried for to check whether any duplicate exists in the view(Ideally it should not be). But could not find any thing.
Thanks, mgr_id is not null for any employees, but I got the value when i gave the condition rownum>1 it is working fine. Could it be the problem with index or some duplication in base table for view.
Edited by: user575682 on Oct 5, 2009 12:34 PM
Similar Messages
-
Help with query rewrite and materialized views
Hello everybody,
I'm currently learning how to use Oracle (10G Enterprise) and in particular, Materialized Views.
I seem to have a problem making the optimizer use a materialized view. I have already set the OPTIMIZER_MODE, QUERY_REWRITE_ENABLED and QUERY_REWRITE_INTEGRITY as needed.
I need to create a materialized view for the following query:
Q1:
SELECT PS_SUPPKEY, PS_PARTKEY, PS_SUPPCOST
FROM PARTSUPPLIER E, PART WHERE PS_PARTKEY=P_PARTKEY and (lower(P_COMMENT) LIKE ''_o_a\%'' or lower(P_COMMENT) LIKE ''_o_u\%'')
and PS_SUPPCOST =
(SELECT min( PS_SUPPCOST)
FROM PARTSUPPLIER I
WHERE E.PS_PARTKEY=I.PS_PARTKEY)'
I created it using the following code:
CREATE MATERIALIZED VIEW mv_q1
ENABLE QUERY REWRITE
AS SELECT PS_SUPPKEY, PS_PARTKEY, PS_SUPPCOST
FROM PARTSUPPLIER E JOIN PART ON (PS_PARTKEY=P_PARTKEY)
WHERE lower(P_COMMENT) LIKE '_o_a%' or lower(P_COMMENT) LIKE '_o_u%'
and PS_SUPPCOST=
(SELECT min( PS_SUPPCOST)
FROM PARTSUPPLIER I
WHERE E.PS_PARTKEY=I.PS_PARTKEY);
I have created the statistics using:
execute dbms_stats.gather_table_stats('frandres',' mv_q1');
execute dbms_stats.gather_table_stats('frandres','PARTSUPPLIER');
execute dbms_stats.gather_table_stats('frandres','PART');
Both partsupplier and part are tables and not views.
When executing Q1, the plan does not use the materialized view. Furthermore, when using explain rewrite:
DECLARE
qrytxt VARCHAR2(3000) := 'SELECT PS_SUPPKEY, PS_PARTKEY, PS_SUPPCOST
FROM PARTSUPPLIER E, PART WHERE PS_PARTKEY=P_PARTKEY and (lower(P_COMMENT) LIKE ''_o_a\%'' or lower(P_COMMENT) LIKE ''_o_u\%'')
and PS_SUPPCOST =
(SELECT min( PS_SUPPCOST)
FROM PARTSUPPLIER I
WHERE E.PS_PARTKEY=I.PS_PARTKEY)';
BEGIN
dbms_mview.EXPLAIN_REWRITE
(qrytxt,'MV_Q1','MV_Q1');
END;
I get the following message:
MESSAGE
QSM-01150: query did not rewrite
QSM-01263: query rewrite not possible when query references a dictionary table o
r view
QSM-01219: no suitable materialized view found to rewrite this query
What I can't understand is why it says I am referencing the dictionary or a view?
If I remove the (lower(P_COMMENT) LIKE ''_o_a\%'' or lower(P_COMMENT) LIKE ''_o_u\%'') condition to the query (using the same materialized view), I get the following message from EXPLAIN_REWRITE:
MESSAGE
QSM-01150: query did not rewrite
QSM-01219: no suitable materialized view found to rewrite this query
Which is reasonable.
I don't know if the like condition is messing up my materialized view. Can anyone please help?
Thanks a lot in advance.
Edited by: user12072111 on Oct 29, 2009 9:43 PMBingo!
The 10.2.0.3 patch set is supposed to fix this ( [List of bugs fixed (MVs)|http://www.dbatools.net/doc/bug10203.html#MVIEW] )
In particular:
5052568 Query rewrite does not work for SQL with LIKE clause.
Thank you very much for your message!
The downside is that I'm only using Oracle for educational purposes and consequently have no Metalink id, so I can't install the patch. Thanks a lot though! -
Hi, I have following below query and showing more cost.
SELECT COUNT(1)
FROM CCTR_INQUIRIES CI, CCTR_CONTACTS CCC
WHERE INQUIRY_ID IN (SELECT DISTINCT CA.INQUIRY_ID
FROM CCTR_ACTIONS CA
WHERE CA.ACTION_ID IN
(SELECT MAX(CA2.ACTION_ID)
FROM CCTR_ACTIONS CA2
WHERE TRUNC(CA2.ACTION_START_DATE) = &PDATE
AND CA2.INQUIRY_ID = CA.INQUIRY_ID)
AND CA.STATUS <> 'Z')
AND CI.CONTACT_ID = CCC.CONTACT_ID
AND (TRUNC(SYSDATE) - TRUNC(CI.START_INQUIRY)) >= 60
AND CI.ID_TYPE = &PDEPARTMENT
AND GET_CSRUSER_QA(CI.CURRENT_QUEUE) = &PCSR_USERID
AND CI.CATEGORY_ID IN
(SELECT CODE_ID
FROM CC_USER_DEFINED_CODES
WHERE CODE_TYPE = 'RTCAT');Can you please help me out to rewrite the query.
Thanks in advacne..Thanks so much for reply..
I am sending the explian plan for the query:
Plan hash value: 2196234398
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
| 0 | SELECT STATEMENT | | 1 | 46 | 23 (9)| 00:00:01 |
| 1 | SORT AGGREGATE | | 1 | 46 | | |
| 2 | NESTED LOOPS SEMI | | 1 | 46 | 23 (9)| 00:00:01 |
| 3 | NESTED LOOPS | | 1 | 36 | 23 (9)| 00:00:01 |
| 4 | VIEW | VW_NSO_2 | 1 | 13 | 21 (5)| 00:00:01 |
| 5 | HASH UNIQUE | | 1 | 41 | | |
| 6 | NESTED LOOPS | | | | | |
| 7 | NESTED LOOPS | | 1 | 41 | 21 (5)| 00:00:01 |
| 8 | VIEW | VW_SQ_1 | 15 | 390 | 6 (17)| 00:00:01 |
| 9 | HASH GROUP BY | | 15 | 300 | 6 (17)| 00:00:01 |
| 10 | TABLE ACCESS BY INDEX ROWID| CCTR_ACTIONS | 15 | 300 | 5 (0)| 00:00:01 |
|* 11 | INDEX RANGE SCAN | CCTR_ACTIONS_IDX2 | 15 | | 3 (0)| 00:00:01 |
|* 12 | INDEX UNIQUE SCAN | CCTR_ACTIONS_PK | 1 | | 0 (0)| 00:00:01 |
|* 13 | TABLE ACCESS BY INDEX ROWID | CCTR_ACTIONS | 1 | 15 | 1 (0)| 00:00:01 |
|* 14 | TABLE ACCESS BY INDEX ROWID | CCTR_INQUIRIES | 1 | 23 | 1 (0)| 00:00:01 |
|* 15 | INDEX UNIQUE SCAN | CCTR_INQUIRIES_PK | 1 | | 0 (0)| 00:00:01 |
|* 16 | INDEX UNIQUE SCAN | CC_CUD_PK | 15 | 150 | 0 (0)| 00:00:01 |
Predicate Information (identified by operation id):
11 - access(TRUNC(INTERNAL_FUNCTION("ACTION_START_DATE"))=TO_DATE(' 2013-03-11 00:00:00',
'syyyy-mm-dd hh24:mi:ss'))
12 - access("CA"."ACTION_ID"="MAX(CA2.ACTION_ID)")
13 - filter("CA"."STATUS"<>'Z' AND "ITEM_1"="CA"."INQUIRY_ID")
14 - filter("CI"."ID_TYPE"='F' AND TRUNC(SYSDATE@!)-TRUNC(INTERNAL_FUNCTION("START_INQUIRY"))>=6
0 AND "BCBSM_SERVICING_REPORTS"."GET_CSRUSER_QA"("CI"."CURRENT_QUEUE")=12458)
15 - access("INQUIRY_ID"="INQUIRY_ID")
16 - access("CODE_ID"="CI"."CATEGORY_ID" AND "CODE_TYPE"='RTCAT') -
Help regarding Query Browser in Xcelsius
Till now I have been practicing dashboards using spreadsheet as Data Source. But here our consultants have used the BEx query as the data source, which I could n't practice as because i do not have login id and password which is required to "Add Query' in the Xcelsius. Please find the below attached image file and please help in making understand what exactly have they done using the 'Query Browser'.
Would be more thankful, if anyone can make me understand the Concepts of 'Result Objects', Filters and Prompts.
The Drill Down of the First Query i.e.HC_FTE_HC_A_Payscaletype
--Regards
RanendraHi Ranendra,
The only difference is till now u r working on offline data and with these Query Browser you have started working with live data.
Even though you get this live data you have to work on excel as u must dump the data to excelsheet.
Now we discuss the use of Query Browser:
Query browser is a new option we have in current version of Dashboard, we use this to connect
to
1) BeX queries through BICS connection
2) Unx universes which are created in IDT.
Your requirement falls under 1st category
There are few steps which you have to consider before going to result set designing, filters and prompts.
First we have to establish a connection which acts as an interface betwen your BeX query and dashboard and we do that by creating a BICS connection in the IDT.
Just create a BICS connection and this should be exported to repositiry.
Only after this you can access the connection through Query Browser in dashboards.
Now coming to result sets, these are actually your Query. Here you drag the desired dimension objects and measure objects.
Filters: If you want restrict your data, then we use filter. Drag the object in the filter pane.
Prompt: If you want user to make the selection of the parameter then u declare a prompt.
For indetail information about the other properties please go through the Suman description.
Regards,
Anjani Kumar C.A. -
Urgent..help regarding query
can anyone tell me what this code does..
REPORT Z_SD_Q_03 MESSAGE-ID Z_SD.
PROGRAMA : Z_SD_Q_03
FECHA : 12-07-1999
AUTOR : MADASV
DESCRIPCION : Ejecutar query 03(SD)
VARIABLES
DATA: WERKS LIKE LIKP-WERKS,
NOMBRE_REPORT LIKE AQADEF-PGNAME.
RANGES
RANGES CENTRO FOR LIKP-WERKS.
CONSTANTS
CONSTANTS: QUERY LIKE AQADEF-QUNAME VALUE '03',
USERGROUP LIKE AQADEF-BGNAME VALUE 'SD'.
START-OF-SELECTION
START-OF-SELECTION.
Centro
GET PARAMETER ID 'WR1' FIELD WERKS.
CENTRO-LOW = WERKS.
CENTRO-SIGN = 'I'.
CENTRO-OPTION = 'EQ'.
APPEND CENTRO.
CALL FUNCTION 'RSAQ_EXIST_QUERY'
EXPORTING
WORKSPACE = ' '
USERGROUP = USERGROUP
QUERY = QUERY
IMPORTING
REPORTNAME = NOMBRE_REPORT
EXCEPTIONS
NO_USERGROUP = 1
NO_QUERY = 2
OTHERS = 3
IF SY-SUBRC <> 0.
MESSAGE E100 WITH QUERY SY-MANDT.
ELSE.
SUBMIT (NOMBRE_REPORT)
WITH OFICI IN CENTRO
WITH SP$00001-LOW = SY-DATUM
VIA SELECTION-SCREEN.
ENDIF.it's checking display authorization of plant WR1 for current user .
Reward if useful
Regards
ANUPAM -
dear all,
i am working with JDBC and Access database. I have a table name FilingTable and it has 6 column: title, mdate, tdate, place, content and person. the UI has a jdbtable where it shows all the data from the database. there are six textfield where i can give value seach for perticular row consisting this value. the quirement is : I may give a parameter, two parameter and may be six parameter the search will show the rows containing those value or closely similar to those value. I need help from you.
zakirHello,
Try SQL with the LIKE condition to perform your search and % as wildcards.
LIKE will however not find similar matches but only exact matches.
Hope this helps
Niklas -
I have 2 tables student and student_subject
TABLE: STUDENT
STUDENT_SEQ|ID
1|I1
2|I2
3|I3
4|I4TABLE: SUB_CLASS
SUB_CLASS|STUDENT_SEQ
SUB1|1
SUB2|1
SUB3|2
SUB1|3
SUB3|4I want to retreive only STUDENTS who have been enrolled to both SUB1 and SUB2.
Edited by: vamsikrishnagorantla on Dec 27, 2010 4:08 PMwith t1 as (
select 1 student_seq,'I1' id from dual union all
select 2,'I2' from dual union all
select 3,'I3' from dual union all
select 4,'I4' from dual
t2 as (
select 'SUB1' sub_class,1 student_seq from dual union all
select 'SUB2',1 from dual union all
select 'SUB3',2 from dual union all
select 'SUB1',3 from dual union all
select 'SUB3',4 from dual
select t1.student_seq,
id
from t1
where 2 = (
select count(distinct sub_class)
from t2
where sub_class in (
'SUB1',
'SUB2'
and t2.student_seq = t1.student_seq
STUDENT_SEQ ID
1 I1
SQL> SY. -
Hi i am new to SCN. I want a help regards SAP-PM . Where to post any query regards SAP PM
Please check this link SAP Portfolio and Project Management (SAP RPM, cProjects) and cFolders
Please check scn index to find relevant forum link.
SCN Site Index -
URgent: Help regarding SQL Query
Hi ,
I need help regarding an sql query.
Sample Data:
ITEM_TYPE ITEM_NUM UNIT_PRICE QUANTITY LINE_TOTAL
ITEM 1 5 10 50
ITEM 2 10 5 50
ITEM 1 5 5 25
ITEM 2 10 20
TAX 16.5
TAX -3.5I would like to display the data as
ITEM_TYPE ITEM_NUM UNIT_PRICE QUANTITY LINE_TOTAL
ITEM 1 5 15 145
2 10 5
2 10
TAX 13.0
Line_total = unit_price * QuantityThanks in Advance
G.Vamsi Krishna
Edited by: user10733211 on Aug 5, 2009 7:42 AM
Edited by: user10733211 on Aug 5, 2009 7:49 AM
Edited by: user10733211 on Aug 5, 2009 8:12 AM
Edited by: user10733211 on Aug 5, 2009 8:22 AM
Edited by: user10733211 on Aug 5, 2009 8:24 AMHi,
Try this, use some analytics:
SQL> with t as (
2 select 'item' item_type, 1 item_num, 5 unit_price, 10 quantity, 50 linetotal from dual union all
3 select 'item', 2, 10, 5, 50 from dual union all
4 select 'item', 1, 5, 5, 25 from dual union all
5 select 'item', null, 2, 10, 20 from dual union all
6 select 'tax', null, null, null, 16.5 from dual union all
7 select 'tax', null, null, null, -3.5 from dual
8 ) -- actual query starts here:
9 select item_type
10 , item_num
11 , unit_price
12 , sum_qty
13 , case when sum_lt = lag(sum_lt) over ( order by item_type, item_num )
14 then null
15 else sum_lt
16 end sum_lt
17 from ( select item_type
18 , item_num
19 , unit_price
20 , quantity
21 , sum(quantity) over ( partition by item_type, item_num ) sum_qty
22 , sum(linetotal) over ( partition by item_type ) sum_lt
23 , row_number() over ( partition by item_type, item_num order by item_type, item_num ) rn
24 from t
25 )
26 where rn=1;
ITEM ITEM_NUM UNIT_PRICE SUM_QTY SUM_LT
item 1 5 15 145
item 2 10 5
item 2 10
tax 13
4 rows selected.
edit
And please use the code tag, instead of clunging with concats.
Read:
http://forums.oracle.com/forums/help.jspa
Edited by: hoek on Aug 5, 2009 5:15 PM
edit2
Also nulls for item_type:
ops$xmt%OPVN> with t as (
2 select 'item' item_type, 1 item_num, 5 unit_price, 10 quantity, 50 linetotal from dual union all
3 select 'item', 2, 10, 5, 50 from dual union all
4 select 'item', 1, 5, 5, 25 from dual union all
5 select 'item', null, 2, 10, 20 from dual union all
6 select 'tax', null, null, null, 16.5 from dual union all
7 select 'tax', null, null, null, -3.5 from dual
8 ) -- actual query starts here:
9 select case when item_type = lag(item_type) over ( order by item_type, item_num )
10 then null
11 else sum_lt
12 end item_type
13 , item_num
14 , unit_price
15 , sum_qty
16 , case when sum_lt = lag(sum_lt) over ( order by item_type, item_num )
17 then null
18 else sum_lt
19 end sum_lt
20 from ( select item_type
21 , item_num
22 , unit_price
23 , quantity
24 , sum(quantity) over ( partition by item_type, item_num ) sum_qty
25 , sum(linetotal) over ( partition by item_type ) sum_lt
26 , row_number() over ( partition by item_type, item_num order by item_type, item_num ) rn
27 from t
28 )
29 where rn=1;
ITEM_TYPE ITEM_NUM UNIT_PRICE SUM_QTY SUM_LT
145 1 5 15 145
2 10 5
2 10
13 13
4 rows selected.If you really need a space instead of nulls, then simply replace the nulls by a space....
Edited by: hoek on Aug 5, 2009 5:18 PM -
XPath query rewrite and insertChildXML (10g2): Help?
Hi all,
I have a registered schema for a <log> document. The schema defines an element /log/logData and under that there, /log/logData/data having maxOccurs="unbounded". So the form of documents is
<log>
<logData>
<data>a</data>
<data>b</data>
<data>c</data>
</logData>
</log>
In the schema definition I have enabled "storeArrayAsVArray='true'". The <data> elements are stored in a nested table. Every type is stored object-relationally.
To an instance documen, I add <data> elements so:
UPDATE log SET object_value = insertChildXML(object_value, 'log/logData', 'data', '<data>foo</data>') WHERE existsNode ('/log[@uid="foo"]')
The call succeeds but the problem is that I need to make this call thousands of times. Initiallly the call might take 100 ms, but after a few hundred inserts inserting a single element takes over a second, and the time keeps increasing.
I believe at least part of the problem is that XPath query rewrites are not working for this call.
Following Chapter 6 of Oracle XML DB Developer's Guide, to debug the problem I have switched on
ALTER SESSION SET EVENTS '19021 trace name context forever, level 1';
and then every invocation causes:
ORA-19022: XML XPath functions are disabled
indicating that Oracle could not rewrite the query. Then I set
ALTER SESSION SET EVENTS '19027 TRACE NAME CONTEXT FOREVER, LEVEL 8192'
to obtain a trace file. Here is a portion of that trace:
*** 2005-10-30 16:54:44.984
*** ACTION NAME:() 2005-10-30 16:54:44.968
*** MODULE NAME:(SQL*Plus) 2005-10-30 16:54:44.968
*** SERVICE NAME:(SYS$USERS) 2005-10-30 16:54:44.968
*** SESSION ID:(137.38364) 2005-10-30 16:54:44.968
NO REWRITE
Reason ==> xseq:not optuop
NO REWRITE
Reason ==> xseq:not optuop
NO REWRITE
Reason ==> not SQLX operand
NO REWRITE
Reason ==> non sqlx expression input
NO REWRITE
Reason ==> non rewritable sqlx input
NO REWRITE
(the rest of the file repeats these lines)
I have no idea how to interpet that! Can anyone out there offer some insight/assistance?
Thanks if you can,
HughBelow is a complete example script. Cannot seem to get rewrite for even this simple case. By that I mean, executing both of the SELECT statements near the end yield the ORA-19022, and that executing the insertChildXML takes progressively longer to execute the more child elements there are.
Any pointers appreciated!
Hugh
set echo on
ALTER SESSION SET EVENTS '19021 trace name context forever, level 1';
ALTER SESSION SET EVENTS '19027 TRACE NAME CONTEXT FOREVER, LEVEL 8192';
exec dbms_xmlschema.deleteSchema('http://hughw.net/foo', dbms_xmlschema.DELETE_CASCADE_FORCE);
begin
dbms_xmlschema.registerSchema('http://hughw.net/foo', XMLType('<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="http://hughw.net/foo" xmlns="http://hughw.net/foo" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"
xmlns:xdb="http://xmlns.oracle.com/xdb" xdb:storeVarrayAsTable="true">
<xs:element name="root" xdb:defaultTable="ROOT" >
<xs:complexType xdb:SQLType="ROOT_T">
<xs:sequence>
<!-- could use out of line storage -->
<!-- commented out
<xs:element name="child" type="childType" minOccurs="0" maxOccurs="unbounded"
xdb:SQLName="CHILDREN"
xdb:SQLInline="false" xdb:defaultTable="CHILD"
/>
-->
<!-- use nested table -->
<xs:element name="child" type="childType" minOccurs="0" maxOccurs="unbounded"
xdb:SQLName="CHILDREN"
xdb:SQLCollType="CHILD_V"
/>
</xs:sequence>
<xs:attribute name="uid" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
<xs:complexType name="childType" xdb:SQLType="CHILD_T">
<xs:simpleContent>
<xs:extension base="xs:string"/>
</xs:simpleContent>
</xs:complexType>
</xs:schema>'));
end;
insert into root values( XMLType('<?xml version="1.0" encoding="UTF-8"?>
<root uid="1" xmlns="http://hughw.net/foo"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://hughw.net/foo http://hughw.net/foo">
<child>a</child>
<child>b</child>
<child>c</child>
</root>'));
CREATE INDEX ROOT_INDEX ON ROOT (extractValue(object_value,'/root/@uid'));
select insertChildXML(object_value, '/root', 'child', '<child>x</child>>') FROM root;
explain plan for select insertChildXML(object_value, '/root', 'child', '<child>x</child>>') FROM root;
SELECT PLAN_TABLE_OUTPUT FROM table(DBMS_XPLAN.display('plan_table', NULL, 'serial'));
select insertChildXML(object_value, '/root', 'child', '<child>x</child>>') FROM root
WHERE existsNode(object_value, '/root[@uid="1"]') = 1;
explain plan for select insertChildXML(object_value, '/root', 'child', '<child>x</child>>') FROM root
WHERE existsNode(object_value, '/root[@uid="1"]') = 1;
SELECT PLAN_TABLE_OUTPUT FROM table(DBMS_XPLAN.display('plan_table', NULL, 'serial')); -
Are Cube organized materialized view with Year to Date calculated measure eligible for Query Rewrite
Hi,
Will appreciate if someone can help me with a question regarding Cube organized MV (OLAP).
Does cube organized materialized view with calculated measures based on time series Year to date, inception to date eg.
SUM(FCT_POSITION.BASE_REALIZED_PNL) OVER (HIERARCHY DIM_CALENDAR.CALENDAR BETWEEN UNBOUNDED PRECEDING AND CURRENT MEMBER WITHIN ANCESTOR AT DIMENSION LEVEL DIM_CALENDAR."YEAR")
are eligible for query rewrites or these are considered advanced for query rewrite purposes.
I was hoping to find an example with YTD window function on physical fact dim tables with optimizer rewriting it to Cube Org. MV but not much success.
Thanks in advanceI dont think this is possible.
(My own reasoning)
Part of the reason query rewrite works for base measures only (not calc measures in olap like ytd would be) is due to the fact that the data is staged in olap but its lineage is understandable via the olap cube mappings. That dependency/source identification is lost when we build calculated measures in olap and i think its almost impossible for optimizer to understand the finer points relating to an olap calculation defined via olap calculation (olap dml or olap expression) and also match it with the equivalent calculation using relational sql expression. The difficulty may be because both the olap ytd as well as relational ytd defined via sum() over (partition by ... order by ...) have many non-standard variations of the same calculation/definition. E.g: You can choose to use or choose not to use the option relating to IGNORE NULLs within the sql analytic function. OLAP defn may use NASKIP or NASKIP2.
I tried to search for query rewrite solutions for Inventory stock based calculations (aggregation along time=last value along time) and see if olap cube with cube aggregation option set to "Last non-na hierarchical value" works as an alternative to relational calculation. My experience has been that its not possible. You can do it relationally or you can do it via olap but your application needs to be aware of each and make the appropriate backend sql/call. In such cases, you cannot make olap (aw/cubes/dimensions) appear magically behind the scenes to fulfill the query execution while appearing to work relationally.
HTH
Shankar -
Query rewrite don't work wor aggregate query but work for join query
Dear experts,
Let me know what's wrong for
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
I have two MATERIALIZED VIEW:
A) -- Only join
CREATE MATERIALIZED VIEW "SCOTT"."TST_MV"
ENABLE QUERY REWRITE AS
SELECT "T57410"."MEMBER_KEY" "MEMBER_KEY",
"T57410"."ANCESTOR_KEY" "ANCESTOR_KEY",
"T57410"."DISTANCE" "DISTANCE",
"T57410"."IS_LEAF" "IS_LEAF",
"T57460"."DEPARTMENTID" "DEPARTMENTID",
"T57460"."NAME" "NAME","T57460"."PARENT"
"PARENT","T57460"."SHORTNAME" "SHORTNAME",
"T57460"."SKIMOID" "SKIMOID"
FROM "BI_OIV_HIER" "T57410",
"BI_DEPARTMENTS" "T57460"
WHERE "T57410"."ANCESTOR_KEY"="T57460"."DEPARTMENTID";
B) -- Join with aggregation
CREATE MATERIALIZED VIEW "SCOTT"."TST_MV2"
("C41", "C42", "C43",
"C44", "C45", "C46",
"C47", "C48", "C49",
"C50", "C51", "C52",
"C53", "C54", "C55",
"C56", "C57", "C58",
"C59", "C60", "C61",
"INCIDENTTYPE")
ENABLE QUERY REWRITE
AS SELECT COUNT(T56454.TOTAL) AS c41,
T56840.CATEGORYID AS c42,
T56840.PARENT AS c43,
T56908.DOCSTATEID AS c44,
T56908.PARENT AS c45,
T56947.EXPIREDID AS c46,
T56947.PARENT AS c47,
T56986.ISSUESTATEID AS c48,
T56986.PARENT AS c49,
T57025.LOCATIONID AS c50,
T57025.PARENT AS c51,
T57064.NEWID AS c52,
T57064.PARENT AS c53,
T57103.PARENT AS c54,
T57103.RESOLUTIONID AS c55,
T57142.PARENT AS c56,
T57142.RESPONSIBLEID AS c57,
T57181.PARENT AS c58,
T57181.SOURCEID AS c59,
T57460.DEPARTMENTID AS c60,
T57460.PARENT AS c61,
T56454.INCIDENTTYPE
FROM BI_OIV_HIER T57410
BI_DEPARTMENTS T57460
BI_SOURCE_HIER T57176
SOURCE T57181
BI_RESPONSIBLE_HIER T57137
RESPONSIBLE T57142
BI_RESOLUTIONS_HIER T57098
RESOLUTIONS T57103
BI_NEW_HIER T57059
NEW T57064
BI_LOCATIONS_HIER T57020
LOCATIONS T57025
BI_ISSUESTATES_HIER T56981
ISSUESTATES T56986
BI_EXPIRED_HIER T56942
EXPIRED T56947
BI_DOCSTATES_HIER T56903
DOCSTATES T56908
BI_CATEGORY_HIER T56835
CATEGORY T56840
INCIDENTS T56454
WHERE ( T56454.RESOLUTION = T57098.MEMBER_KEY
AND T56454.CATEGORY = T56835.MEMBER_KEY
AND T56454.DOCSTATE = T56903.MEMBER_KEY
AND T56454.EXPIRED = T56942.MEMBER_KEY
AND T56454.ISSUESTATE = T56981.MEMBER_KEY
AND T56454.LOCATION = T57020.MEMBER_KEY
AND T56454.NEW = T57059.MEMBER_KEY
AND T56454.RESPONSIBLE = T57137.MEMBER_KEY
AND T56454.SOURCE = T57176.MEMBER_KEY
AND T56454.DEPARTMENTID = T57410.MEMBER_KEY
AND T56835.ANCESTOR_KEY = T56840.CATEGORYID
AND T56903.ANCESTOR_KEY = T56908.DOCSTATEID
AND T56942.ANCESTOR_KEY = T56947.EXPIREDID
AND T56981.ANCESTOR_KEY = T56986.ISSUESTATEID
AND T57020.ANCESTOR_KEY = T57025.LOCATIONID
AND T57059.ANCESTOR_KEY = T57064.NEWID
AND T57098.ANCESTOR_KEY = T57103.RESOLUTIONID
AND T57137.ANCESTOR_KEY = T57142.RESPONSIBLEID
AND T57176.ANCESTOR_KEY = T57181.SOURCEID
AND T57410.ANCESTOR_KEY = T57460.DEPARTMENTID
GROUP BY T56840.CATEGORYID,
T56840.PARENT,
T56908.DOCSTATEID,
T56908.PARENT,
T56947.EXPIREDID,
T56947.PARENT,
T56986.ISSUESTATEID,
T56986.PARENT,
T57025.LOCATIONID,
T57025.PARENT,
T57064.NEWID,
T57064.PARENT,
T57103.PARENT,
T57103.RESOLUTIONID,
T57142.PARENT,
T57142.RESPONSIBLEID,
T57181.PARENT,
T57181.SOURCEID,
T57460.DEPARTMENTID,
T57460.PARENT,
T56454.INCIDENTTYPE;
So, optimizer uses query rewrite in
select * from TST_MV
and don't use query rewrite in
select * from TST_MV2
within one session.
select * from TST_MV should be read as underlying select for TST_MV:
SELECT "T57410"."MEMBER_KEY" "MEMBER_KEY",
"T57410"."ANCESTOR_KEY" "ANCESTOR_KEY",
"T57410"."DISTANCE" "DISTANCE",
"T57410"."IS_LEAF" "IS_LEAF",
"T57460"."DEPARTMENTID" "DEPARTMENTID",
"T57460"."NAME" "NAME","T57460"."PARENT"
"PARENT","T57460"."SHORTNAME" "SHORTNAME",
"T57460"."SKIMOID" "SKIMOID"
FROM "BI_OIV_HIER" "T57410",
"BI_DEPARTMENTS" "T57460"
WHERE "T57410"."ANCESTOR_KEY"="T57460"."DEPARTMENTID";
So, select * from TST_MV2 should be read by similar way as underlying select to TST_MV2
DBMS_STATS.GATHER_TABLE_STAT is done for each table and MV.
Please help to investigate the issue.
Why TST_MV2 don't used for query rewrite ?
Kind regards.Hi Carlos
It looks like you have more than one question in your posting. Would I be right in saying that you have an issue with how long Discoverer takes when compared with SQL, and a second issue with regards to MVs not being used? I will add some comments on both. If one of these is not an issue please inform.
Issue 1:
Have you compared the explain plan from Discoverer with SQL? You may need to use a tool like TOAD to see it.
Also, is Discoverer doing anything complicated with the data after it comes back? By complicated I mean do you have a large number of Page Items and / or Group Sorted items? SQL wouldn't have this overhead you see.
Because SQL would create a table, have you tried creating a table in Discoverer and seeing how long it takes?
Finally, what version of the database are you using?
Issue 2:
Your initial statement was that query rewrite works with several MV but not with others, yet in the body of the report you only show explain plans that do use the MV. Could you therefore go into some more detail regarding this situation.
Best wishes
Michael -
No query rewriting in a star schema
Gentlemen,
I am facing a problem with query rewriting in a simple data warehouse star schema. I want to take advantage of the built-in roll up along dimensions of a star schema. Therefore, I created several DIMENSIONs and made sure that all foreign key/primary key relationships between fact and dimension tables are set up correctly. In addition, as many table attributes as possible are assigned the NOT NULL constraint, especially the ones that are used by the CHILD Of and ATTRIBUTE relationships.
I defined materialized views on the fact table and a couple of dimension tables to report on aggregated data. All the MVIEWs are enabled for query rewriting and I have the initialization parameter set correctly (QUERY_REWRITE_INTEGRITY is set to TRUSTED).
From my tests I learned that a query is rewritten correctly only of the corresponding MVIEW contains the fact table and one dimension table. This is true for every dimension I created. However, as soon as the MVIEW joins more than one dimension table to the fact table the rewriting mechanism fails. It appears that the roll-up (aggregation along the hierarchy) is only possible for one of the dimensions. If the original query suggests rolling-up more than one dimension (e.g., "summarize the key figures by year and product category" but the underlying dimension is based on month and product), the MVIEW is no longer rewritten at all.
Do you know this effect from your work experience? Is this a bug or have I made a mistake or forgotten to switch on a special feature?
Here are some technical data of our data warehouse: we are running an Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 on a Windows Server 2003, the size of the database is about 10 GB (excluding indexes), the star schema contains ten dimension tables each one with a simple or parallel hierarchies (e.g. a product dimension). The fact table and the MVIEWS are partitioned by month.
Any help is very welcome.
Regards,
JohnHi,
you may ask with DBMS_MVIEW why your query does not get rewritten:
Maybe you have to create a util table first with
SQL> @?/rdbms/admin/utlxrw.sql
Then you ask:
SQL> begin
DBMS_MVIEW.EXPLAIN_REWRITE('<your query without ; at the end>');
end;
The reason why it is not rewritten:
SQL> select message from rewrite_table order by sequence;
Kind regards
Uwe -
Need help with Query to determine Credit Memos and Invoices
Hi All
Thanks for all the help here.
I need a query to determine any credits or invoices issued within a given period.
OINV and ORIN with UNION ALL?
Please advise any help.
Thank you!Hi Daniel,
Please check below Query.
SELECT T0.[DocNum] as 'Invice No', T0.[DocDate] as 'Invoice Date', T0.[CardName] as 'Invoiced Customer', T3.[DocNum] as 'Credit Memo No', T3.[DocDate] as 'Credit Mamo Date', T3.[CardName] as 'Credit Memo Customer' FROM OINV T0 LEFT JOIN INV1 T1 ON T0.[DocEntry] = T1.[DocEntry] LEFT JOIN RIN1 T2 ON T2.[BaseEntry] = T1.[DocEntry] AND T2.[BaseLine] = T1.[LineNum] LEFT JOIN ORIN T3 ON T2.[DocEntry] = T3.[DocEntry] WHERE T0.[DocDate] >=[%3] AND T0.[DocDate] <=[%4]
Hope this helps
Regards::::
Atul Chakraborty -
Need Help to query Lync Database for User Information
Need Help to Query the lync database to retrieve below user information.
1. SIP Address of the registered user
2. Phone Number configured to the particular account.
3. IP Address
4. Last Logged in time.
I am trying to pull the above information from rtc database for all the registered users. Please let me know if this is possible and it would be great if you can throw some light on what tables to look for the data. Thank You.Hi,
For SIP address and Phone number you can check RTC database.
IP Address:
You can refer to the link below to query IP address:
http://h30499.www3.hp.com/t5/Business-Service-Management-BAC/Monitoring-Lync-with-the-User-Registrations-Viewer-Free-NMC-tool/ba-p/5961497#.UtOU43mIrwo
Note: Microsoft is providing this information as a convenience to you. The sites are not controlled by Microsoft. Microsoft cannot make any representations regarding the quality, safety, or suitability of any software or information found there.
Please make sure that you completely understand the risk before retrieving any suggestions from the above link.
Last Logged in time:
You can refer to the link below:
http://blogs.technet.com/b/dodeitte/archive/2011/05/11/how-to-get-the-last-time-a-user-registered-with-a-front-end.aspx
Best Regards,
Eason Huang
Eason Huang
TechNet Community Support
Maybe you are looking for
-
HP OfficeJet Pro 8620 Embedded Web Server
I'm trying to use the scan to email feature. I enter the ISP address get a page with my printer name. I get this after selecting scan; " You cannot use this function because it has been disabled. For more information, contact your network administra
-
Hi everyone My mother accidentally deleted an important photo from her Nokia 1680c-2. I have been searching on the internet and found several good file recovery software. Tomorrow I should acquire the relevant cable that connects to the USB port of
-
Accidental PS edit save to the Aperture Library / How to remove
In my haste I accidentally saved a ps edit to the aperture library instead of the desktop. Normally I wouldn't be concerned about it but it's meant to print to mural size and it's huge. I can see it in the save directory via PS but am otherwise unabl
-
Just imposible to download via page. Need to call to order, pay and subscribe the Creative Cloud for the $9.99/mth. I want to talk with a human. Do Adobe have a phone? The 800-585-0774 is always busy. My new email just for AdobePS is: [removed] My ce
-
BTCare or BTCouldNotCareLess?
Hello All I arranged a home move last year for a move in date of 20th Dec 2013. Still waiting for a working line to be installed in my new house which is only 50 metres from my old house. I, like many, have had an absolute nightmare of endless delays