Table transformation
Hi experts,
I stay before one problem.
In our production database we have table structures witch are fast for OLTP transaction but our analytics need diffrent structures.
We dont need DWH. It's bigger than we need. So i decided to create new schema ( or new small db ) where we do new tables with prefered structure to reporting.
But what do you think is the best solution:
a) when we need new data still up-to-date, what lets say ETL tools we can you for transformation?
b) when we will do refresh. Let's say each hour.
I am reading abou SQL Loader or DataPump but I am not sure what should I implement and use.
Maybe materialied view.
Thank you for you suggestions.
Regards,
Tom
Use Matrialized Views
Similar Messages
-
Table transform weird behaviour
Hi,
I am really fed up with the weird behaivour of table transform, i have used the same table comparsion transform in two sequential dataflows and the output is different.
Below are the details.
1. First data flow is inserting records into our target table.
2. Target table is used as comparison table in table transform of second dataflow, the target table itself behaves a my destination table also, my requirement is to only update the changed columns rather than all columns.
3. I have specified only the changed columns in the compare columns section, even though the my whole record being changed.
Table :
Primary key col1 col2 col3 col4
Dataflow 1 values : PK1,10,20,30,40
Dataflow 2 values : PK1, null,50,60,null
My output should look like this : PK1,10,50,60,40
Could you please guide me how can i achieve this.P1300941063 wrote:
> Table :
> Primary key col1 col2 col3 col4
>
> Dataflow 1 values : PK1,10,20,30,40
> Dataflow 2 values : PK1, null,50,60,null
>
> My output should look like this : PK1,10,50,60,40
>
> Could you please guide me how can i achieve this.
What I think you mean is that you want DS to figure out that an incoming NULL in COL1 and COL4 is not to be treated as "the new information" -- that you want to treat nulls in your incoming data as though the column didn't exist at all. I also assume that you don't know beforehand which incoming columns may hold nulls -- that, on any given job run, you may see incoming data like this:
PK1, null, 50, null, 80
PK1, 5, null, null, null
PK1, null, 40, 100, 90
In each case, you only want to apply the non-null values to the target -- you don't want to "null-out" anything in the target. Is that right?
If so, there are a number of approaches:
1) Don't use a Table Comparison transform at all. Instead, join your target table to your incoming source. Let's call the target table "TGT" and the source information "SRC". In a Query transform, your WHERE clause might look like this:
TGT.PK1 = SRC.PK1
and (
nvl(SRC.COL1,TGT.COL1) != nvl(TGT.COL1)
or nvl(SRC.COL2,TGT.COL2) != nvl(TGT.COL2)
or nvl(SRC.COL3,TGT.COL2) != nvl(TGT.COL3)
or nvl(SRC.COL4,TGT.COL2) != nvl(TGT.COL4)
Each column mapping looks like this, for, for instance, COL1:
ifthenelse(nvl(SRC.COL1,'') != TGT.COL1,SRC.COL1,TGT.COL1)
Then, just sent the records into a Map Operation transform, changing all of them from Normal to Update, and send them into your target table. (Might need to run them through a Data Transfer transform or do something else that forces the read to end before sending records into the tgt if you have problems using the same table as source & tgt in the same dataflow.)
2) You could also split the incoming records into four different queries, each holding the PK and just one attribute column:
Q1 = PK1, COL1
Q2 = PK1, COL2
Q3 = PK1, COL3
Q4 = PK1, COL4
Filter-out any records where the attribute column holds nulls, and then run them into four Table Comparison transforms; assume you can handle the rest.
3) Or, what amounts to the same thing (and would likely be faster, vs. #2), building on your original approach: downstream from the existing TC transform in which, presumably, you're using all four attribute columns as comparison columns, map the output into a Map Operation transform in which you map updates to normals, discarding everything else. (For inserts, use another Map Operation transform in which you map inserts to inserts and discard all else, and send the records in (if you already have a PK).) From the Map Operation transform for your updates, multiplex the output into four query transforms as in solution #2, shrinking the schemas down to only one attribute column, and filtering-out nulls (on that column). Map each to four more Map Operation transforms in which you change normals to inserts, and send 'em in.
Hope I've understood your problem correctly, and, if so, that this proves helpful.
Best wishes,
Jeff Prenevost
Data Services Practice Manager
itelligence -
How to handle error for a Db Table to Db table transform in ODI
Hi,
I have created two table in two different schema source and target, where there is a field for e.g.- place where the datatype is varchar2 and data inserted is string.
In designer model of ODI i have put the type of place as number in both source and target and accordingly done the mapping.
When it is executed it should give an error, but it got completed but no data is inserted neither in target table nor in error table in the target schema(E$_TARGET_TEST which is created automatically).
Why the error is not given and how to handle such type of error..
Please help.
The codes for source and target tables are as follows:
source table code:
CREATE TABLE "DEF"."SOURCE_TEST"
"EMP_ID" NUMBER(9,0),
"EMP_NAME" VARCHAR2(20 BYTE),
"SAL" NUMBER(9,0),
"PLACE" VARCHAR2(10 BYTE),
PRIMARY KEY ("EMP_ID") USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE "USERS" ENABLE
inserted data:
INSERT INTO "DEF"."SOURCE_TEST" (EMP_ID, EMP_NAME, SAL, PLACE) VALUES ('1', 'ani', '12000', 'kol')
INSERT INTO "DEF"."SOURCE_TEST" (EMP_ID, EMP_NAME, SAL, PLACE) VALUES ('2', 'priya', '15000', 'jad')
target table code:
CREATE TABLE "ABC"."TARGET_TEST"
"EMP_ID" NUMBER(9,0),
"EMP_NAME" VARCHAR2(20 BYTE),
"YEARLY_SAL" NUMBER(9,0),
"BONUS" NUMBER(9,0),
"PLACE" VARCHAR2(10 BYTE),
PRIMARY KEY ("EMP_ID") USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE "USERS" ENABLEHi,
I have used the following KMs in my transformation with the following options:
IKM SQL Incremental Update
INSERT <Default>:true
UPDATE <Default>:true
COMMIT <Default>:true
SYNC_JRN_DELETE <Default>:true
FLOW_CONTROL <Default>:true
RECYCLE_ERRORS <Default>:false
STATIC_CONTROL <Default>:false
TRUNCATE <Default>:false
DELETE_ALL <Default>:false
CREATE_TARG_TABLE <Default>:false
DELETE_TEMPORARY_OBJECTS <Default>:true
LKM SQL to SQL
DELETE_TEMPORARY_OBJECTS <Default>:true
CKM Oracle
DROP_ERROR_TABLE <Default>:false
DROP_CHECK_TABLE <Default>:false
CREATE_ERROR_INDEX <Default>:true
COMPATIBLE <Default>:9
VALIDATE <Default>:false
ENABLE_EDITION_SUPPORT <Default>:false
UPGRADE_ERROR_TABLE true -
Table transformation from two different database
Hi all,
I am trying to load table from one database table to another database table in ODI 10g.I have created two physical and logical topology.
But when in interface design i have drag the source and target tables in the diagram window, but here it doesnot shows the auto mapping options, when i try it manually by dragging a field, i have failed. when i execute the operation the following error occured:
create or replace view db1."C$_0 W_INT_ORG_D"
as select
from db1.W_INT_ORG_DS W_INT_ORG_DS
where (1=1)
here both the source and target db are same..
How can i resolve itHi,
Thanks it worked.
I am getting another error on Insert flow into I$ table step.
I am connecting two database from two different hosts, both are in oracle.
I have two logical schema prepared for both database.
should i have to mentioned these schema in one physical topology? what should be placed in schema and work schema option.
I have used LKM Oracle to Oracle(DBLINK) as KM.
Please help
Best regards,
manish -
Error in xml to abap internal table transformation using xslt_tool
Hi friends,
When i am trying to convert xml data into internal table it is going to dump because of empty elements. Can any body help to delete the empty tags from xml before processing through xslt_tool.
example
<Activity>
<ID>add12095</ID>
<Start>09/01/2014 12:01</Start>
<Type>3</Type>
<Code>99202</Code>
<Quantity>1</Quantity>
<Net>244</Net>
<Clinician>GD16130</Clinician>
<PriorAuthorizationID/> "empty tag
<Gross>294</Gross>
<PatientShare>50</PatientShare>
<PaymentAmount>244</PaymentAmount>
</Activity>
the empty element some times will come in the xml and some times not. so i made a check in xslt. when this empty element tag processed through that condition i am getting the dump. either i need to remove the condition or we should delete the empty tags before processing. Removing of if condition is not possible because that element may or may not come all the time.
Regards,
Rajesh.You can replace all empty tags using regular expression.
REPLACE ALL OCCURRENCES OF REGEX '<\w+/>' IN lv_xml WITH ''. -
Temp start transformation using "with"clause
I'm experiencing a very strange problem. I wrote the SQL below and when I execute through toad and sqlplus, oracle makes the star transformation, but when I execute it through C, it doens't makes the transformation. Any help are welcome.
WITH a AS
(SELECT /*+ materialize use_hash(c,p,c3) */
c.parent_account_no, c.package_id, c3.siebel_instance_id
FROM cmf_package c, package_definition_values p,
cmf_packages_fat3c c3
WHERE c.inactive_dt IS NULL
AND c.package_inst_id = c3.package_instance_id
AND c.package_inst_id_serv = c3.package_instance_id_serv
AND c.package_id = p.package_id
AND p.short_display IS NULL)
SELECT /*+ leading(c ) push_subq use_hash(acr,pdv,cpcp3,ciam,c) */
'PACK_VOZ_DUP', cp.parent_account_no, ciam.external_id, c.bill_period,
cp3.siebel_instance_id, cp.package_id, acr.is_business,
TO_NUMBER (NULL), 1, c.bill_state, 'SI', acr.ROWID, pdv.ROWID,
cp.ROWID, cp3.ROWID, ciam.ROWID, c.ROWID
FROM account_category_ref acr,
package_definition_values pdv,
cmf_package cp,
cmf_packages_fat3c cp3,
customer_id_acct_map ciam,
cmf c
WHERE pdv.short_display IS NULL
AND pdv.package_id = cp.package_id
AND cp.inactive_dt IS NULL
AND cp.parent_account_no = c.account_no
AND c.account_category = acr.account_category
AND c.account_no = ciam.account_no
AND ciam.external_id_type = 14
AND ciam.is_current = 1
AND cp.package_inst_id = cp3.package_instance_id
AND cp.package_inst_id_serv = cp3.package_instance_id_serv
AND cp3.siebel_instance_id IS NOT NULL
AND EXISTS (
SELECT /*+ hash_sj */
1
FROM a c3
WHERE c3.parent_account_no = cp.parent_account_no
AND c3.package_id <> cp.package_id
AND c3.siebel_instance_id = cp3.siebel_instance_id)
explain from Toad
Plan
SELECT STATEMENT CHOOSECost: 199,074 Bytes: 188 Cardinality: 1
15 TEMP TABLE TRANSFORMATION
14 HASH JOIN SEMI Cost: 199,074 Bytes: 188 Cardinality: 1
11 HASH JOIN Cost: 191,234 Bytes: 111,173,166 Cardinality: 726,622
9 HASH JOIN Cost: 162,751 Bytes: 108,444,416 Cardinality: 847,222
7 HASH JOIN Cost: 159,088 Bytes: 217,362,656 Cardinality: 1,940,738
5 HASH JOIN Cost: 134,635 Bytes: 108,065,443 Cardinality: 1,367,917
3 HASH JOIN Cost: 121,145 Bytes: 127,501,647 Cardinality: 2,712,801
1 TABLE ACCESS FULL ARBOR.CMF Cost: 117,431 Bytes: 179,044,800 Cardinality: 5,425,600
2 TABLE ACCESS FULL ARBOR.ACCOUNT_CATEGORY_REF Cost: 4 Bytes: 518 Cardinality: 37
4 TABLE ACCESS FULL ARBOR.CUSTOMER_ID_ACCT_MAP Cost: 9,229 Bytes: 87,546,656 Cardinality: 2,735,833
6 TABLE ACCESS FULL ARBOR.CMF_PACKAGE Cost: 17,299 Bytes: 254,003,970 Cardinality: 7,697,090
8 TABLE ACCESS FULL ARBOR.PACKAGE_DEFINITION_VALUES Cost: 6 Bytes: 10,992 Cardinality: 687
10 TABLE ACCESS FULL TELEMAR.CMF_PACKAGES_FAT3C Cost: 17,248 Bytes: 419,471,250 Cardinality: 16,778,850
13 VIEW ARBOR. Cost: 3,638 Bytes: 116,664,100 Cardinality: 3,333,260
12 TABLE ACCESS FULL SYS.SYS_TEMP_0FD9D660C_D8362B9 Cost: 3,638 Bytes: 66,665,200 Cardinality: 3,333,260
explain from C
Plan
SELECT STATEMENT CHOOSECost: 631,186,428
19 FILTER
11 HASH JOIN Cost: 189,620 Bytes: 5,558,643 Cardinality: 36,331
9 HASH JOIN Cost: 189,425 Bytes: 11,401,688 Cardinality: 83,224
7 HASH JOIN Cost: 159,088 Bytes: 217,362,656 Cardinality: 1,940,738
5 HASH JOIN Cost: 134,635 Bytes: 108,065,443 Cardinality: 1,367,917
3 HASH JOIN Cost: 121,145 Bytes: 127,501,647 Cardinality: 2,712,801
1 TABLE ACCESS FULL ARBOR.CMF Cost: 117,431 Bytes: 179,044,800 Cardinality: 5,425,600
2 TABLE ACCESS FULL ARBOR.ACCOUNT_CATEGORY_REF Cost: 4 Bytes: 518 Cardinality: 37
4 TABLE ACCESS FULL ARBOR.CUSTOMER_ID_ACCT_MAP Cost: 9,229 Bytes: 87,546,656 Cardinality: 2,735,833
6 TABLE ACCESS FULL ARBOR.CMF_PACKAGE Cost: 17,299 Bytes: 254,003,970 Cardinality: 7,697,090
8 TABLE ACCESS FULL TELEMAR.CMF_PACKAGES_FAT3C Cost: 17,248 Bytes: 419,471,250 Cardinality: 16,778,850
10 TABLE ACCESS FULL ARBOR.PACKAGE_DEFINITION_VALUES Cost: 6 Bytes: 10,992 Cardinality: 687
18 HASH JOIN Cost: 17,368 Bytes: 53 Cardinality: 1
13 TABLE ACCESS BY INDEX ROWID ARBOR.CMF_PACKAGE Cost: 5 Bytes: 312 Cardinality: 12
12 INDEX RANGE SCAN ARBOR.CMF_PACKAGE_XCP_ACCOUNT_NO_KEY Cost: 3 Cardinality: 1
17 MERGE JOIN CARTESIAN Cost: 17,362 Bytes: 345,222 Cardinality: 12,786
14 TABLE ACCESS FULL TELEMAR.CMF_PACKAGES_FAT3C Cost: 17,248 Bytes: 342 Cardinality: 19
16 BUFFER SORT Cost: 114 Bytes: 6,183 Cardinality: 687
15 TABLE ACCESS FULL ARBOR.PACKAGE_DEFINITION_VALUES Cost: 6 Bytes: 6,183 Cardinality: 687
Thanks in advanced.fbucco wrote:
I'm experiencing a very strange problem. I wrote the SQL below and when I execute through toad and sqlplus, oracle makes the star transformation, but when I execute it through C, it doens't makes the transformation. Any help are welcome.
Neither plan shows a "star" transformation - did you mean "temp table" transformation ?
It looks as if your C wrapper has taken out your materialize hint (among others).
Which version of Oracle are you using, by the way ? Is it the same in all cases, and is the client the same version as the server in all cases.
Regards
Jonathan Lewis
http://jonathanlewis.wordpress.com
http://www.jlcomp.demon.co.uk
To post code, statspack/AWR report, execution plans or trace files, start and end the section with the tag {noformat}{noformat} (lowercase, curly brackets, no spaces) so that the text appears in fixed format.
"Science is more than a body of knowledge; it is a way of thinking"
Carl Sagan -
Error while export data from a xml file to an relational table
Hi,
I am Creating an ODI Project: Developing an ODI XML to Database Transformation Using Interface with ODI Constraint following this link
http://www.oracle.com/webfolder/technetwork/tutorials/obe/fmw/odi/odi_11g/odi_project_xml-to-table/odi_project_xml-to-table.htm
This project executed successfully with some warning.*Target Table is automatically created in database and also populated with data*.But when I right-click Target Datastore(in Mapping Tab of the Interface), and then select Data to View Data that needs to be inserted in the target table. I get some error like this:-
Execution of Query Failed.
Details:-
See com.borland.dx.dataset.DataSetException error code: BASE+62
com.borland.dx.dataset.DataSetException: Execution of query failed.
at com.borland.dx.dataset.DataSetException.a(Unknown Source)
at com.borland.dx.dataset.DataSetException.queryFailed(Unknown Source)
at com.borland.dx.sql.dataset.QueryProvider.a(Unknown Source)
at com.borland.dx.sql.dataset.JdbcProvider.provideData(Unknown Source)
at com.borland.dx.dataset.StorageDataSet.refresh(Unknown Source)
at com.borland.dx.sql.dataset.QueryDataSet.refresh(Unknown Source)
at com.sunopsis.graphical.frame.DwgDataFrame.initialize(DwgDataFrame.java:368)
at com.sunopsis.graphical.frame.DwgDataFrame.<init>(DwgDataFrame.java:77)
at oracle.odi.ui.etlmodeler.diag.inspector.pane.popup.DiagramActionDispayDataTarget.actionPerformed(DiagramActionDispayDataTarget.java:91)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.AbstractButton.doClick(AbstractButton.java:357)
at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:1223)
at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:1264)
at java.awt.Component.processMouseEvent(Component.java:6263)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:6028)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4630)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2478)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Chained exception:
java.sql.SQLSyntaxErrorException: ORA-00942: table or view does not exist
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:462)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:405)
at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:931)
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:481)
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:205)
at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:548)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:217)
at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:947)
at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1283)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1441)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3769)
at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3823)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1671)
at com.borland.dx.sql.dataset.o.f(Unknown Source)
at com.borland.dx.sql.dataset.QueryProvider.e(Unknown Source)
at com.borland.dx.sql.dataset.JdbcProvider.provideData(Unknown Source)
at com.borland.dx.dataset.StorageDataSet.refresh(Unknown Source)
at com.borland.dx.sql.dataset.QueryDataSet.refresh(Unknown Source)
at com.sunopsis.graphical.frame.DwgDataFrame.initialize(DwgDataFrame.java:368)
at com.sunopsis.graphical.frame.DwgDataFrame.<init>(DwgDataFrame.java:77)
at oracle.odi.ui.etlmodeler.diag.inspector.pane.popup.DiagramActionDispayDataTarget.actionPerformed(DiagramActionDispayDataTarget.java:91)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.AbstractButton.doClick(AbstractButton.java:357)
at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:1223)
at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:1264)
at java.awt.Component.processMouseEvent(Component.java:6263)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:6028)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4630)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2478)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Please HelpMichael R wrote:
The target table will be created when you execute the interface, if you set the option on the flow tab as instructed in step #6 of the "Setting up ODI Constraint on CLIENT Datastore" Section.
Option Value
CREATE_TARG_TABLE trueHi Michel,
This was not my required answer.I am sorry that I was unable to clarify my question.Actually
+This project executed successfully with some warning.Target Table is automatically created in database and also populated with data.But when I right-click Target Datastore(in >Mapping Tab of the Interface), and then select Data to View Data that needs to be inserted in the target table.I get some error like this:-...+This above line is the result of my project my problem is
when I right-click Target Datastore(in Mapping Tab of the Interface), and then select Data to View Data that already inserted in the target table.Is not shown by the view data operation.
I meant to say I am facing this error
At the10(1010 written) step of
Creating a New ODI Interface to Perform XML File to RDBMS Table Transformation
wehre it says
Open the Interface tab. Select Mapping tab, right-click Target Datastore - CLIENT, and then select Data. View Data inserted in the target table. Close Data Editor. Close the tabs...
In my case when I use my sqldeveloper I can see data successfully inserted in my target table and also in error table (data that can't satisfy the constraint) .But I was unable to check this by following the above mentioned 10 th step and got this error.
Thanks -
Why a table full scan when I've got the PK in the WHERE clause?
There is a very complex query that I need to optimize in an Oracle 10gR2 environment. I am deconstructing it into layers to see what is causing the first bottleneck. The innermost portion is fine, with an explain plan cost of 54. With a typical value for the bind variable, it returns 125 zero_id values. There are over 100,000 rows in table T_ONE in my test database, but my customer has over one million rows in their production instance.
WITH t_merged_id AS (SELECT DISTINCT zero_id FROM t_zero WHERE NVL(column2, zero_id) = :i_id)
SELECT t_one.one_id
FROM t_one
INNER JOIN t_two
ON t_one.column1 = t_two.two_id
INNER JOIN t_merged_id
ON t_two.column10 = t_merged_id.zero_id
UNION ALL
SELECT t_one.one_id
FROM t_one
INNER JOIN t_two
ON t_one.column2 = t_two.two_id
INNER JOIN t_merged_id
ON t_two.column10 = t_merged_id.zero_id
UNION ALL
SELECT t_one.one_id
FROM t_one
INNER JOIN t_three
ON t_one.column3 = t_three.three_id
INNER JOIN t_merged_id
ON t_three.column10 = t_merged_id.zero_id
UNION ALL
SELECT t_one.one_id
FROM t_one
INNER JOIN t_four
ON t_one.column4 = t_four.four_id
INNER JOIN t_two
ON t_four.column1 = t_two.two_id
INNER JOIN t_merged_id
ON t_two.two_id = t_merged_id.zero_id
UNION ALL
SELECT t_one.one_id
FROM t_one INNER JOIN t_merged_id ON t_one.column5 = t_merged_id.zero_id
UNION
SELECT t_one.one_id
FROM t_one INNER JOIN t_merged_id ON t_one.column6 = t_merged_id.zero_idHowever, the next step is to obtain a bunch of columns from T_ONE for each of those ONE_ID values. Adding that looks like the following, which causes a table full scan on T_ONE (and an explain plan cost over 1,500 for this query in my test system) and it takes far too long to return the results.
SELECT t_one.*
FROM t_one
INNER JOIN
(--This is the start of the query shown above
WITH t_merged_id AS (SELECT DISTINCT zero_id FROM t_zero WHERE NVL(column2, zero_id) = :i_id)
SELECT t_one.one_id
FROM t_one
INNER JOIN t_two
ON t_one.column1 = t_two.two_id
INNER JOIN t_merged_id
ON t_two.column10 = t_merged_id.zero_id
UNION ALL
SELECT t_one.one_id
FROM t_one
INNER JOIN t_two
ON t_one.column2 = t_two.two_id
INNER JOIN t_merged_id
ON t_two.column10 = t_merged_id.zero_id
UNION ALL
SELECT t_one.one_id
FROM t_one
INNER JOIN t_three
ON t_one.column3 = t_three.three_id
INNER JOIN t_merged_id
ON t_three.column10 = t_merged_id.zero_id
UNION ALL
SELECT t_one.one_id
FROM t_one
INNER JOIN t_four
ON t_one.column4 = t_four.four_id
INNER JOIN t_two
ON t_four.column1 = t_two.two_id
INNER JOIN t_merged_id
ON t_two.two_id = t_merged_id.zero_id
UNION ALL
SELECT t_one.one_id
FROM t_one INNER JOIN t_merged_id ON t_one.column5 = t_merged_id.zero_id
UNION
SELECT t_one.one_id
FROM t_one INNER JOIN t_merged_id ON t_one.column6 = t_merged_id.zero_id
--This is the end of the query shown above
) t_list
ON t_one.one_id = t_list.one_idMy question is, why wouldn’t Oracle use the existing index PK_T_ONE, which is keyed on T_ONE.ONE_ID? I tried refactoring the query using a “WHERE t_one.one_id IN” construct instead of the INNER JOIN but it didn’t make any difference. Neither did adding an index hint, which I hoped would force the use of the PK index.
Any ideas?I was able to completely resolve my problem, but I still want to understand why the original query wouldn't use an index.
(My solution was to move all the joins and where clauses from the query that wrapped the one we've been discussing and put them into each SELECT in the UNION, so there is no longer any inner subquery. So instead of trying to first get a list of ID values from the subquery, get the full records for the IDs from an outer query, and then joining to the outer query, I made SELECT in the UNION contain the full logic. This makes the query a lot more verbose, because all the joins and wheres are repeated six times, but it does use the index and returns in 0.04 seconds instead of over nine minutes in my test database.)
hoek wrote:
Values for optimizer_index_caching and optimizer_index_cost_adj are not the defaults. Any reasons for that?I am not a DBA and have no idea. However, I did a Google search and found this: http://decipherinfosys.wordpress.com/2007/02/13/optimizer_index_cost_adj-and-optimizer_index_caching/. Apparently Tom Kyte would approve more of our settings than the defaults.
hoek wrote:
Any chance to get a realistic dataset on your test server?Unfortunately, not for quite some time. The customer won't provide any real data, and generating data for testing is complex because of all the interrelationships. I have someone working on that. However, I was able to get back on the primary test server that has 136k records in the main table instead of only 2k. So far as I know, the Oracle configuration between the test server and the customer's server is the same. However, they have much more serious hardware that I do (more processors, more RAM, more platters). On the other hand, they have 10 times as much data.
hoek wrote:
Your second execution plan contains differents stats, they're not the 'common ones'. (E-rows etc.)The predicates are the same as the first. The 2nd plan was generated by the 10g-specific portion of Randolph's script using the command "select * from table(dbms_xplan.display_cursor(null, null, 'ALLSTATS LAST'));".
This is the result from running the script on the main test server:
NAME TYPE VALUE
_optimizer_cost_based_transformation string OFF
optimizer_dynamic_sampling integer 2
optimizer_features_enable string 10.2.0.4
optimizer_index_caching integer 95
optimizer_index_cost_adj integer 10
optimizer_mode string CHOOSE
optimizer_secure_view_merging boolean TRUE
db_file_multiblock_read_count integer 32
db_block_size integer 8192
cursor_sharing string FORCE
SNAME PNAME PVAL1 PVAL2
SYSSTATS_INFO STATUS COMPLETED
SYSSTATS_INFO DSTART 04-04-2008 07:02
SYSSTATS_INFO DSTOP 04-04-2008 07:02
SYSSTATS_INFO FLAGS 1
SYSSTATS_MAIN CPUSPEEDNW 646.57331
SYSSTATS_MAIN IOSEEKTIM 10
SYSSTATS_MAIN IOTFRSPEED 4096
SYSSTATS_MAIN SREADTIM
SYSSTATS_MAIN MREADTIM
SYSSTATS_MAIN CPUSPEED
SYSSTATS_MAIN MBRC
SYSSTATS_MAIN MAXTHR
SYSSTATS_MAIN SLAVETHR
SQL> SELECT st.*
2 FROM t_senttsk st INNER JOIN (WITH t_mrgdusr AS (SELECT DISTINCT usr_id
3 FROM t_usr
4 WHERE NVL(usr_mrgemstr, usr_id) = 10000002 /* i_payer_id */
5 )
6 SELECT t_senttsk.setk_id
7 FROM t_senttsk INNER JOIN t_mrgdusr
8 ON t_senttsk.setk_affn_memb = t_mrgdusr.usr_id
9 UNION
10 SELECT t_senttsk.setk_id
11 FROM t_senttsk INNER JOIN t_mrgdusr
12 ON t_senttsk.setk_ownr = t_mrgdusr.usr_id) t_affil
13 ON st.setk_id = t_affil.setk_id;
no rows selected
Elapsed: 00:13:14.54
Execution Plan
Plan hash value: 1241660758
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
| 0 | SELECT STATEMENT | | 169K| 64M| 1403 (3)| 00:00:17 |
| 1 | NESTED LOOPS | | 169K| 64M| 1403 (3)| 00:00:17 |
| 2 | TABLE ACCESS FULL | T_SENTTSK | 136K| 51M| 1400 (3)| 00:00:17 |
| 3 | VIEW | | 1 | 6 | 1 (0)| 00:00:01 |
| 4 | TEMP TABLE TRANSFORMATION | | | | | |
| 5 | LOAD AS SELECT | | | | | |
| 6 | TABLE ACCESS BY INDEX ROWID | T_USR | 1 | 8 | 1 (0)| 00:00:01 |
|* 7 | INDEX RANGE SCAN | IX_NVL_USR_MRGEMSTR_USR_ID | 1 | | 1 (0)| 00:00:01 |
| 8 | SORT UNIQUE | | | | | |
| 9 | UNION-ALL PARTITION | | | | | |
| 10 | NESTED LOOPS | | 1 | 25 | 3 (0)| 00:00:01 |
| 11 | TABLE ACCESS BY INDEX ROWID| T_SENTTSK | 1 | 12 | 1 (0)| 00:00:01 |
|* 12 | INDEX UNIQUE SCAN | PK_T_SENTTSK | 1 | | 1 (0)| 00:00:01 |
|* 13 | VIEW | | 1 | 13 | 2 (0)| 00:00:01 |
| 14 | TABLE ACCESS FULL | SYS_TEMP_0FD9D6608_399116CE | 1 | 6 | 2 (0)| 00:00:01 |
| 15 | NESTED LOOPS | | 1 | 22 | 3 (0)| 00:00:01 |
|* 16 | TABLE ACCESS BY INDEX ROWID| T_SENTTSK | 1 | 9 | 1 (0)| 00:00:01 |
|* 17 | INDEX UNIQUE SCAN | PK_T_SENTTSK | 1 | | 1 (0)| 00:00:01 |
|* 18 | VIEW | | 1 | 13 | 2 (0)| 00:00:01 |
| 19 | TABLE ACCESS FULL | SYS_TEMP_0FD9D6608_399116CE | 1 | 6 | 2 (0)| 00:00:01 |
Predicate Information (identified by operation id):
7 - access(NVL("USR_MRGEMSTR","USR_ID")=10000002)
12 - access("T_SENTTSK"."SETK_ID"="ST"."SETK_ID")
13 - filter("T_SENTTSK"."SETK_AFFN_MEMB"="T_MRGDUSR"."USR_ID")
16 - filter("T_SENTTSK"."SETK_OWNR" IS NOT NULL)
17 - access("T_SENTTSK"."SETK_ID"="ST"."SETK_ID")
18 - filter("T_SENTTSK"."SETK_OWNR"="T_MRGDUSR"."USR_ID")
Statistics
349 recursive calls
275041 db block gets
1239881 consistent gets
26 physical reads
52730252 redo size
3312 bytes sent via SQL*Net to client
240 bytes received via SQL*Net from client
1 SQL*Net roundtrips to/from client
136835 sorts (memory)
0 sorts (disk)
0 rows processed
SQL> SELECT /*+ gather_plan_statistics */ st.*
2 FROM t_senttsk st INNER JOIN (WITH t_mrgdusr AS (SELECT DISTINCT usr_id
3 FROM t_usr
4 WHERE NVL(usr_mrgemstr, usr_id) = 10000002 /* i_payer_id */
5 )
6 SELECT t_senttsk.setk_id
7 FROM t_senttsk INNER JOIN t_mrgdusr
8 ON t_senttsk.setk_affn_memb = t_mrgdusr.usr_id
9 UNION
10 SELECT t_senttsk.setk_id
11 FROM t_senttsk INNER JOIN t_mrgdusr
12 ON t_senttsk.setk_ownr = t_mrgdusr.usr_id) t_affil
13 ON st.setk_id = t_affil.setk_id;
no rows selected
Elapsed: 00:09:15.90
SQL>
SQL> select * from table(dbms_xplan.display_cursor(null, null, 'ALLSTATS LAST'));
PLAN_TABLE_OUTPUT
SQL_ID 2rc9d2c83a7ak, child number 0
SELECT /*+ gather_plan_statistics */ st.* FROM t_senttsk st INNER JOIN (WITH t_mrgdusr AS (SELECT DISTINCT usr_id
FROM t_usr WHERE NVL(usr_mrgemstr, usr_id) = :"SYS_B_0"
/* i_payer_id */ )
SELECT t_senttsk.setk_id FROM t_senttsk INNER JOIN t_mrgdusr
ON t_senttsk.setk_affn_memb = t_mrgdusr.usr_id UNION SELECT
t_senttsk.setk_id FROM t_senttsk INNER JOIN t_mrgdusr ON
t_senttsk.setk_ownr = t_mrgdusr.usr_id) t_affil ON st.setk_id = t_affil.setk_id
Plan hash value: 1065206678
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers | OMem | 1Mem | Used-Mem |
| 1 | NESTED LOOPS | | 1 | 169K| 0 |00:09:02.47 | 1514K| | | |
| 2 | TABLE ACCESS FULL | T_SENTTSK | 1 | 136K| 136K|00:00:01.64 | 7062 | | | |
| 3 | VIEW | | 136K| 1 | 0 |00:09:00.54 | 1507K| | | |
| 4 | TEMP TABLE TRANSFORMATION | | 136K| | 0 |00:09:00.12 | 1507K| | | |
| 5 | LOAD AS SELECT | | 136K| | 0 |00:08:24.31 | 548K| 1024 | 1024 | |
| 6 | TABLE ACCESS BY INDEX ROWID | T_USR | 136K| 1 | 0 |00:00:06.12 | 410K| | | |
|* 7 | INDEX RANGE SCAN | IX_NVL_USR_MRGEMSTR_USR_ID | 136K| 1 | 0 |00:00:05.41 | 410K| | | |
| 8 | SORT UNIQUE | | 136K| | 0 |00:00:19.10 | 822K| 1024 | 1024 | |
| 9 | UNION-ALL PARTITION | | 136K| | 0 |00:00:17.40 | 822K| | | |
| 10 | NESTED LOOPS | | 136K| 1 | 0 |00:00:08.02 | 411K| | | |
| 11 | TABLE ACCESS BY INDEX ROWID| T_SENTTSK | 136K| 1 | 136K|00:00:06.36 | 411K| | | |
|* 12 | INDEX UNIQUE SCAN | PK_T_SENTTSK | 136K| 1 | 136K|00:00:03.68 | 273K| | | |
|* 13 | VIEW | | 136K| 1 | 0 |00:00:01.03 | 0 | | | |
| 14 | TABLE ACCESS FULL | SYS_TEMP_0FD9D6609_399116CE | 136K| 1 | 0 |00:00:00.67 | 0 | | | |
| 15 | NESTED LOOPS | | 136K| 1 | 0 |00:00:06.54 | 411K| | | |
|* 16 | TABLE ACCESS BY INDEX ROWID| T_SENTTSK | 136K| 1 | 34256 |00:00:05.87 | 411K| | | |
|* 17 | INDEX UNIQUE SCAN | PK_T_SENTTSK | 136K| 1 | 136K|00:00:03.46 | 273K| | | |
|* 18 | VIEW | | 34256 | 1 | 0 |00:00:00.25 | 0 | | | |
| 19 | TABLE ACCESS FULL | SYS_TEMP_0FD9D6609_399116CE | 34256 | 1 | 0 |00:00:00.16 | 0 | | | |
Predicate Information (identified by operation id):
7 - access("T_USR"."SYS_NC00127$"=:SYS_B_0)
12 - access("T_SENTTSK"."SETK_ID"="ST"."SETK_ID")
13 - filter("T_SENTTSK"."SETK_AFFN_MEMB"="T_MRGDUSR"."USR_ID")
16 - filter("T_SENTTSK"."SETK_OWNR" IS NOT NULL)
17 - access("T_SENTTSK"."SETK_ID"="ST"."SETK_ID")
18 - filter("T_SENTTSK"."SETK_OWNR"="T_MRGDUSR"."USR_ID")
hoek wrote:Does rewriting 'the heart of the issue' into like below make any difference?
select a.*
from foo a
where exists ( select null
from bar b
where a.foo_pk_id = b.foo_pk_id
and b.some_col = :bind_var
The UNION in the subquery seems to make that difficult. -
I am executing a query for which there is a system temp table is used, How could i tune for better execution?
Please see the execution plan below
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
| 0 | SELECT STATEMENT | | 25 | 2650 | 83 (2)| 00:00:01 |
|* 1 | COUNT STOPKEY | | | | | |
| 2 | NESTED LOOPS | | | | | |
| 3 | NESTED LOOPS | | 25 | 2650 | 83 (2)| 00:00:01 |
| 4 | NESTED LOOPS | | 25 | 1900 | 81 (2)| 00:00:01 |
| 5 | VIEW | | 603 | 28341 | 78 (2)| 00:00:01 |
| 6 | TEMP TABLE TRANSFORMATION | | | | | |
| 7 | LOAD AS SELECT | PRODUCTS | | | | |
| 8 | HASH UNIQUE | | 114 | 2736 | 1435 (2)| 00:00:18 |
|* 9 | HASH JOIN | | 114 | 2736 | 1434 (2)| 00:00:18 |
|* 10 | TABLE ACCESS FULL | CUSTOMERS | 65 | 780 | 865 (2)| 00:00:11 |
| 11 | TABLE ACCESS BY INDEX ROWID | ORDER_LINES | 252K| 2956K| 567 (1)| 00:00:07 |
|* 12 | INDEX RANGE SCAN | OL_O1 | 252K| | 85 (0)| 00:00:02 |
| 13 | SORT ORDER BY | | 603 | 81405 | 439 (3)| 00:00:06 |
| 14 | HASH GROUP BY | | 603 | 81405 | 439 (3)| 00:00:06 |
|* 15 | HASH JOIN RIGHT ANTI | | 603 | 81405 | 437 (2)| 00:00:06 |
| 16 | VIEW | | 114 | 912 | 2 (0)| 00:00:01 |
| 17 | TABLE ACCESS FULL | SYS_TEMP_0FD9D6B20_523F10 | 114 | 912 | 2 (0)| 00:00:01 |
|* 18 | HASH JOIN | | 604 | 76708 | 435 (2)| 00:00:06 |
| 19 | TABLE ACCESS BY INDEX ROWID | PRODUCTS | 411 | 8220 | 6 (0)| 00:00:01 |
|* 20 | INDEX RANGE SCAN | PR_U2 | 411 | | 1 (0)| 00:00:01 |
|* 21 | HASH JOIN | | 2177 | 227K| 428 (2)| 00:00:06 |
| 22 | NESTED LOOPS | | | | | |
| 23 | NESTED LOOPS | | 7348 | 423K| 325 (2)| 00:00:04 |
|* 24 | HASH JOIN | | 114 | 3078 | 176 (3)| 00:00:03 |
| 25 | VIEW | | 114 | 912 | 2 (0)| 00:00:01 |
| 26 | TABLE ACCESS FULL | SYS_TEMP_0FD9D6B20_523F10 | 114 | 912 | 2 (0)| 00:00:01 |
|* 27 | TABLE ACCESS FULL | CUSTOMER_CLUSTERS | 86315 | 1601K| 173 (2)| 00:00:03 |
|* 28 | INDEX RANGE SCAN | IDX_RULES_COMM_ANTE_PROB | 64 | | 1 (0)| 00:00:01 |
| 29 | TABLE ACCESS BY INDEX ROWID| RULES | 64 | 2048 | 1 (0)| 00:00:01 |
|* 30 | TABLE ACCESS FULL | CLUSTER_PRODUCTS | 18418 | 863K| 103 (1)| 00:00:02 |
| 31 | TABLE ACCESS BY INDEX ROWID | CUSTOMERS | 1 | 29 | 1 (0)| 00:00:01 |
|* 32 | INDEX UNIQUE SCAN | CU_PK | 1 | | 1 (0)| 00:00:01 |
|* 33 | INDEX UNIQUE SCAN | PR_PK | 1 | | 1 (0)| 00:00:01 |
| 34 | TABLE ACCESS BY INDEX ROWID | PRODUCTS | 1 | 30 | 1 (0)| 00:00:01 |
---------------------------------------------------------------------------------------------------------------------ID 17 and 26
17 | TABLE ACCESS FULL | SYS_TEMP_0FD9D6B20_523F10 | 114 | 912 | 2 (0)| 00:00:01 | -
Complex transformations in SELECT
Hi everyone,
I have a pretty complex situation where I have to apply transformations on data in a SQL SELECT Statement. The thing is that I have absolultely no idea how to handle this.
Let's imagine I have an hierarchy table, like an organizational hierarchy.
CREATE TABLE organisations
organisation_id number(10) PRIMARY KEY,
parent_organisation_id number(10),
name_en varchar2(255),
name_nl varchar2(255),
CONSTRAINT fk_org_to_par_org
FOREIGN KEY (parent_organisation_id)
REFERENCES organisations(organisation_id)
INSERT INTO organisations VALUES (1, null, 'Top organization 01', 'Top organizatie 01');
INSERT INTO organisations VALUES (11, 1, 'Organization 011', 'Organizatie 011');
INSERT INTO organisations VALUES (12, 1, 'Organization 012', 'Organizatie 012');
INSERT INTO organisations VALUES (2, null, 'Top organization 02', 'Top organizatie 02');
INSERT INTO organisations VALUES (21, 2, 'Organization 021', 'Organizatie 021');
INSERT INTO organisations VALUES (22, 2, 'Organization 022', 'Organizatie 022');
INSERT INTO organisations VALUES (3, null, 'Top organization 03', 'Top organizatie 03');
INSERT INTO organisations VALUES (31, 3, 'Organization 031', 'Organizatie 031');
INSERT INTO organisations VALUES (32, 3, 'Organization 032', 'Organizatie 032');
INSERT INTO organisations VALUES (321, 32, 'Organization 321', 'Organization 321');
INSERT INTO organisations VALUES (322, 32, 'Organization 322', 'Organization 322');And I have to apply some transformations in the SELECT. These transformations are store in a table. I have a few different transformations. I just put 3 here as examples:
CREATE TABLE transformations
transform_id number(10),
transform_type CHAR(1),
organ_id number(10),
organ_name varchar2(255),
parent_organ_id number(10),
replace_name varchar2(255),
with_children char(1)
INSERT INTO transformations(transform_id, transform_type, organ_name, parent_organ_id, organ_id)
VALUES (1, 'C', 'Created NODE', 1, -9);
INSERT INTO transformations(transform_id, transform_type, organ_name, replace_name)
VALUES (2, 'R', 'Organization 021', 'Organization 021 renamed');
INSERT INTO transformations(transform_id, transform_type, organ_name, replace_name, with_children)
VALUES (3, 'R', 'Organization 032', 'Organization 032 Renamed', '1');The first transformation is to create a node under an existing one. The second transformation example is to rename a node. The pattern is actually a regular expression and it will use regexp_replace (to be able to add in the begining, change, add in the end...). The 3rd example is a rename too but all the children of a node should also be renamed with the same pattern.
I need a result like this one: (I indented to read more easilly)
1, ,Top Organisation 01, Top organizatie 01
-9, 1, Created Node, Created Node
11, 1, Organization 011, Organizatie 011
2, ,Top Organisation 02, Top organizatie 02
21, 2, Organization 021 renamed, Organization 021 renamed
22, 2, Organization 022, Organizatie 022
3, ,Top Organization 03, Top organizatie 03
31, 3, Organization 031, Organization 031
32, 3, Organization 032 Renamed, Organization 032 Renamed
321, 32, Organization 032 Renamed, Organization 032 Renamed
322, 32, Organization 032 Renamed, Organization 032 Renamed I was thinking if it was possible to apply these modifications on a SELECT clause without creating another table and refreshing it by parsing the initial table? Any suggestions?
Thanks,Hi Frank,
I have been thinking for days on this problem... That's probably why I can't explain it correctly. SO let me try again. Let's restart evrything and recreate the ORGANISATIONS table.
set define off;
DROP TABLE ORGANISATIONS;
DROP TABLE TRANSFORMATIONS;
CREATE TABLE organisations
organ_id number(10) PRIMARY KEY,
parent_organ_id NUMBER(10),
organ_name varchar2(255),
CONSTRAINT fk_org_to_par_org
FOREIGN KEY (parent_organ_id)
REFERENCES organisations(organ_id)
INSERT INTO organisations(organ_id, parent_organ_id, organ_name)
VALUES (11, NULL, 'Sales');
INSERT INTO organisations(organ_id, parent_organ_id, organ_name)
VALUES (23, NULL, 'R&D');
INSERT INTO organisations(organ_id, parent_organ_id, organ_name)
VALUES (71, NULL, 'Logistics');
INSERT INTO organisations(organ_id, parent_organ_id, organ_name)
VALUES (87, 71, 'Transport');Once you executed the previous statements, you have the following result:
SELECT organ_id, parent_organ_id, CAST(LPAD(' ', LEVEL * 2) || organ_name as VARCHAR2(25)) AS a
FROM organisations
START WITH parent_organ_id IS NULL
CONNECT BY PRIOR organ_id = parent_organ_id;
ORGAN_ID PARENT_ORGAN_ID A
11 Sales
23 R&D
71 Logistics
87 71 Transport The organisation has 3 root department: Sales, R&D and logistics. The logistics department has a child department called transport.
Now, the previous tree comes from a remote database but that's not the point. It can not be used as provided. I have to apply some modification to that tree before I can use it. That's why I creat the TRANSFORMATIONS table.
CREATE TABLE transformations
transform_id number(10),
transform_type CHAR(1),
organ_id number(10),
organ_name varchar2(255),
parent_organ_id number(10),
replace_name varchar2(255)
);Now, every record inserted in that table is a transformation to apply to the original tree. One of the transformation I need to apply is to create organisations.
For example:
INSERT INTO transformations(transform_id, transform_type, organ_id, organ_name,
parent_organ_id)
VALUES( 35, 'C', -19, 'Local sales', 11);The previous transformation means: Create a new organisation named 'Local Sales' under the Sales organization. Let's review the different values in the INSERT statement. The transform_ID is a generated ID. We don't really care about it.The transform_type 'C' means create an organization (node). The -19 is the ID that that new organization should have. 'Local Sales' is the name of that new organization and 11 is his parent id. That's with this parent-id that I know where to put the new node in the tree.
After applying this transformtation, the result should be:
ORGAN_ID PARENT_ORGAN_ID A
11 Sales
-19 11 Local sales
23 R&D
71 Logistics
87 71 Transport Of course, I can have other CREATE transformations:
INSERT INTO transformations(transform_id, transform_type, organ_id, organ_name,
parent_organ_id)
VALUES( 64, 'C', -23, 'Foreign sales', 11);
INSERT INTO transformations(transform_id, transform_type, organ_id, organ_name,
parent_organ_id)
VALUES( 66, 'C', -26, 'South America', -23);
INSERT INTO transformations(transform_id, transform_type, organ_id, organ_name,
parent_organ_id)
VALUES( 97, 'C', -13, 'IT', null);After applying these transformations, the result should be :
ORGAN_ID PARENT_ORGAN_ID A
11 Sales
-19 11 Local sales
-23 11 Foreign sales
-26 -23 South America
23 R&D
71 Logistics
87 71 Transport
-13 ITI hope this is clear now? I wanted to know if it's possible to apply such transformations directly in the SELECT statement without having to code a PL/SQL package that does it for me?
Now the problem is that I can have other type of transformations. For example, some nodes should be renamed.
For example, if I insert this transformation:
INSERT INTO transformations(transform_id, transform_type, organ_id, replace_name)
VALUES( 60, 'R', 11, 'Sales department');Instead of returning the name 'Sales' for the organization with ID = 11, it should return 'Sales department'. The 'R' transformation type means rename and the org_id is the organization to rename and the new name is supplied using replace_name.
The most difficult transformation is probably the next one. It defines nodes to retrieve by organization. For example, let's add the following data:
INSERT INTO organisations(organ_id, parent_organ_id, organ_name)
VALUES (50, NULL, 'Security');
INSERT INTO organisations(organ_id, parent_organ_id, organ_name)
VALUES (51, 50, 'Building');
INSERT INTO organisations(organ_id, parent_organ_id, organ_name)
VALUES (80, 51, 'Parkings');
INSERT INTO organisations(organ_id, parent_organ_id, organ_name)
VALUES (81, 80, 'Parking 1');
INSERT INTO organisations(organ_id, parent_organ_id, organ_name)
VALUES (82, 81, 'Parking 1 - Level 0');
INSERT INTO organisations(organ_id, parent_organ_id, organ_name)
VALUES (52, 50, 'Software');
INSERT INTO organisations(organ_id, parent_organ_id, organ_name)
VALUES (52, 50, 'Other kind of security');AS you can see in the following result, the Security organization has 4 levels below.
SELECT organ_id, parent_organ_id, LEVEL, CAST(LPAD(' ', LEVEL * 2) || organ_name as VARCHAR2(30)) AS a
FROM organisations
START WITH parent_organ_id IS NULL
CONNECT BY PRIOR organ_id = parent_organ_id;
ORGAN_ID PARENT_ORGAN_ID LEVEL A
11 1 Sales
23 1 R&D
50 1 Security
51 50 2 Building
80 51 3 Parkings
81 80 4 Parking 1
82 81 5 Parking 1 - Level 0
71 1 Logistics
87 71 2 Transport
9 rows selected
I also should be able to define with a transformation the number of level to retrieve for a specific node.
ALTER TABLE transformations
ADD max_children number(10) default 4;
INSERT INTO transformations(transform_id, transform_type, organ_id, max_children)
VALUES( 20, 'L', 50, 2);In the previous transformation, I specify a 2 level for the organization 50. In this case, the final result should only return 2 level under the organization 50. So instead of having 5 levels as in the previous result, I should have
ORGAN_ID PARENT_ORGAN_ID LEVEL A
11 1 Sales
23 1 R&D
50 1 Security
51 50 2 Building
80 51 3 Parkings
71 1 Logistics
87 71 2 Transport As you can see, there are a lot of different type of transformations that should be done and I don't think SQL is intented for such things?
Thank you again for your help Frank, I really appreciate -
SQL Query to fetch records from tables which have 75+ million records
Hi,
I have the explain plan for a sql stmt.Require your suggestions to improve this.
PLAN_TABLE_OUTPUT
| Id | Operation | Name | Rows | Bytes | Cost |
| 0 | SELECT STATEMENT | | 340 | 175K| 19075 |
| 1 | TEMP TABLE TRANSFORMATION | | | | |
| 2 | LOAD AS SELECT | | | | |
| 3 | SORT GROUP BY | | 32M| 1183M| 799K|
| 4 | TABLE ACCESS FULL | CLM_DETAIL_PRESTG | 135M| 4911M| 464K|
| 5 | LOAD AS SELECT | | | | |
| 6 | TABLE ACCESS FULL | CLM_HEADER_PRESTG | 1 | 274 | 246K|
PLAN_TABLE_OUTPUT
| 7 | LOAD AS SELECT | | | | |
| 8 | SORT UNIQUE | | 744K| 85M| 8100 |
| 9 | TABLE ACCESS FULL | DAILY_PROV_PRESTG | 744K| 85M| 1007 |
| 10 | UNION-ALL | | | | |
| 11 | SORT UNIQUE | | 177 | 97350 | 9539 |
| 12 | HASH JOIN | | 177 | 97350 | 9538 |
| 13 | HASH JOIN OUTER | | 3 | 1518 | 9533 |
| 14 | HASH JOIN | | 1 | 391 | 8966 |
| 15 | TABLE ACCESS BY INDEX ROWID | CLM_DETAIL_PRESTG | 1 | 27 | 3 |
| 16 | NESTED LOOPS | | 1 | 361 | 10 |
| 17 | NESTED LOOPS OUTER | | 1 | 334 | 7 |
PLAN_TABLE_OUTPUT
| 18 | NESTED LOOPS OUTER | | 1 | 291 | 4 |
| 19 | VIEW | | 1 | 259 | 2 |
| 20 | TABLE ACCESS FULL | SYS_TEMP_0FD9D66C9_DA2D01AD | 1 | 269 | 2 |
| 21 | INDEX RANGE SCAN | CLM_PAYMNT_CLMEXT_PRESTG_IDX | 1 | 32 | 2 |
| 22 | TABLE ACCESS BY INDEX ROWID| CLM_PAYMNT_CHKEXT_PRESTG | 1 | 43 | 3 |
| 23 | INDEX RANGE SCAN | CLM_PAYMNT_CHKEXT_PRESTG_IDX | 1 | | 2 |
| 24 | INDEX RANGE SCAN | CLM_DETAIL_PRESTG_IDX | 6 | | 2 |
| 25 | VIEW | | 32M| 934M| 8235 |
| 26 | TABLE ACCESS FULL | SYS_TEMP_0FD9D66C8_DA2D01AD | 32M| 934M| 8235 |
| 27 | VIEW | | 744K| 81M| 550 |
| 28 | TABLE ACCESS FULL | SYS_TEMP_0FD9D66CA_DA2D01AD | 744K| 81M| 550 |
PLAN_TABLE_OUTPUT
| 29 | TABLE ACCESS FULL | CCP_MBRSHP_XREF | 5288 | 227K| 5 |
| 30 | SORT UNIQUE | | 163 | 82804 | 9536 |
| 31 | HASH JOIN | | 163 | 82804 | 9535 |
| 32 | HASH JOIN OUTER | | 3 | 1437 | 9530 |
| 33 | HASH JOIN | | 1 | 364 | 8963 |
| 34 | NESTED LOOPS OUTER | | 1 | 334 | 7 |
| 35 | NESTED LOOPS OUTER | | 1 | 291 | 4 |
| 36 | VIEW | | 1 | 259 | 2 |
| 37 | TABLE ACCESS FULL | SYS_TEMP_0FD9D66C9_DA2D01AD | 1 | 269 | 2 |
| 38 | INDEX RANGE SCAN | CLM_PAYMNT_CLMEXT_PRESTG_IDX | 1 | 32 | 2 |
| 39 | TABLE ACCESS BY INDEX ROWID | CLM_PAYMNT_CHKEXT_PRESTG | 1 | 43 | 3 |
PLAN_TABLE_OUTPUT
| 40 | INDEX RANGE SCAN | CLM_PAYMNT_CHKEXT_PRESTG_IDX | 1 | | 2 |
| 41 | VIEW | | 32M| 934M| 8235 |
| 42 | TABLE ACCESS FULL | SYS_TEMP_0FD9D66C8_DA2D01AD | 32M| 934M| 8235 |
| 43 | VIEW | | 744K| 81M| 550 |
| 44 | TABLE ACCESS FULL | SYS_TEMP_0FD9D66CA_DA2D01AD | 744K| 81M| 550 |
| 45 | TABLE ACCESS FULL | CCP_MBRSHP_XREF | 5288 | 149K| 5 |
The CLM_DETAIL_PRESTG table has 100 million records and the CLM_HEADER_PRESTG table has 75 million records.
Any gussestions on how to getch huge records from tables of this size will help.
Regards,
NarayanWITH CLAIM_DTL
AS ( SELECT
ICN_NUM,
MIN (FIRST_SRVC_DT) AS FIRST_SRVC_DT,
MAX (LAST_SRVC_DT) AS LAST_SRVC_DT,
MIN (PLC_OF_SRVC_CD) AS PLC_OF_SRVC_CD
FROM CCP_STG.CLM_DETAIL_PRESTG CD WHERE ACT_CD <>'D'
GROUP BY ICN_NUM),
CLAIM_HDR
AS (SELECT
ICN_NUM,
SBCR_ID,
MBR_ID,
MBR_FIRST_NAME,
MBR_MI,
MBR_LAST_NAME,
MBR_BIRTH_DATE,
GENDER_TYPE_CD,
SBCR_RLTNSHP_TYPE_CD,
SBCR_FIRST_NAME,
SBCR_MI,
SBCR_LAST_NAME,
SBCR_ADDR_LINE_1,
SBCR_ADDR_LINE2,
SBCR_ADDR_CITY,
SBCR_ADDR_STATE,
SBCR_ZIP_CD,
PRVDR_NUM,
CLM_PRCSSD_DT,
CLM_TYPE_CLASS_CD,
AUTHO_NUM,
TOT_BILLED_AMT,
HCFA_DRG_TYPE_CD,
FCLTY_ADMIT_DT,
ADMIT_TYPE,
DSCHRG_STATUS_CD,
FILE_BILLING_NPI,
CLAIM_LOCATION_CD,
CLM_RELATED_ICN_1,
SBCR_ID||0
|| MBR_ID
|| GENDER_TYPE_CD
|| SBCR_RLTNSHP_TYPE_CD
|| MBR_BIRTH_DATE
AS MBR_ENROLL_ID,
SUBSCR_INSGRP_NM ,
CAC,
PRVDR_PTNT_ACC_ID,
BILL_TYPE,
PAYEE_ASSGN_CODE,
CREAT_RUN_CYC_EXEC_SK,
PRESTG_INSRT_DT
FROM CCP_STG.CLM_HEADER_PRESTG P WHERE ACT_CD <>'D' AND SUBSTR(CLM_PRCSS_TYPE_CD,4,1) NOT IN ('1','2','3','4','5','6') ),
PROV AS ( SELECT DISTINCT
PROV_ID,
PROV_FST_NM,
PROV_MD_NM,
PROV_LST_NM,
PROV_BILL_ADR1,
PROV_BILL_CITY,
PROV_BILL_STATE,
PROV_BILL_ZIP,
CASE WHEN PROV_SEC_ID_QL='E' THEN PROV_SEC_ID
ELSE NULL
END AS PROV_SEC_ID,
PROV_ADR1,
PROV_CITY,
PROV_STATE,
PROV_ZIP
FROM CCP_STG.DAILY_PROV_PRESTG),
MBR_XREF AS (SELECT SUBSTR(MBR_ENROLL_ID,1,17)||DECODE ((SUBSTR(MBR_ENROLL_ID,18,1)),'E','1','S','2','D','3')||SUBSTR(MBR_ENROLL_ID,19) AS MBR_ENROLLL_ID,
NEW_MBR_FLG
FROM CCP_STG.CCP_MBRSHP_XREF)
SELECT DISTINCT CLAIM_HDR.ICN_NUM AS ICN_NUM,
CLAIM_HDR.SBCR_ID AS SBCR_ID,
CLAIM_HDR.MBR_ID AS MBR_ID,
CLAIM_HDR.MBR_FIRST_NAME AS MBR_FIRST_NAME,
CLAIM_HDR.MBR_MI AS MBR_MI,
CLAIM_HDR.MBR_LAST_NAME AS MBR_LAST_NAME,
CLAIM_HDR.MBR_BIRTH_DATE AS MBR_BIRTH_DATE,
CLAIM_HDR.GENDER_TYPE_CD AS GENDER_TYPE_CD,
CLAIM_HDR.SBCR_RLTNSHP_TYPE_CD AS SBCR_RLTNSHP_TYPE_CD,
CLAIM_HDR.SBCR_FIRST_NAME AS SBCR_FIRST_NAME,
CLAIM_HDR.SBCR_MI AS SBCR_MI,
CLAIM_HDR.SBCR_LAST_NAME AS SBCR_LAST_NAME,
CLAIM_HDR.SBCR_ADDR_LINE_1 AS SBCR_ADDR_LINE_1,
CLAIM_HDR.SBCR_ADDR_LINE2 AS SBCR_ADDR_LINE2,
CLAIM_HDR.SBCR_ADDR_CITY AS SBCR_ADDR_CITY,
CLAIM_HDR.SBCR_ADDR_STATE AS SBCR_ADDR_STATE,
CLAIM_HDR.SBCR_ZIP_CD AS SBCR_ZIP_CD,
CLAIM_HDR.PRVDR_NUM AS PRVDR_NUM,
CLAIM_HDR.CLM_PRCSSD_DT AS CLM_PRCSSD_DT,
CLAIM_HDR.CLM_TYPE_CLASS_CD AS CLM_TYPE_CLASS_CD,
CLAIM_HDR.AUTHO_NUM AS AUTHO_NUM,
CLAIM_HDR.TOT_BILLED_AMT AS TOT_BILLED_AMT,
CLAIM_HDR.HCFA_DRG_TYPE_CD AS HCFA_DRG_TYPE_CD,
CLAIM_HDR.FCLTY_ADMIT_DT AS FCLTY_ADMIT_DT,
CLAIM_HDR.ADMIT_TYPE AS ADMIT_TYPE,
CLAIM_HDR.DSCHRG_STATUS_CD AS DSCHRG_STATUS_CD,
CLAIM_HDR.FILE_BILLING_NPI AS FILE_BILLING_NPI,
CLAIM_HDR.CLAIM_LOCATION_CD AS CLAIM_LOCATION_CD,
CLAIM_HDR.CLM_RELATED_ICN_1 AS CLM_RELATED_ICN_1,
CLAIM_HDR.SUBSCR_INSGRP_NM,
CLAIM_HDR.CAC,
CLAIM_HDR.PRVDR_PTNT_ACC_ID,
CLAIM_HDR.BILL_TYPE,
CLAIM_DTL.FIRST_SRVC_DT AS FIRST_SRVC_DT,
CLAIM_DTL.LAST_SRVC_DT AS LAST_SRVC_DT,
CLAIM_DTL.PLC_OF_SRVC_CD AS PLC_OF_SRVC_CD,
PROV.PROV_LST_NM AS BILL_PROV_LST_NM,
PROV.PROV_FST_NM AS BILL_PROV_FST_NM,
PROV.PROV_MD_NM AS BILL_PROV_MID_NM,
PROV.PROV_BILL_ADR1 AS BILL_PROV_ADDR1,
PROV.PROV_BILL_CITY AS BILL_PROV_CITY,
PROV.PROV_BILL_STATE AS BILL_PROV_STATE,
PROV.PROV_BILL_ZIP AS BILL_PROV_ZIP,
PROV.PROV_SEC_ID AS BILL_PROV_EIN,
PROV.PROV_ID AS SERV_FAC_ID ,
PROV.PROV_ADR1 AS SERV_FAC_ADDR1 ,
PROV.PROV_CITY AS SERV_FAC_CITY ,
PROV.PROV_STATE AS SERV_FAC_STATE ,
PROV.PROV_ZIP AS SERV_FAC_ZIP ,
CHK_PAYMNT.CLM_PMT_PAYEE_ADDR_LINE_1,
CHK_PAYMNT.CLM_PMT_PAYEE_ADDR_LINE_2,
CHK_PAYMNT.CLM_PMT_PAYEE_CITY,
CHK_PAYMNT.CLM_PMT_PAYEE_STATE_CD,
CHK_PAYMNT.CLM_PMT_PAYEE_POSTAL_CD,
CLAIM_HDR.CREAT_RUN_CYC_EXEC_SK
FROM CLAIM_DTL,(select * FROM CCP_STG.CLM_DETAIL_PRESTG WHERE ACT_CD <>'D') CLM_DETAIL_PRESTG, CLAIM_HDR,CCP_STG.MBR_XREF,PROV,CCP_STG.CLM_PAYMNT_CLMEXT_PRESTG CLM_PAYMNT,CCP_STG.CLM_PAYMNT_CHKEXT_PRESTG CHK_PAYMNT
WHERE
CLAIM_HDR.ICN_NUM = CLM_DETAIL_PRESTG.ICN_NUM
AND CLAIM_HDR.ICN_NUM = CLAIM_DTL.ICN_NUM
AND CLAIM_HDR.ICN_NUM=CLM_PAYMNT.ICN_NUM(+)
AND CLM_PAYMNT.CLM_PMT_CHCK_ACCT=CHK_PAYMNT.CLM_PMT_CHCK_ACCT
AND CLM_PAYMNT.CLM_PMT_CHCK_NUM=CHK_PAYMNT.CLM_PMT_CHCK_NUM
AND CLAIM_HDR.MBR_ENROLL_ID = MBR_XREF.MBR_ENROLLL_ID
AND CLM_DETAIL_PRESTG.FIRST_SRVC_DT >= 20110101
AND MBR_XREF.NEW_MBR_FLG = 'Y'
AND PROV.PROV_ID(+)=SUBSTR(CLAIM_HDR.PRVDR_NUM,6)
AND MOD(SUBSTR(CLAIM_HDR.ICN_NUM,14,2),2)=0
UNION ALL
SELECT DISTINCT CLAIM_HDR.ICN_NUM AS ICN_NUM,
CLAIM_HDR.SBCR_ID AS SBCR_ID,
CLAIM_HDR.MBR_ID AS MBR_ID,
CLAIM_HDR.MBR_FIRST_NAME AS MBR_FIRST_NAME,
CLAIM_HDR.MBR_MI AS MBR_MI,
CLAIM_HDR.MBR_LAST_NAME AS MBR_LAST_NAME,
CLAIM_HDR.MBR_BIRTH_DATE AS MBR_BIRTH_DATE,
CLAIM_HDR.GENDER_TYPE_CD AS GENDER_TYPE_CD,
CLAIM_HDR.SBCR_RLTNSHP_TYPE_CD AS SBCR_RLTNSHP_TYPE_CD,
CLAIM_HDR.SBCR_FIRST_NAME AS SBCR_FIRST_NAME,
CLAIM_HDR.SBCR_MI AS SBCR_MI,
CLAIM_HDR.SBCR_LAST_NAME AS SBCR_LAST_NAME,
CLAIM_HDR.SBCR_ADDR_LINE_1 AS SBCR_ADDR_LINE_1,
CLAIM_HDR.SBCR_ADDR_LINE2 AS SBCR_ADDR_LINE2,
CLAIM_HDR.SBCR_ADDR_CITY AS SBCR_ADDR_CITY,
CLAIM_HDR.SBCR_ADDR_STATE AS SBCR_ADDR_STATE,
CLAIM_HDR.SBCR_ZIP_CD AS SBCR_ZIP_CD,
CLAIM_HDR.PRVDR_NUM AS PRVDR_NUM,
CLAIM_HDR.CLM_PRCSSD_DT AS CLM_PRCSSD_DT,
CLAIM_HDR.CLM_TYPE_CLASS_CD AS CLM_TYPE_CLASS_CD,
CLAIM_HDR.AUTHO_NUM AS AUTHO_NUM,
CLAIM_HDR.TOT_BILLED_AMT AS TOT_BILLED_AMT,
CLAIM_HDR.HCFA_DRG_TYPE_CD AS HCFA_DRG_TYPE_CD,
CLAIM_HDR.FCLTY_ADMIT_DT AS FCLTY_ADMIT_DT,
CLAIM_HDR.ADMIT_TYPE AS ADMIT_TYPE,
CLAIM_HDR.DSCHRG_STATUS_CD AS DSCHRG_STATUS_CD,
CLAIM_HDR.FILE_BILLING_NPI AS FILE_BILLING_NPI,
CLAIM_HDR.CLAIM_LOCATION_CD AS CLAIM_LOCATION_CD,
CLAIM_HDR.CLM_RELATED_ICN_1 AS CLM_RELATED_ICN_1,
CLAIM_HDR.SUBSCR_INSGRP_NM,
CLAIM_HDR.CAC,
CLAIM_HDR.PRVDR_PTNT_ACC_ID,
CLAIM_HDR.BILL_TYPE,
CLAIM_DTL.FIRST_SRVC_DT AS FIRST_SRVC_DT,
CLAIM_DTL.LAST_SRVC_DT AS LAST_SRVC_DT,
CLAIM_DTL.PLC_OF_SRVC_CD AS PLC_OF_SRVC_CD,
PROV.PROV_LST_NM AS BILL_PROV_LST_NM,
PROV.PROV_FST_NM AS BILL_PROV_FST_NM,
PROV.PROV_MD_NM AS BILL_PROV_MID_NM,
PROV.PROV_BILL_ADR1 AS BILL_PROV_ADDR1,
PROV.PROV_BILL_CITY AS BILL_PROV_CITY,
PROV.PROV_BILL_STATE AS BILL_PROV_STATE,
PROV.PROV_BILL_ZIP AS BILL_PROV_ZIP,
PROV.PROV_SEC_ID AS BILL_PROV_EIN,
PROV.PROV_ID AS SERV_FAC_ID ,
PROV.PROV_ADR1 AS SERV_FAC_ADDR1 ,
PROV.PROV_CITY AS SERV_FAC_CITY ,
PROV.PROV_STATE AS SERV_FAC_STATE ,
PROV.PROV_ZIP AS SERV_FAC_ZIP ,
CHK_PAYMNT.CLM_PMT_PAYEE_ADDR_LINE_1,
CHK_PAYMNT.CLM_PMT_PAYEE_ADDR_LINE_2,
CHK_PAYMNT.CLM_PMT_PAYEE_CITY,
CHK_PAYMNT.CLM_PMT_PAYEE_STATE_CD,
CHK_PAYMNT.CLM_PMT_PAYEE_POSTAL_CD,
CLAIM_HDR.CREAT_RUN_CYC_EXEC_SK
FROM CLAIM_DTL, CLAIM_HDR,MBR_XREF,PROV,CCP_STG.CLM_PAYMNT_CLMEXT_PRESTG CLM_PAYMNT,CCP_STG.CLM_PAYMNT_CHKEXT_PRESTG CHK_PAYMNT
WHERE CLAIM_HDR.ICN_NUM = CLAIM_DTL.ICN_NUM
AND CLAIM_HDR.ICN_NUM=CLM_PAYMNT.ICN_NUM(+)
AND CLM_PAYMNT.CLM_PMT_CHCK_ACCT=CHK_PAYMNT.CLM_PMT_CHCK_ACCT
AND CLM_PAYMNT.CLM_PMT_CHCK_NUM=CHK_PAYMNT.CLM_PMT_CHCK_NUM
AND CLAIM_HDR.MBR_ENROLL_ID = MBR_XREF.MBR_ENROLLL_ID
-- AND TRUNC(CLAIM_HDR.PRESTG_INSRT_DT) = TRUNC(SYSDATE)
AND CLAIM_HDR.CREAT_RUN_CYC_EXEC_SK = 123638.000000000000000
AND MBR_XREF.NEW_MBR_FLG = 'N'
AND PROV.PROV_ID(+)=SUBSTR(CLAIM_HDR.PRVDR_NUM,6)
AND MOD(SUBSTR(CLAIM_HDR.ICN_NUM,14,2),2)=0; -
Help optimizing query with function
Hello experts,
I need your help optmizing this query which has a condition that matches on results of non-deterministic function. The non-deterministic functino is fedtaxpk.fedtaxpk_pkg.GETFIELDDATAGROUPSEQKEY. Values that it returns depends on contents of a table, so I can't really create a function index.
Any input will be appreciated. Thanks in advance!
Sorry I couln't format the query plan properly. Can somebody advise how? Thanks again!
Giovanni
explain plan for
WITH tg AS
(SELECT taxgroup_code FROM taxgroup
WHERE taxgroup_code = 'TAXGROUP2' --?
AND taxgroup_delete_ind = 'N' AND taxgroup_active_ind = 'A'),
le_hb AS
(SELECT tgi.taxgroup_code, tgi.legalentity_id, tgi.hyperionbase_id, ou.orgunit_code, ou.hyperionbase_code
FROM tg, taxgroupitem tgi, orgunit_vw ou
WHERE tg.taxgroup_code = tgi.taxgroup_code
AND tgi.legalentity_id = ou.legalentity_id AND tgi.hyperionbase_id = ou.hyperionbase_id
UNION
SELECT tgi.taxgroup_code, tgi.legalentity_id, ou.hyperionbase_id, ou.orgunit_code, ou.hyperionbase_code
FROM tg, taxgroupitem tgi, orgunit_vw ou
WHERE tg.taxgroup_code = tgi.taxgroup_code
AND tgi.legalentity_id = ou.legalentity_id AND tgi.hyperionbase_id IS NULL),
au AS
(SELECT appusage_code FROM appusage WHERE appusage_code = 'CONSOLIDATION'),
prs AS
(SELECT prs_key,
(CASE WHEN instr(prs_key, ':') = 0 THEN prs_key
ELSE SUBSTR(prs_key, 1, (instr(prs_key, ':')-1) ) END) first_val
FROM
(SELECT fedtaxpk.fedtaxpk_pkg.GETFIELDDATAGROUPSEQKEY(164415 --?
) prs_key
FROM dual
grs AS
(SELECT prs.*, fd.fielddata_group_sequence fd_grpseq
FROM prs, fielddata fd, le_hb
WHERE prs.first_val = fd.fielddata_value
AND le_hb.legalentity_id = fd.legalentity_id
AND le_hb.hyperionbase_id = fd.hyperionbase_id),
fdk AS
(SELECT
cd.celldef_id, fedtaxpk.fedtaxpk_pkg.GETFIELDDATAGROUPSEQKEY(fd.fielddata_group_sequence) fd_key,
fd.fielddata_value fd_val, fd.fielddata_group_sequence fd_grpseq,
ROW_NUMBER() OVER (PARTITION BY cd.celldef_id, fedtaxpk.fedtaxpk_pkg.GETFIELDDATAGROUPSEQKEY(fd.fielddata_group_sequence)
ORDER BY fd.fielddata_group_sequence) rn,
grs.prs_key
FROM le_hb, grs, fielddata fd, tablecell tc, celldef cd, tabledef td, appusage au
WHERE le_hb.legalentity_id = fd.legalentity_id AND le_hb.hyperionbase_id = fd.hyperionbase_id
AND fd.fielddata_id = tc.fielddata_id AND tc.celldef_id = cd.celldef_id
AND cd.tabledef_id = td.tabledef_id
AND grs.fd_grpseq = fd.fielddata_parent_row_sequence
and grs.prs_key = fedtaxpk.fedtaxpk_pkg.GETFIELDDATAGROUPSEQKEY(fd.fielddata_parent_row_sequence)
AND cd.celldef_key_ind = 'Y'
AND fd.fielddata_delete_ind = 'N'
AND td.tabledef_id = 2265
fda AS
(SELECT
cd.celldef_id, fedtaxpk.fedtaxpk_pkg.GETFIELDDATAGROUPSEQKEY(fd.fielddata_group_sequence) fd_key,
TO_CHAR(TO_NUMBER(SUM(fd.fielddata_value))) fd_val,
MIN(fd.fielddata_group_sequence) fd_grpseq,
grs.prs_key
FROM le_hb, grs, fielddata fd, tablecell tc, celldef cd, tabledef td
WHERE le_hb.legalentity_id = fd.legalentity_id AND le_hb.hyperionbase_id = fd.hyperionbase_id
AND fd.fielddata_id = tc.fielddata_id AND tc.celldef_id = cd.celldef_id
AND cd.tabledef_id = td.tabledef_id
AND grs.fd_grpseq = fd.fielddata_parent_row_sequence
and grs.prs_key = fedtaxpk.fedtaxpk_pkg.GETFIELDDATAGROUPSEQKEY(fd.fielddata_parent_row_sequence)
AND cd.celldef_adjustable_ind = 'Y'
AND fd.fielddata_delete_ind = 'N'
AND td.tabledef_id = 2265
GROUP BY cd.celldef_id, fedtaxpk.fedtaxpk_pkg.GETFIELDDATAGROUPSEQKEY(fd.fielddata_group_sequence),
grs.prs_key
SELECT NULL LEGALENTITY_ID, NULL hyperionbase_id, fdk.celldef_id, TO_CHAR(NULL) role_code, NULL userinfo_id, cd.celldef_adjustable_ind,
'N' celldef_editable_ind, cd.celldef_filter_code, cd.celldef_validate_rule, cd.celldef_list_code,
cd.celldef_longstring_ind, aua.appusageaccess_visible_ind celldef_viewable_ind,
cd.celldef_column_sequence, cd.celldef_column_label,
cd.celldef_column_sort_order, NULL tablecell_id, fdk.fd_grpseq tablecell_row_sequence, NULL tablecell_row_label,
'N' tablecell_delete_ind, NULL tablecell_create_by, TO_DATE(NULL) tablecell_create_dt, TO_CHAR(NULL) tablecell_update_by,
TO_DATE(NULL) tablecell_update_dt, NULL fielddata_id, TO_CHAR(NULL) datatype_code, NULL fielddata_adjref_id,
fdk.fd_grpseq fielddata_group_sequence, NULL fielddata_parent_row_sequence, NULL lookup_id,
fdk.fd_val fielddata_value, 'N' fielddata_delete_ind, TO_CHAR(NULL) fielddata_create_by,
TO_DATE(NULL) fielddata_create_dt, TO_CHAR(NULL) fielddata_update_by, TO_DATE(NULL) fielddata_update_dt,
fdk.fd_key
FROM fdk, celldef cd, appusageaccess aua, au
WHERE fdk.celldef_id = cd.celldef_id
AND cd.celldef_id = aua.celldef_id
AND aua.appusage_code = au.appusage_code
AND fdk.rn = 1
UNION ALL
SELECT NULL LEGALENTITY_ID, NULL hyperionbase_id, fda.celldef_id, TO_CHAR(NULL) role_code, NULL userinfo_id, cd.celldef_adjustable_ind,
'N' celldef_editable_ind, cd.celldef_filter_code, cd.celldef_validate_rule, cd.celldef_list_code,
cd.celldef_longstring_ind, aua.appusageaccess_visible_ind celldef_viewable_ind,
cd.celldef_column_sequence, cd.celldef_column_label,
cd.celldef_column_sort_order, NULL tablecell_id, fda.fd_grpseq tablecell_row_sequence, NULL tablecell_row_label,
'N' tablecell_delete_ind, NULL tablecell_create_by, TO_DATE(NULL) tablecell_create_dt, TO_CHAR(NULL) tablecell_update_by,
TO_DATE(NULL) tablecell_update_dt, NULL fielddata_id, TO_CHAR(NULL) datatype_code, NULL fielddata_adjref_id,
fda.fd_grpseq fielddata_group_sequence, NULL fielddata_parent_row_sequence, NULL lookup_id,
fda.fd_val fielddata_value, 'N' fielddata_delete_ind, TO_CHAR(NULL) fielddata_create_by,
TO_DATE(NULL) fielddata_create_dt, TO_CHAR(NULL) fielddata_update_by, TO_DATE(NULL) fielddata_update_dt,
fda.fd_key
FROM fda, celldef cd, appusageaccess aua, au
WHERE fda.celldef_id = cd.celldef_id
AND cd.celldef_id = aua.celldef_id
AND aua.appusage_code = au.appusage_code
ORDER BY fielddata_group_sequence, celldef_column_sequence
Query Plan:
Plan hash value: 522363234
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
| 0 | SELECT STATEMENT | | 2 | 6227 | 249 (2)| 00:00:03 |
| 1 | TEMP TABLE TRANSFORMATION | | | | | |
| 2 | LOAD AS SELECT | | | | | |
|* 3 | TABLE ACCESS BY INDEX ROWID | TAXGROUP | 1 | 14 | 1 (0)| 00:00:01 |
|* 4 | INDEX UNIQUE SCAN | PK_TAXGROUP | 1 | | 0 (0)| 00:00:01 |
| 5 | LOAD AS SELECT | | | | | |
| 6 | SORT UNIQUE | | 4 | 224 | 12 (59)| 00:00:01 |
| 7 | UNION-ALL | | | | | |
| 8 | TABLE ACCESS BY INDEX ROWID | ORGUNIT | 1 | 29 | 2 (0)| 00:00:01 |
| 9 | NESTED LOOPS | | 1 | 56 | 5 (0)| 00:00:01 |
| 10 | NESTED LOOPS | | 1 | 27 | 3 (0)| 00:00:01 |
| 11 | VIEW | | 1 | 10 | 2 (0)| 00:00:01 |
| 12 | TABLE ACCESS FULL | SYS_TEMP_0FD9D9B51_2EBE182 | 1 | 10 | 2 (0)| 00:00:01 |
|* 13 | TABLE ACCESS BY INDEX ROWID | TAXGROUPITEM | 1 | 17 | 1 (0)| 00:00:01 |
|* 14 | INDEX RANGE SCAN | XF1_TAXGROUPITEM_TAXGROUP | 1 | | 0 (0)| 00:00:01 |
|* 15 | INDEX RANGE SCAN | XF1_ORGUNIT_ID | 1 | | 1 (0)| 00:00:01 |
| 16 | TABLE ACCESS BY INDEX ROWID | ORGUNIT | 3 | 87 | 2 (0)| 00:00:01 |
| 17 | NESTED LOOPS | | 3 | 168 | 5 (0)| 00:00:01 |
| 18 | NESTED LOOPS | | 1 | 27 | 3 (0)| 00:00:01 |
| 19 | VIEW | | 1 | 10 | 2 (0)| 00:00:01 |
| 20 | TABLE ACCESS FULL | SYS_TEMP_0FD9D9B51_2EBE182 | 1 | 10 | 2 (0)| 00:00:01 |
|* 21 | TABLE ACCESS BY INDEX ROWID | TAXGROUPITEM | 1 | 17 | 1 (0)| 00:00:01 |
|* 22 | INDEX RANGE SCAN | XF1_TAXGROUPITEM_TAXGROUP | 1 | | 0 (0)| 00:00:01 |
|* 23 | INDEX RANGE SCAN | XF1_ORGUNIT_ID | 3 | | 1 (0)| 00:00:01 |
| 24 | LOAD AS SELECT | | | | | |
|* 25 | INDEX UNIQUE SCAN | PK_APPUSAGE | 1 | 10 | 0 (0)| 00:00:01 |
| 26 | LOAD AS SELECT | | | | | |
|* 27 | TABLE ACCESS BY INDEX ROWID | FIELDDATA | 7 | 147 | 28 (0)| 00:00:01 |
| 28 | NESTED LOOPS | | 27 | 1269 | 117 (1)| 00:00:02 |
| 29 | NESTED LOOPS | | 4 | 104 | 4 (0)| 00:00:01 |
| 30 | FAST DUAL | | 1 | | 2 (0)| 00:00:01 |
| 31 | VIEW | | 4 | 104 | 2 (0)| 00:00:01 |
| 32 | TABLE ACCESS FULL | SYS_TEMP_0FD9D9B52_2EBE182 | 4 | 388 | 2 (0)| 00:00:01 |
|* 33 | INDEX RANGE SCAN | XF11_DATA_LE_HB | 117 | | 12 (0)| 00:00:01 |
| 34 | SORT ORDER BY | | 2 | 6227 | 248 (51)| 00:00:03 |
| 35 | UNION-ALL | | | | | |
| 36 | NESTED LOOPS | | 1 | 4110 | 125 (2)| 00:00:02 |
| 37 | MERGE JOIN CARTESIAN | | 1 | 4093 | 124 (2)| 00:00:02 |
| 38 | NESTED LOOPS | | 1 | 4076 | 122 (2)| 00:00:02 |
|* 39 | VIEW | | 1 | 4043 | 121 (2)| 00:00:02 |
|* 40 | WINDOW SORT PUSHED RANK | | 1 | 2099 | 121 (2)| 00:00:02 |
| 41 | MERGE JOIN CARTESIAN | | 1 | 2099 | 120 (1)| 00:00:02 |
| 42 | NESTED LOOPS | | 1 | 2099 | 119 (1)| 00:00:02 |
| 43 | NESTED LOOPS | | 1 | 2088 | 118 (1)| 00:00:02 |
|* 44 | HASH JOIN | | 1 | 2077 | 117 (1)| 00:00:02 |
|* 45 | TABLE ACCESS BY INDEX ROWID| FIELDDATA | 117 | 3744 | 28 (0)| 00:00:01 |
| 46 | NESTED LOOPS | | 466 | 28892 | 114 (0)| 00:00:02 |
| 47 | NESTED LOOPS | | 4 | 120 | 2 (0)| 00:00:01 |
|* 48 | INDEX UNIQUE SCAN | PK_TABLEDEF | 1 | 4 | 0 (0)| 00:00:01 |
| 49 | VIEW | | 4 | 104 | 2 (0)| 00:00:01 |
| 50 | TABLE ACCESS FULL | SYS_TEMP_0FD9D9B52_2EBE182 | 4 | 388 | 2 (0)| 00:00:01 |
|* 51 | INDEX RANGE SCAN | XF11_DATA_LE_HB | 117 | | 12 (0)| 00:00:01 |
| 52 | VIEW | | 27 | 54405 | 2 (0)| 00:00:01 |
| 53 | TABLE ACCESS FULL | SYS_TEMP_0FD9D9B54_2EBE182 | 27 | 1269 | 2 (0)| 00:00:01 |
| 54 | TABLE ACCESS BY INDEX ROWID | TABLECELL | 1 | 11 | 1 (0)| 00:00:01 |
|* 55 | INDEX UNIQUE SCAN | XF1_TBLCEL_DATA | 1 | | 0 (0)| 00:00:01 |
|* 56 | TABLE ACCESS BY INDEX ROWID | CELLDEF | 1 | 11 | 1 (0)| 00:00:01 |
|* 57 | INDEX UNIQUE SCAN | PK_CELLDEF | 1 | | 0 (0)| 00:00:01 |
| 58 | BUFFER SORT | | 5 | | 120 (2)| 00:00:02 |
| 59 | INDEX FULL SCAN | PK_APPUSAGE | 5 | | 1 (0)| 00:00:01 |
| 60 | TABLE ACCESS BY INDEX ROWID | CELLDEF | 1 | 33 | 1 (0)| 00:00:01 |
|* 61 | INDEX UNIQUE SCAN | PK_CELLDEF | 1 | | 0 (0)| 00:00:01 |
| 62 | BUFFER SORT | | 1 | 17 | 123 (2)| 00:00:02 |
| 63 | VIEW | | 1 | 17 | 2 (0)| 00:00:01 |
| 64 | TABLE ACCESS FULL | SYS_TEMP_0FD9D9B53_2EBE182 | 1 | 10 | 2 (0)| 00:00:01 |
| 65 | TABLE ACCESS BY INDEX ROWID | APPUSAGEACCESS | 1 | 17 | 1 (0)| 00:00:01 |
|* 66 | INDEX UNIQUE SCAN | AK_APPUSAGEACCESS | 1 | | 0 (0)| 00:00:01 |
| 67 | NESTED LOOPS | | 1 | 2117 | 124 (2)| 00:00:02 |
| 68 | MERGE JOIN CARTESIAN | | 1 | 2100 | 123 (2)| 00:00:02 |
| 69 | NESTED LOOPS | | 1 | 2083 | 121 (2)| 00:00:02 |
| 70 | VIEW | | 1 | 2050 | 120 (2)| 00:00:02 |
| 71 | HASH GROUP BY | | 1 | 2091 | 120 (2)| 00:00:02 |
| 72 | NESTED LOOPS | | 1 | 2091 | 119 (1)| 00:00:02 |
| 73 | NESTED LOOPS | | 1 | 2080 | 118 (1)| 00:00:02 |
|* 74 | HASH JOIN | | 1 | 2069 | 117 (1)| 00:00:02 |
|* 75 | TABLE ACCESS BY INDEX ROWID | FIELDDATA | 117 | 3744 | 28 (0)| 00:00:01 |
| 76 | NESTED LOOPS | | 466 | 28892 | 114 (0)| 00:00:02 |
| 77 | NESTED LOOPS | | 4 | 120 | 2 (0)| 00:00:01 |
|* 78 | INDEX UNIQUE SCAN | PK_TABLEDEF | 1 | 4 | 0 (0)| 00:00:01 |
| 79 | VIEW | | 4 | 104 | 2 (0)| 00:00:01 |
| 80 | TABLE ACCESS FULL | SYS_TEMP_0FD9D9B52_2EBE182 | 4 | 388 | 2 (0)| 00:00:01 |
|* 81 | INDEX RANGE SCAN | XF11_DATA_LE_HB | 117 | | 12 (0)| 00:00:01 |
| 82 | VIEW | | 27 | 54189 | 2 (0)| 00:00:01 |
| 83 | TABLE ACCESS FULL | SYS_TEMP_0FD9D9B54_2EBE182 | 27 | 1269 | 2 (0)| 00:00:01 |
| 84 | TABLE ACCESS BY INDEX ROWID | TABLECELL | 1 | 11 | 1 (0)| 00:00:01 |
|* 85 | INDEX UNIQUE SCAN | XF1_TBLCEL_DATA | 1 | | 0 (0)| 00:00:01 |
|* 86 | TABLE ACCESS BY INDEX ROWID | CELLDEF | 1 | 11 | 1 (0)| 00:00:01 |
|* 87 | INDEX UNIQUE SCAN | PK_CELLDEF | 1 | | 0 (0)| 00:00:01 |
| 88 | TABLE ACCESS BY INDEX ROWID | CELLDEF | 1 | 33 | 1 (0)| 00:00:01 |
|* 89 | INDEX UNIQUE SCAN | PK_CELLDEF | 1 | | 0 (0)| 00:00:01 |
| 90 | BUFFER SORT | | 1 | 17 | 122 (2)| 00:00:02 |
| 91 | VIEW | | 1 | 17 | 2 (0)| 00:00:01 |
| 92 | TABLE ACCESS FULL | SYS_TEMP_0FD9D9B53_2EBE182 | 1 | 10 | 2 (0)| 00:00:01 |
| 93 | TABLE ACCESS BY INDEX ROWID | APPUSAGEACCESS | 1 | 17 | 1 (0)| 00:00:01 |
|* 94 | INDEX UNIQUE SCAN | AK_APPUSAGEACCESS | 1 | | 0 (0)| 00:00:01 |
Predicate Information (identified by operation id):
3 - filter("TAXGROUP_DELETE_IND"='N' AND "TAXGROUP_ACTIVE_IND"='A')
4 - access("TAXGROUP_CODE"='TAXGROUP2')
13 - filter("TGI"."HYPERIONBASE_ID" IS NOT NULL)
14 - access("TG"."TAXGROUP_CODE"="TGI"."TAXGROUP_CODE")
15 - access("TGI"."LEGALENTITY_ID"="OU"."ORGUNIT_ID" AND "TGI"."HYPERIONBASE_ID"="OU"."HYPERIONBASE_ID")
21 - filter("TGI"."HYPERIONBASE_ID" IS NULL)
22 - access("TG"."TAXGROUP_CODE"="TGI"."TAXGROUP_CODE")
23 - access("TGI"."LEGALENTITY_ID"="OU"."ORGUNIT_ID")
25 - access("APPUSAGE_CODE"='CONSOLIDATION')
27 - filter("FD"."FIELDDATA_VALUE"=CASE INSTR("FEDTAXPK_PKG"."GETFIELDDATAGROUPSEQKEY"(164415),':') WHEN 0
THEN "FEDTAXPK_PKG"."GETFIELDDATAGROUPSEQKEY"(164415) ELSE
SUBSTR("FEDTAXPK_PKG"."GETFIELDDATAGROUPSEQKEY"(164415),1,INSTR("FEDTAXPK_PKG"."GETFIELDDATAGROUPSEQKEY"(16441
5),':')-1) END )
33 - access("LE_HB"."LEGALENTITY_ID"="FD"."LEGALENTITY_ID" AND
"LE_HB"."HYPERIONBASE_ID"="FD"."HYPERIONBASE_ID")
39 - filter("FDK"."RN"=1)
40 - filter(ROW_NUMBER() OVER ( PARTITION BY "CD"."CELLDEF_ID","FEDTAXPK_PKG"."GETFIELDDATAGROUPSEQKEY"("FD"
."FIELDDATA_GROUP_SEQUENCE") ORDER BY "FD"."FIELDDATA_GROUP_SEQUENCE")<=1)
44 - access("GRS"."FD_GRPSEQ"="FD"."FIELDDATA_PARENT_ROW_SEQUENCE" AND
"GRS"."PRS_KEY"="FEDTAXPK_PKG"."GETFIELDDATAGROUPSEQKEY"("FD"."FIELDDATA_PARENT_ROW_SEQUENCE"))
45 - filter("FD"."FIELDDATA_DELETE_IND"='N')
48 - access("TD"."TABLEDEF_ID"=2265)
51 - access("LE_HB"."LEGALENTITY_ID"="FD"."LEGALENTITY_ID" AND
"LE_HB"."HYPERIONBASE_ID"="FD"."HYPERIONBASE_ID")
55 - access("FD"."FIELDDATA_ID"="TC"."FIELDDATA_ID")
56 - filter("CD"."TABLEDEF_ID"=2265 AND "CD"."CELLDEF_KEY_IND"='Y')
57 - access("TC"."CELLDEF_ID"="CD"."CELLDEF_ID")
61 - access("FDK"."CELLDEF_ID"="CD"."CELLDEF_ID")
66 - access("AUA"."APPUSAGE_CODE"="AU"."APPUSAGE_CODE" AND "CD"."CELLDEF_ID"="AUA"."CELLDEF_ID")
74 - access("GRS"."FD_GRPSEQ"="FD"."FIELDDATA_PARENT_ROW_SEQUENCE" AND
"GRS"."PRS_KEY"="FEDTAXPK_PKG"."GETFIELDDATAGROUPSEQKEY"("FD"."FIELDDATA_PARENT_ROW_SEQUENCE"))
75 - filter("FD"."FIELDDATA_DELETE_IND"='N')
78 - access("TD"."TABLEDEF_ID"=2265)
81 - access("LE_HB"."LEGALENTITY_ID"="FD"."LEGALENTITY_ID" AND
"LE_HB"."HYPERIONBASE_ID"="FD"."HYPERIONBASE_ID")
85 - access("FD"."FIELDDATA_ID"="TC"."FIELDDATA_ID")
86 - filter("CD"."TABLEDEF_ID"=2265 AND "CD"."CELLDEF_ADJUSTABLE_IND"='Y')
87 - access("TC"."CELLDEF_ID"="CD"."CELLDEF_ID")
89 - access("FDA"."CELLDEF_ID"="CD"."CELLDEF_ID")
94 - access("AUA"."APPUSAGE_CODE"="AU"."APPUSAGE_CODE" AND "CD"."CELLDEF_ID"="AUA"."CELLDEF_ID")Thanks cd.
Here's the query plan:
Query Plan:
Plan hash value: 522363234
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
| 0 | SELECT STATEMENT | | 2 | 6227 | 249 (2)| 00:00:03 |
| 1 | TEMP TABLE TRANSFORMATION | | | | | |
| 2 | LOAD AS SELECT | | | | | |
|* 3 | TABLE ACCESS BY INDEX ROWID | TAXGROUP | 1 | 14 | 1 (0)| 00:00:01 |
|* 4 | INDEX UNIQUE SCAN | PK_TAXGROUP | 1 | | 0 (0)| 00:00:01 |
| 5 | LOAD AS SELECT | | | | | |
| 6 | SORT UNIQUE | | 4 | 224 | 12 (59)| 00:00:01 |
| 7 | UNION-ALL | | | | | |
| 8 | TABLE ACCESS BY INDEX ROWID | ORGUNIT | 1 | 29 | 2 (0)| 00:00:01 |
| 9 | NESTED LOOPS | | 1 | 56 | 5 (0)| 00:00:01 |
| 10 | NESTED LOOPS | | 1 | 27 | 3 (0)| 00:00:01 |
| 11 | VIEW | | 1 | 10 | 2 (0)| 00:00:01 |
| 12 | TABLE ACCESS FULL | SYS_TEMP_0FD9D9B51_2EBE182 | 1 | 10 | 2 (0)| 00:00:01 |
|* 13 | TABLE ACCESS BY INDEX ROWID | TAXGROUPITEM | 1 | 17 | 1 (0)| 00:00:01 |
|* 14 | INDEX RANGE SCAN | XF1_TAXGROUPITEM_TAXGROUP | 1 | | 0 (0)| 00:00:01 |
|* 15 | INDEX RANGE SCAN | XF1_ORGUNIT_ID | 1 | | 1 (0)| 00:00:01 |
| 16 | TABLE ACCESS BY INDEX ROWID | ORGUNIT | 3 | 87 | 2 (0)| 00:00:01 |
| 17 | NESTED LOOPS | | 3 | 168 | 5 (0)| 00:00:01 |
| 18 | NESTED LOOPS | | 1 | 27 | 3 (0)| 00:00:01 |
| 19 | VIEW | | 1 | 10 | 2 (0)| 00:00:01 |
| 20 | TABLE ACCESS FULL | SYS_TEMP_0FD9D9B51_2EBE182 | 1 | 10 | 2 (0)| 00:00:01 |
|* 21 | TABLE ACCESS BY INDEX ROWID | TAXGROUPITEM | 1 | 17 | 1 (0)| 00:00:01 |
|* 22 | INDEX RANGE SCAN | XF1_TAXGROUPITEM_TAXGROUP | 1 | | 0 (0)| 00:00:01 |
|* 23 | INDEX RANGE SCAN | XF1_ORGUNIT_ID | 3 | | 1 (0)| 00:00:01 |
| 24 | LOAD AS SELECT | | | | | |
|* 25 | INDEX UNIQUE SCAN | PK_APPUSAGE | 1 | 10 | 0 (0)| 00:00:01 |
| 26 | LOAD AS SELECT | | | | | |
|* 27 | TABLE ACCESS BY INDEX ROWID | FIELDDATA | 7 | 147 | 28 (0)| 00:00:01 |
| 28 | NESTED LOOPS | | 27 | 1269 | 117 (1)| 00:00:02 |
| 29 | NESTED LOOPS | | 4 | 104 | 4 (0)| 00:00:01 |
| 30 | FAST DUAL | | 1 | | 2 (0)| 00:00:01 |
| 31 | VIEW | | 4 | 104 | 2 (0)| 00:00:01 |
| 32 | TABLE ACCESS FULL | SYS_TEMP_0FD9D9B52_2EBE182 | 4 | 388 | 2 (0)| 00:00:01 |
|* 33 | INDEX RANGE SCAN | XF11_DATA_LE_HB | 117 | | 12 (0)| 00:00:01 |
| 34 | SORT ORDER BY | | 2 | 6227 | 248 (51)| 00:00:03 |
| 35 | UNION-ALL | | | | | |
| 36 | NESTED LOOPS | | 1 | 4110 | 125 (2)| 00:00:02 |
| 37 | MERGE JOIN CARTESIAN | | 1 | 4093 | 124 (2)| 00:00:02 |
| 38 | NESTED LOOPS | | 1 | 4076 | 122 (2)| 00:00:02 |
|* 39 | VIEW | | 1 | 4043 | 121 (2)| 00:00:02 |
|* 40 | WINDOW SORT PUSHED RANK | | 1 | 2099 | 121 (2)| 00:00:02 |
| 41 | MERGE JOIN CARTESIAN | | 1 | 2099 | 120 (1)| 00:00:02 |
| 42 | NESTED LOOPS | | 1 | 2099 | 119 (1)| 00:00:02 |
| 43 | NESTED LOOPS | | 1 | 2088 | 118 (1)| 00:00:02 |
|* 44 | HASH JOIN | | 1 | 2077 | 117 (1)| 00:00:02 |
|* 45 | TABLE ACCESS BY INDEX ROWID| FIELDDATA | 117 | 3744 | 28 (0)| 00:00:01 |
| 46 | NESTED LOOPS | | 466 | 28892 | 114 (0)| 00:00:02 |
| 47 | NESTED LOOPS | | 4 | 120 | 2 (0)| 00:00:01 |
|* 48 | INDEX UNIQUE SCAN | PK_TABLEDEF | 1 | 4 | 0 (0)| 00:00:01 |
| 49 | VIEW | | 4 | 104 | 2 (0)| 00:00:01 |
| 50 | TABLE ACCESS FULL | SYS_TEMP_0FD9D9B52_2EBE182 | 4 | 388 | 2 (0)| 00:00:01 |
|* 51 | INDEX RANGE SCAN | XF11_DATA_LE_HB | 117 | | 12 (0)| 00:00:01 |
| 52 | VIEW | | 27 | 54405 | 2 (0)| 00:00:01 |
| 53 | TABLE ACCESS FULL | SYS_TEMP_0FD9D9B54_2EBE182 | 27 | 1269 | 2 (0)| 00:00:01 |
| 54 | TABLE ACCESS BY INDEX ROWID | TABLECELL | 1 | 11 | 1 (0)| 00:00:01 |
|* 55 | INDEX UNIQUE SCAN | XF1_TBLCEL_DATA | 1 | | 0 (0)| 00:00:01 |
|* 56 | TABLE ACCESS BY INDEX ROWID | CELLDEF | 1 | 11 | 1 (0)| 00:00:01 |
|* 57 | INDEX UNIQUE SCAN | PK_CELLDEF | 1 | | 0 (0)| 00:00:01 |
| 58 | BUFFER SORT | | 5 | | 120 (2)| 00:00:02 |
| 59 | INDEX FULL SCAN | PK_APPUSAGE | 5 | | 1 (0)| 00:00:01 |
| 60 | TABLE ACCESS BY INDEX ROWID | CELLDEF | 1 | 33 | 1 (0)| 00:00:01 |
|* 61 | INDEX UNIQUE SCAN | PK_CELLDEF | 1 | | 0 (0)| 00:00:01 |
| 62 | BUFFER SORT | | 1 | 17 | 123 (2)| 00:00:02 |
| 63 | VIEW | | 1 | 17 | 2 (0)| 00:00:01 |
| 64 | TABLE ACCESS FULL | SYS_TEMP_0FD9D9B53_2EBE182 | 1 | 10 | 2 (0)| 00:00:01 |
| 65 | TABLE ACCESS BY INDEX ROWID | APPUSAGEACCESS | 1 | 17 | 1 (0)| 00:00:01 |
|* 66 | INDEX UNIQUE SCAN | AK_APPUSAGEACCESS | 1 | | 0 (0)| 00:00:01 |
| 67 | NESTED LOOPS | | 1 | 2117 | 124 (2)| 00:00:02 |
| 68 | MERGE JOIN CARTESIAN | | 1 | 2100 | 123 (2)| 00:00:02 |
| 69 | NESTED LOOPS | | 1 | 2083 | 121 (2)| 00:00:02 |
| 70 | VIEW | | 1 | 2050 | 120 (2)| 00:00:02 |
| 71 | HASH GROUP BY | | 1 | 2091 | 120 (2)| 00:00:02 |
| 72 | NESTED LOOPS | | 1 | 2091 | 119 (1)| 00:00:02 |
| 73 | NESTED LOOPS | | 1 | 2080 | 118 (1)| 00:00:02 |
|* 74 | HASH JOIN | | 1 | 2069 | 117 (1)| 00:00:02 |
|* 75 | TABLE ACCESS BY INDEX ROWID | FIELDDATA | 117 | 3744 | 28 (0)| 00:00:01 |
| 76 | NESTED LOOPS | | 466 | 28892 | 114 (0)| 00:00:02 |
| 77 | NESTED LOOPS | | 4 | 120 | 2 (0)| 00:00:01 |
|* 78 | INDEX UNIQUE SCAN | PK_TABLEDEF | 1 | 4 | 0 (0)| 00:00:01 |
| 79 | VIEW | | 4 | 104 | 2 (0)| 00:00:01 |
| 80 | TABLE ACCESS FULL | SYS_TEMP_0FD9D9B52_2EBE182 | 4 | 388 | 2 (0)| 00:00:01 |
|* 81 | INDEX RANGE SCAN | XF11_DATA_LE_HB | 117 | | 12 (0)| 00:00:01 |
| 82 | VIEW | | 27 | 54189 | 2 (0)| 00:00:01 |
| 83 | TABLE ACCESS FULL | SYS_TEMP_0FD9D9B54_2EBE182 | 27 | 1269 | 2 (0)| 00:00:01 |
| 84 | TABLE ACCESS BY INDEX ROWID | TABLECELL | 1 | 11 | 1 (0)| 00:00:01 |
|* 85 | INDEX UNIQUE SCAN | XF1_TBLCEL_DATA | 1 | | 0 (0)| 00:00:01 |
|* 86 | TABLE ACCESS BY INDEX ROWID | CELLDEF | 1 | 11 | 1 (0)| 00:00:01 |
|* 87 | INDEX UNIQUE SCAN | PK_CELLDEF | 1 | | 0 (0)| 00:00:01 |
| 88 | TABLE ACCESS BY INDEX ROWID | CELLDEF | 1 | 33 | 1 (0)| 00:00:01 |
|* 89 | INDEX UNIQUE SCAN | PK_CELLDEF | 1 | | 0 (0)| 00:00:01 |
| 90 | BUFFER SORT | | 1 | 17 | 122 (2)| 00:00:02 |
| 91 | VIEW | | 1 | 17 | 2 (0)| 00:00:01 |
| 92 | TABLE ACCESS FULL | SYS_TEMP_0FD9D9B53_2EBE182 | 1 | 10 | 2 (0)| 00:00:01 |
| 93 | TABLE ACCESS BY INDEX ROWID | APPUSAGEACCESS | 1 | 17 | 1 (0)| 00:00:01 |
|* 94 | INDEX UNIQUE SCAN | AK_APPUSAGEACCESS | 1 | | 0 (0)| 00:00:01 |
---------------------------------------------------------------------------------------------------------------------- Predicate Information (identified by operation id):
3 - filter("TAXGROUP_DELETE_IND"='N' AND "TAXGROUP_ACTIVE_IND"='A')
4 - access("TAXGROUP_CODE"='TAXGROUP2')
13 - filter("TGI"."HYPERIONBASE_ID" IS NOT NULL)
14 - access("TG"."TAXGROUP_CODE"="TGI"."TAXGROUP_CODE")
15 - access("TGI"."LEGALENTITY_ID"="OU"."ORGUNIT_ID" AND "TGI"."HYPERIONBASE_ID"="OU"."HYPERIONBASE_ID")
21 - filter("TGI"."HYPERIONBASE_ID" IS NULL)
22 - access("TG"."TAXGROUP_CODE"="TGI"."TAXGROUP_CODE")
23 - access("TGI"."LEGALENTITY_ID"="OU"."ORGUNIT_ID")
25 - access("APPUSAGE_CODE"='CONSOLIDATION')
27 - filter("FD"."FIELDDATA_VALUE"=CASE INSTR("FEDTAXPK_PKG"."GETFIELDDATAGROUPSEQKEY"(164415),':') WHEN 0
THEN "FEDTAXPK_PKG"."GETFIELDDATAGROUPSEQKEY"(164415) ELSE
SUBSTR("FEDTAXPK_PKG"."GETFIELDDATAGROUPSEQKEY"(164415),1,INSTR("FEDTAXPK_PKG"."GETFIELDDATAGROUPSEQKEY"(16441
5),':')-1) END )
33 - access("LE_HB"."LEGALENTITY_ID"="FD"."LEGALENTITY_ID" AND
"LE_HB"."HYPERIONBASE_ID"="FD"."HYPERIONBASE_ID")
39 - filter("FDK"."RN"=1)
40 - filter(ROW_NUMBER() OVER ( PARTITION BY "CD"."CELLDEF_ID","FEDTAXPK_PKG"."GETFIELDDATAGROUPSEQKEY"("FD"
."FIELDDATA_GROUP_SEQUENCE") ORDER BY "FD"."FIELDDATA_GROUP_SEQUENCE")<=1)
44 - access("GRS"."FD_GRPSEQ"="FD"."FIELDDATA_PARENT_ROW_SEQUENCE" AND
"GRS"."PRS_KEY"="FEDTAXPK_PKG"."GETFIELDDATAGROUPSEQKEY"("FD"."FIELDDATA_PARENT_ROW_SEQUENCE"))
45 - filter("FD"."FIELDDATA_DELETE_IND"='N')
48 - access("TD"."TABLEDEF_ID"=2265)
51 - access("LE_HB"."LEGALENTITY_ID"="FD"."LEGALENTITY_ID" AND
"LE_HB"."HYPERIONBASE_ID"="FD"."HYPERIONBASE_ID")
55 - access("FD"."FIELDDATA_ID"="TC"."FIELDDATA_ID")
56 - filter("CD"."TABLEDEF_ID"=2265 AND "CD"."CELLDEF_KEY_IND"='Y')
57 - access("TC"."CELLDEF_ID"="CD"."CELLDEF_ID")
61 - access("FDK"."CELLDEF_ID"="CD"."CELLDEF_ID")
66 - access("AUA"."APPUSAGE_CODE"="AU"."APPUSAGE_CODE" AND "CD"."CELLDEF_ID"="AUA"."CELLDEF_ID")
74 - access("GRS"."FD_GRPSEQ"="FD"."FIELDDATA_PARENT_ROW_SEQUENCE" AND
"GRS"."PRS_KEY"="FEDTAXPK_PKG"."GETFIELDDATAGROUPSEQKEY"("FD"."FIELDDATA_PARENT_ROW_SEQUENCE"))
75 - filter("FD"."FIELDDATA_DELETE_IND"='N')
78 - access("TD"."TABLEDEF_ID"=2265)
81 - access("LE_HB"."LEGALENTITY_ID"="FD"."LEGALENTITY_ID" AND
"LE_HB"."HYPERIONBASE_ID"="FD"."HYPERIONBASE_ID")
85 - access("FD"."FIELDDATA_ID"="TC"."FIELDDATA_ID")
86 - filter("CD"."TABLEDEF_ID"=2265 AND "CD"."CELLDEF_ADJUSTABLE_IND"='Y')
87 - access("TC"."CELLDEF_ID"="CD"."CELLDEF_ID")
89 - access("FDA"."CELLDEF_ID"="CD"."CELLDEF_ID")
94 - access("AUA"."APPUSAGE_CODE"="AU"."APPUSAGE_CODE" AND "CD"."CELLDEF_ID"="AUA"."CELLDEF_ID") -
Can I write this query in another way (prefferably in optimized manner)
My database version._
[oracle@localhost ~]$ uname -a
Linux localhost.localdomain 2.6.18-194.17.1.0.1.el5 #1 SMP Wed Sep 29 15:40:03 EDT 2010 i686 i686 i386 GNU/Linux
[oracle@localhost ~]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.2.0 Production on Fri Aug 12 04:44:21 2011
Copyright (c) 1982, 2010, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> SELECT * FROM v$version;
BANNER
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - Production
PL/SQL Release 11.2.0.2.0 - Production
CORE 11.2.0.2.0 Production
TNS for Linux: Version 11.2.0.2.0 - Production
NLSRTL Version 11.2.0.2.0 - Production
SQL>
Introduction to data and logic._
I have on table called inv_leg_dummy. The main columns to consider is arrival_airport and departure_airport. Say a flight starts from kolkata (KOL) -> Goes to Dellhi (DEL) -> Goes to Hongkong (HKG) -> Goes to Tiwan (TPE). So in total KOL -> DEL -> HKG -> TPE
Data will be like:
Arrival Airport Departure Airport
HKG TPE
KOL DEL
DEL HKGPlease note that the order is not as expected, that means the flight starts from kolkata can not be determined straight way from the arrangment or any kind of flag.
The main logic is, I first take Arrival Airport HKG and see if any Departure Airport exists as HKG, then I take the next KOL and see if any Departure Airport exists as KOL. You can notice KOL is only present as arrival airport, So, This is the first leg of the flight journey. By the same logic, I can determine next leg, that is DEL (because flight goes from KOL to DEL)...
I need output like :
ARRIVAL_AIRPORT DEPARTURE_AIRPORT SEQ
HKG TPE 1
DEL HKG 2
KOL DEL 3
KOL 4So, The starting point KOL has heighest sequence (arrival is null), then KOL to DEL, DEL to HKG and finally HKG to TPE (sequence 1). The sequence may look like reverse order.
Create Table and Insert Scripts._
CREATE TABLE inv_leg_dummy
carrier VARCHAR2(3) not null,
flt_num VARCHAR2(4) not null,
flt_num_suffix VARCHAR2(1) default ' ' not null,
flt_date DATE not null,
arrival_airport VARCHAR2(5),
departure_airport VARCHAR2(5) not null
alter table inv_leg_dummy
add constraint XPKINV_LEG primary key (carrier,flt_num,flt_num_suffix,flt_date,departure_airport);
TRUNCATE table inv_leg_dummy;
INSERT INTO inv_leg_dummy VALUES ('KA',1,' ',to_date('05/23/2011','mm/dd/rrrr'),'HKG','TPE');
INSERT INTO inv_leg_dummy VALUES ('KA',1,' ',to_date('05/23/2011','mm/dd/rrrr'),'KOL','DEL');
INSERT INTO inv_leg_dummy VALUES ('KA',1,' ',to_date('05/23/2011','mm/dd/rrrr'),'DEL','HKG');
INSERT INTO inv_leg_dummy VALUES ('CX',1,' ',to_date('05/22/2011','mm/dd/rrrr'),'HKG','BNE');
INSERT INTO inv_leg_dummy VALUES ('CX',1,' ',to_date('05/22/2011','mm/dd/rrrr'),'BNE','CNS');
Now, it time to show you, What I have done!_
SQL> ed
Wrote file afiedt.buf
1 SELECT Carrier,
2 Flt_Num,
3 Flt_Date,
4 Flt_num_Suffix,
5 arrival_airport,
6 departure_airport,
7 RANK() OVER(partition by Carrier, Flt_Num, Flt_Date, Flt_num_Suffix ORDER BY Carrier, Flt_Num, Flt_Date, Flt_num_Suffix, SEQ ASC NULLS LAST) SEQ,
8 /* Fetching Maximum leg Seq No excluding Dummy Leg*/
9 max(seq) over(partition by carrier, flt_num, flt_date, flt_num_suffix order by carrier, flt_num, flt_date, flt_num_suffix) max_seq
10 FROM (SELECT k.Carrier,
11 k.Flt_Num,
12 k.Flt_Date,
13 k.Flt_num_Suffix,
14 k.departure_airport,
15 k.arrival_airport,
16 level seq
17 FROM (SELECT
18 l.Carrier,
19 l.Flt_Num,
20 l.Flt_Date,
21 l.Flt_num_Suffix,
22 l.departure_airport,
23 l.arrival_airport
24 FROM inv_leg_dummy l) k
25 START WITH k.departure_airport = case when
26 (select count(*)
27 FROM inv_leg_dummy ifl
28 WHERE ifl.arrival_airport = k.departure_airport
29 AND ifl.flt_num = k.flt_num
30 AND ifl.carrier = k.carrier
31 AND ifl.flt_num_suffix = k.Flt_num_Suffix) = 0 then k.departure_airport end
32 CONNECT BY prior k.arrival_airport = k.departure_airport
33 AND prior k.carrier = k.carrier
34 AND prior k.flt_num = k.flt_num
35 AND prior TRUNC(k.flt_date) =
36 TRUNC(k.flt_date)
37 UNION ALL
38 /* Fetching Dummy Last Leg Information for Leg_Seq No*/
39 SELECT ofl.Carrier,
40 ofl.Flt_Num,
41 ofl.Flt_Date,
42 ofl.Flt_num_Suffix,
43 ofl.arrival_airport as departure_airport,
44 NULL arrival_airport,
45 NULL seq
46 FROM inv_leg_dummy ofl
47 where NOT EXISTS (SELECT 1
48 FROM inv_leg_dummy ifl
49 WHERE ofl.arrival_airport = ifl.departure_airport
50 AND ifl.flt_num = ofl.flt_num
51 AND ifl.carrier = ofl.carrier
52 AND ifl.flt_num_suffix =ofl.Flt_num_Suffix))
53* ORDER BY 1, 2, 3, 4,7
SQL> /
CAR FLT_ FLT_DATE F ARRIV DEPAR SEQ MAX_SEQ
CX 1 22-MAY-11 BNE CNS 1 2
CX 1 22-MAY-11 HKG BNE 2 2
CX 1 22-MAY-11 HKG 3 2
KA 1 23-MAY-11 HKG TPE 1 3
KA 1 23-MAY-11 DEL HKG 2 3
KA 1 23-MAY-11 KOL DEL 3 3
KA 1 23-MAY-11 KOL 4 3
7 rows selected.
SQL> The code is giving the right output, But I feel, I have done it in a hard way. Is there any easier/optimized approach to solve the problem ?Hello
I thought I'd run run all 3 methods twice with autotrace to get an overview of the execution plans and basic performance metrics. The results are interesting.
OPs method
SQL> set autot on
SQL> SELECT Carrier,
2 Flt_Num,
3 Flt_Date,
4 Flt_num_Suffix,
5 arrival_airport,
6 departure_airport,
7 RANK() OVER(partition by Carrier, Flt_Num, Flt_Date, Flt_num_Suffix ORDER BY Carrier, Flt_Num,
53 ORDER BY 1, 2, 3, 4,7
54 /
CAR FLT_ FLT_DATE F ARRIV DEPAR SEQ MAX_SEQ
CX 1 22-MAY-11 BNE CNS 1 2
CX 1 22-MAY-11 HKG BNE 2 2
CX 1 22-MAY-11 HKG 3 2
KA 1 23-MAY-11 HKG TPE 1 3
KA 1 23-MAY-11 DEL HKG 2 3
KA 1 23-MAY-11 KOL DEL 3 3
KA 1 23-MAY-11 KOL 4 3
7 rows selected.
Execution Plan
Plan hash value: 3680289985
| Id | Operation | Name |
| 0 | SELECT STATEMENT | |
| 1 | WINDOW SORT | |
| 2 | VIEW | |
| 3 | UNION-ALL | |
|* 4 | CONNECT BY WITH FILTERING | |
|* 5 | FILTER | |
|* 6 | TABLE ACCESS FULL | INV_LEG_DUMMY |
| 7 | SORT AGGREGATE | |
|* 8 | TABLE ACCESS BY INDEX ROWID| INV_LEG_DUMMY |
|* 9 | INDEX RANGE SCAN | XPKINV_LEG |
| 10 | NESTED LOOPS | |
| 11 | CONNECT BY PUMP | |
| 12 | TABLE ACCESS BY INDEX ROWID | INV_LEG_DUMMY |
|* 13 | INDEX RANGE SCAN | XPKINV_LEG |
|* 14 | FILTER | |
| 15 | TABLE ACCESS FULL | INV_LEG_DUMMY |
|* 16 | INDEX RANGE SCAN | XPKINV_LEG |
Predicate Information (identified by operation id):
4 - access("L"."DEPARTURE_AIRPORT"=PRIOR "L"."ARRIVAL_AIRPORT" AND
"L"."CARRIER"=PRIOR "L"."CARRIER" AND "L"."FLT_NUM"=PRIOR "L"."FLT
_NUM"
AND INTERNAL_FUNCTION(PRIOR TRUNC(INTERNAL_FUNCTION("L"."FLT_DATE"
)))=TR
UNC(INTERNAL_FUNCTION("L"."FLT_DATE")))
5 - filter("L"."DEPARTURE_AIRPORT"=CASE WHEN ( (SELECT COUNT(*)
FROM "INV_LEG_DUMMY" "IFL" WHERE "IFL"."FLT_NUM_SUFFIX"=:B1 AND
"IFL"."FLT_NUM"=:B2 AND "IFL"."CARRIER"=:B3 AND
"IFL"."ARRIVAL_AIRPORT"=:B4)=0) THEN "L"."DEPARTURE_AIRPORT" END )
6 - access("L"."CARRIER"=PRIOR "L"."CARRIER")
8 - filter("IFL"."ARRIVAL_AIRPORT"=:B1)
9 - access("IFL"."CARRIER"=:B1 AND "IFL"."FLT_NUM"=:B2 AND
"IFL"."FLT_NUM_SUFFIX"=:B3)
13 - access("L"."CARRIER"=PRIOR "L"."CARRIER" AND "L"."FLT_NUM"=PRIOR
"L"."FLT_NUM" AND "L"."DEPARTURE_AIRPORT"=PRIOR "L"."ARRIVAL_AIRPO
RT")
filter("L"."DEPARTURE_AIRPORT"=PRIOR "L"."ARRIVAL_AIRPORT" AND
INTERNAL_FUNCTION(PRIOR TRUNC(INTERNAL_FUNCTION("L"."FLT_DATE")))=
TRUNC(
INTERNAL_FUNCTION("L"."FLT_DATE")))
14 - filter( NOT EXISTS (SELECT 0 FROM "INV_LEG_DUMMY" "IFL" WHERE
"IFL"."FLT_NUM_SUFFIX"=:B1 AND "IFL"."FLT_NUM"=:B2 AND
"IFL"."CARRIER"=:B3 AND "IFL"."DEPARTURE_AIRPORT"=:B4))
16 - access("IFL"."CARRIER"=:B1 AND "IFL"."FLT_NUM"=:B2 AND
"IFL"."FLT_NUM_SUFFIX"=:B3 AND "IFL"."DEPARTURE_AIRPORT"=:B4)
filter("IFL"."DEPARTURE_AIRPORT"=:B1)
Note
- rule based optimizer used (consider using cbo)
Statistics
1 recursive calls
0 db block gets
33 consistent gets
0 physical reads
0 redo size
877 bytes sent via SQL*Net to client
886 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
6 sorts (memory)
0 sorts (disk)
7 rows processed
SQL> /
CAR FLT_ FLT_DATE F ARRIV DEPAR SEQ MAX_SEQ
CX 1 22-MAY-11 BNE CNS 1 2
CX 1 22-MAY-11 HKG BNE 2 2
CX 1 22-MAY-11 HKG 3 2
KA 1 23-MAY-11 HKG TPE 1 3
KA 1 23-MAY-11 DEL HKG 2 3
KA 1 23-MAY-11 KOL DEL 3 3
KA 1 23-MAY-11 KOL 4 3
7 rows selected.
Execution Plan
Plan hash value: 3680289985
| Id | Operation | Name |
| 0 | SELECT STATEMENT | |
| 1 | WINDOW SORT | |
| 2 | VIEW | |
| 3 | UNION-ALL | |
|* 4 | CONNECT BY WITH FILTERING | |
|* 5 | FILTER | |
|* 6 | TABLE ACCESS FULL | INV_LEG_DUMMY |
| 7 | SORT AGGREGATE | |
|* 8 | TABLE ACCESS BY INDEX ROWID| INV_LEG_DUMMY |
|* 9 | INDEX RANGE SCAN | XPKINV_LEG |
| 10 | NESTED LOOPS | |
| 11 | CONNECT BY PUMP | |
| 12 | TABLE ACCESS BY INDEX ROWID | INV_LEG_DUMMY |
|* 13 | INDEX RANGE SCAN | XPKINV_LEG |
|* 14 | FILTER | |
| 15 | TABLE ACCESS FULL | INV_LEG_DUMMY |
|* 16 | INDEX RANGE SCAN | XPKINV_LEG |
Predicate Information (identified by operation id):
4 - access("L"."DEPARTURE_AIRPORT"=PRIOR "L"."ARRIVAL_AIRPORT" AND
"L"."CARRIER"=PRIOR "L"."CARRIER" AND "L"."FLT_NUM"=PRIOR "L"."FLT
_NUM"
AND INTERNAL_FUNCTION(PRIOR TRUNC(INTERNAL_FUNCTION("L"."FLT_DATE"
)))=TR
UNC(INTERNAL_FUNCTION("L"."FLT_DATE")))
5 - filter("L"."DEPARTURE_AIRPORT"=CASE WHEN ( (SELECT COUNT(*)
FROM "INV_LEG_DUMMY" "IFL" WHERE "IFL"."FLT_NUM_SUFFIX"=:B1 AND
"IFL"."FLT_NUM"=:B2 AND "IFL"."CARRIER"=:B3 AND
"IFL"."ARRIVAL_AIRPORT"=:B4)=0) THEN "L"."DEPARTURE_AIRPORT" END )
6 - access("L"."CARRIER"=PRIOR "L"."CARRIER")
8 - filter("IFL"."ARRIVAL_AIRPORT"=:B1)
9 - access("IFL"."CARRIER"=:B1 AND "IFL"."FLT_NUM"=:B2 AND
"IFL"."FLT_NUM_SUFFIX"=:B3)
13 - access("L"."CARRIER"=PRIOR "L"."CARRIER" AND "L"."FLT_NUM"=PRIOR
"L"."FLT_NUM" AND "L"."DEPARTURE_AIRPORT"=PRIOR "L"."ARRIVAL_AIRPO
RT")
filter("L"."DEPARTURE_AIRPORT"=PRIOR "L"."ARRIVAL_AIRPORT" AND
INTERNAL_FUNCTION(PRIOR TRUNC(INTERNAL_FUNCTION("L"."FLT_DATE")))=
TRUNC(
INTERNAL_FUNCTION("L"."FLT_DATE")))
14 - filter( NOT EXISTS (SELECT 0 FROM "INV_LEG_DUMMY" "IFL" WHERE
"IFL"."FLT_NUM_SUFFIX"=:B1 AND "IFL"."FLT_NUM"=:B2 AND
"IFL"."CARRIER"=:B3 AND "IFL"."DEPARTURE_AIRPORT"=:B4))
16 - access("IFL"."CARRIER"=:B1 AND "IFL"."FLT_NUM"=:B2 AND
"IFL"."FLT_NUM_SUFFIX"=:B3 AND "IFL"."DEPARTURE_AIRPORT"=:B4)
filter("IFL"."DEPARTURE_AIRPORT"=:B1)
Note
- rule based optimizer used (consider using cbo)
Statistics
0 recursive calls
0 db block gets
33 consistent gets
0 physical reads
0 redo size
877 bytes sent via SQL*Net to client
886 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
6 sorts (memory)
0 sorts (disk)
7 rows processedMy method
SQL> SELECT
2 carrier,
3 flt_num,
4 flt_num_suffix,
5 flt_date,
6 arrival_airport,
7 departure_airport,
8 COUNT(*) OVER(PARTITION BY carrier,
9 flt_num
10 ) - LEVEL + 1 seq,
11 COUNT(*) OVER(PARTITION BY carrier,
12 flt_num
13 ) - 1 max_seq
57 /
CAR FLT_ F FLT_DATE ARRIV DEPAR SEQ MAX_SEQ
CX 1 22-MAY-11 BNE CNS 1 2
CX 1 22-MAY-11 HKG BNE 2 2
CX 1 22-MAY-11 HKG 3 2
KA 1 23-MAY-11 HKG TPE 1 3
KA 1 23-MAY-11 DEL HKG 2 3
KA 1 23-MAY-11 KOL DEL 3 3
KA 1 23-MAY-11 KOL 4 3
7 rows selected.
Execution Plan
Plan hash value: 921778235
| Id | Operation | Name |
| 0 | SELECT STATEMENT | |
| 1 | SORT ORDER BY | |
| 2 | WINDOW SORT | |
|* 3 | CONNECT BY NO FILTERING WITH START-WITH| |
| 4 | COUNT | |
| 5 | VIEW | |
| 6 | UNION-ALL | |
| 7 | TABLE ACCESS FULL | INV_LEG_DUMMY |
|* 8 | FILTER | |
| 9 | TABLE ACCESS FULL | INV_LEG_DUMMY |
|* 10 | INDEX RANGE SCAN | XPKINV_LEG |
Predicate Information (identified by operation id):
3 - access("ARRIVAL_AIRPORT"=PRIOR "DEPARTURE_AIRPORT" AND
"CARRIER"=PRIOR "CARRIER" AND "FLT_NUM"=PRIOR "FLT_NUM" AND
TRUNC(INTERNAL_FUNCTION("FLT_DATE"))=INTERNAL_FUNCTION(PRIOR
TRUNC(INTERNAL_FUNCTION("FLT_DATE"))))
filter("ARRIVAL_AIRPORT" IS NULL)
8 - filter( NOT EXISTS (SELECT 0 FROM "INV_LEG_DUMMY" "DL" WHERE
"DL"."FLT_NUM"=:B1 AND "DL"."CARRIER"=:B2 AND
"DL"."DEPARTURE_AIRPORT"=:B3 AND "DL"."FLT_DATE"=:B4))
10 - access("DL"."CARRIER"=:B1 AND "DL"."FLT_NUM"=:B2 AND
"DL"."FLT_DATE"=:B3 AND "DL"."DEPARTURE_AIRPORT"=:B4)
filter("DL"."DEPARTURE_AIRPORT"=:B1 AND "DL"."FLT_DATE"=:B2)
Note
- rule based optimizer used (consider using cbo)
Statistics
1 recursive calls
0 db block gets
19 consistent gets
0 physical reads
0 redo size
877 bytes sent via SQL*Net to client
338 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
4 sorts (memory)
0 sorts (disk)
7 rows processed
SQL> /
CAR FLT_ F FLT_DATE ARRIV DEPAR SEQ MAX_SEQ
CX 1 22-MAY-11 BNE CNS 1 2
CX 1 22-MAY-11 HKG BNE 2 2
CX 1 22-MAY-11 HKG 3 2
KA 1 23-MAY-11 HKG TPE 1 3
KA 1 23-MAY-11 DEL HKG 2 3
KA 1 23-MAY-11 KOL DEL 3 3
KA 1 23-MAY-11 KOL 4 3
7 rows selected.
Execution Plan
Plan hash value: 921778235
| Id | Operation | Name |
| 0 | SELECT STATEMENT | |
| 1 | SORT ORDER BY | |
| 2 | WINDOW SORT | |
|* 3 | CONNECT BY NO FILTERING WITH START-WITH| |
| 4 | COUNT | |
| 5 | VIEW | |
| 6 | UNION-ALL | |
| 7 | TABLE ACCESS FULL | INV_LEG_DUMMY |
|* 8 | FILTER | |
| 9 | TABLE ACCESS FULL | INV_LEG_DUMMY |
|* 10 | INDEX RANGE SCAN | XPKINV_LEG |
Predicate Information (identified by operation id):
3 - access("ARRIVAL_AIRPORT"=PRIOR "DEPARTURE_AIRPORT" AND
"CARRIER"=PRIOR "CARRIER" AND "FLT_NUM"=PRIOR "FLT_NUM" AND
TRUNC(INTERNAL_FUNCTION("FLT_DATE"))=INTERNAL_FUNCTION(PRIOR
TRUNC(INTERNAL_FUNCTION("FLT_DATE"))))
filter("ARRIVAL_AIRPORT" IS NULL)
8 - filter( NOT EXISTS (SELECT 0 FROM "INV_LEG_DUMMY" "DL" WHERE
"DL"."FLT_NUM"=:B1 AND "DL"."CARRIER"=:B2 AND
"DL"."DEPARTURE_AIRPORT"=:B3 AND "DL"."FLT_DATE"=:B4))
10 - access("DL"."CARRIER"=:B1 AND "DL"."FLT_NUM"=:B2 AND
"DL"."FLT_DATE"=:B3 AND "DL"."DEPARTURE_AIRPORT"=:B4)
filter("DL"."DEPARTURE_AIRPORT"=:B1 AND "DL"."FLT_DATE"=:B2)
Note
- rule based optimizer used (consider using cbo)
Statistics
0 recursive calls
0 db block gets
19 consistent gets
0 physical reads
0 redo size
877 bytes sent via SQL*Net to client
338 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
4 sorts (memory)
0 sorts (disk)
7 rows processedSalim Chelabi's method
SQL> WITH t AS
2 (SELECT k.*, LEVEL lvl
3 FROM inv_leg_dummy k
4 CONNECT BY PRIOR k.arrival_airport = k.departure_airport
5 AND PRIOR k.flt_date = k.flt_date
6 AND PRIOR k.carrier = k.carrier
7 AND PRIOR k.flt_num = k.flt_num)
8 SELECT carrier, flt_num, flt_num_suffix, flt_date, arrival_airport,
9 departure_airport, MAX (lvl) seq,
10 MAX (MAX (lvl)) OVER (PARTITION BY carrier, flt_num, flt_num_suffix)
11 max_seq
12 FROM t
13 GROUP BY carrier,
14 flt_num,
15 flt_num_suffix,
16 flt_date,
17 arrival_airport,
18 departure_airport
19 UNION ALL
20 SELECT carrier, flt_num, flt_num_suffix, flt_date, NULL,
21 MAX (arrival_airport), MAX (lvl) + 1 seq, MAX (lvl) max_seq
22 FROM t
23 GROUP BY carrier, flt_num, flt_num_suffix, flt_date
24 ORDER BY 1, 2, 3, seq, arrival_airport NULLS LAST;
CAR FLT_ F FLT_DATE ARRIV DEPAR SEQ MAX_SEQ
CX 1 22/05/2011 00:00:00 BNE CNS 1 2
CX 1 22/05/2011 00:00:00 HKG BNE 2 2
CX 1 22/05/2011 00:00:00 HKG 3 2
KA 1 23/05/2011 00:00:00 HKG TPE 1 3
KA 1 23/05/2011 00:00:00 DEL HKG 2 3
KA 1 23/05/2011 00:00:00 KOL DEL 3 3
KA 1 23/05/2011 00:00:00 KOL 4 3
7 rows selected.
Elapsed: 00:00:00.01
Execution Plan
Plan hash value: 2360206974
| Id | Operation | Name |
| 0 | SELECT STATEMENT | |
| 1 | TEMP TABLE TRANSFORMATION | |
| 2 | LOAD AS SELECT | |
|* 3 | CONNECT BY WITHOUT FILTERING| |
| 4 | TABLE ACCESS FULL | INV_LEG_DUMMY |
| 5 | SORT ORDER BY | |
| 6 | UNION-ALL | |
| 7 | WINDOW BUFFER | |
| 8 | SORT GROUP BY | |
| 9 | VIEW | |
| 10 | TABLE ACCESS FULL | SYS_TEMP_0FD9FE280_59EF9B75 |
| 11 | SORT GROUP BY | |
| 12 | VIEW | |
| 13 | TABLE ACCESS FULL | SYS_TEMP_0FD9FE280_59EF9B75 |
Predicate Information (identified by operation id):
3 - access("K"."DEPARTURE_AIRPORT"=PRIOR "K"."ARRIVAL_AIRPORT" AND
"K"."FLT_DATE"=PRIOR "K"."FLT_DATE" AND "K"."CARRIER"=PRIOR
"K"."CARRIER" AND "K"."FLT_NUM"=PRIOR "K"."FLT_NUM")
Note
- rule based optimizer used (consider using cbo)
Statistics
57 recursive calls
10 db block gets
25 consistent gets
1 physical reads
1556 redo size
877 bytes sent via SQL*Net to client
338 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
5 sorts (memory)
0 sorts (disk)
7 rows processed
SQL> /
CAR FLT_ F FLT_DATE ARRIV DEPAR SEQ MAX_SEQ
CX 1 22/05/2011 00:00:00 BNE CNS 1 2
CX 1 22/05/2011 00:00:00 HKG BNE 2 2
CX 1 22/05/2011 00:00:00 HKG 3 2
KA 1 23/05/2011 00:00:00 HKG TPE 1 3
KA 1 23/05/2011 00:00:00 DEL HKG 2 3
KA 1 23/05/2011 00:00:00 KOL DEL 3 3
KA 1 23/05/2011 00:00:00 KOL 4 3
7 rows selected.
Elapsed: 00:00:00.01
Execution Plan
Plan hash value: 4065363664
| Id | Operation | Name |
| 0 | SELECT STATEMENT | |
| 1 | TEMP TABLE TRANSFORMATION | |
| 2 | LOAD AS SELECT | |
|* 3 | CONNECT BY WITHOUT FILTERING| |
| 4 | TABLE ACCESS FULL | INV_LEG_DUMMY |
| 5 | SORT ORDER BY | |
| 6 | UNION-ALL | |
| 7 | WINDOW BUFFER | |
| 8 | SORT GROUP BY | |
| 9 | VIEW | |
| 10 | TABLE ACCESS FULL | SYS_TEMP_0FD9FE281_59EF9B75 |
| 11 | SORT GROUP BY | |
| 12 | VIEW | |
| 13 | TABLE ACCESS FULL | SYS_TEMP_0FD9FE281_59EF9B75 |
Predicate Information (identified by operation id):
3 - access("K"."DEPARTURE_AIRPORT"=PRIOR "K"."ARRIVAL_AIRPORT" AND
"K"."FLT_DATE"=PRIOR "K"."FLT_DATE" AND "K"."CARRIER"=PRIOR
"K"."CARRIER" AND "K"."FLT_NUM"=PRIOR "K"."FLT_NUM")
Note
- rule based optimizer used (consider using cbo)
Statistics
2 recursive calls
8 db block gets
15 consistent gets
1 physical reads
604 redo size
877 bytes sent via SQL*Net to client
338 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
5 sorts (memory)
0 sorts (disk)
7 rows processed
SQL> Personally I think Salim's method seems very suiccinct and I had expected there would be more of a difference in terms of performance metrics between it and my attempt but it appears there's not much between the two - although Salim's method is generating redo as a result of the temp table through the subquery factoring. I'd be interested to see the results of a full trace between them.
Either way though, there are two alternatives which seem a fair bit more optimal than the original SQL so it's quids in I guess! :-)
David
Edited by: Bravid on Aug 12, 2011 3:24 PM
Edited by: Bravid on Aug 12, 2011 3:27 PM
Updated the comparison with Salims additional column -
How to format an account to show date format with MDX function @FORMATDATE
Hello,
I am working with an ASO cube where all accounts are set as numeric type. We have some accounts which hold date information for eg Date1 member which is a stored member will have data as 20120601 for June 1st 2012. In financial reports, i need to show this data as 06/01/2012 and using as essbase connection in FR, i cannot do this.
While i was looking for a solution, i came across the MDX function called
@FORMATDATE
format_string_expression = MdxFormat ( string_value_expression )
I was hoping that if i add a member say Date2 and make it dynamic and point it to Date1 and have this MDX format command to make the numeric data 20120601 show up as 06/01/2012.
Can this work and if yes, what would be the MDX formula in this case?
Any help in this regard will be a great help...the other alternative i have is to export this date data out into an oracle table, transform that data into to_date and after enabling the type measures in the outline, load it back in...i was hoping to avoid this extra route if this can be done with the formatting via MDX withing the essbase app.
Thanks...For all good order, here is the log from the Disk Utility:
2012-12-07 21:18:03 +0100: Disk Utility started.
2012-12-07 21:21:46 +0100: Preparing to partition disk: “WDC WD30 EZRX-00DC0B0 Media”
2012-12-07 21:21:46 +0100: Partition Scheme: GUID Partition Table
2012-12-07 21:21:46 +0100: 1 partition will be created
2012-12-07 21:21:46 +0100:
2012-12-07 21:21:46 +0100: Partition 1
2012-12-07 21:21:46 +0100: Name : “Gardermoen”
2012-12-07 21:21:46 +0100: Size : 3 TB
2012-12-07 21:21:46 +0100: File system : Mac OS Extended (Journaled)
2012-12-07 21:21:46 +0100:
2012-12-07 21:21:46 +0100: Unmounting disk
2012-12-07 21:27:59 +0100: Partition failed for disk WDC WD30 EZRX-00DC0B0 Media Wiping volume data to prevent future accidental probing failed.
B*gger. :-( -
Need Help in sql tuning in EXADATA environment
I am uploadin the sql with its current explain plan, this sql in Prd database is executing in 6-10 mins and we need to improve this sql perf to 1-2 mins as the requirement from business team.
I am giving some backgroud about this sql tuning requirement, this sql is newly developed in and currently is in UAT phase, we don't have much option for tuning code here since the sql is tool generated through COGNOS DataMart tool, options are there to look into from DBA end with plan level or creating indexes on suitible columns to reduce i/o in minimizing the rows traversing by the sql.
Is anybody can help me out here?
WITH "WCRS_CLAIM_DETAIL_VW5"
AS (SELECT "WCRS_CLAIM_DETAIL_VW"."CLAIM_DETAIL_PK_ID"
"CLAIM_DETAIL_PK_ID",
"WCRS_CLAIM_DETAIL_VW"."CLAIM_ID" "CLAIM_ID",
"WCRS_CLAIM_DETAIL_VW"."CURRENT_SNAPSHOT_IND"
"CURRENT_SNAPSHOT_IND",
"WCRS_CLAIM_DETAIL_VW"."LOSS_DT" "LOSS_DT",
"WCRS_CLAIM_DETAIL_VW"."REGULATORY_STATE_CD"
"REGULATORY_STATE_CD"
FROM "CDW_DLV_IDS"."WCRS_CLAIM_DETAIL_VW" "WCRS_CLAIM_DETAIL_VW"
WHERE "WCRS_CLAIM_DETAIL_VW"."CURRENT_SNAPSHOT_IND" = 'Y'),
"WCRS_POLICY_DETAIL_VW7"
AS (SELECT "WCRS_POLICY_DETAIL_VW"."CLAIM_NBR" "CLAIM_NBR",
"WCRS_POLICY_DETAIL_VW"."CLAIM_SYMBOL_CD" "CLAIM_SYMBOL_CD",
"WCRS_POLICY_DETAIL_VW"."CURRENT_SNAPSHOT_IND"
"CURRENT_SNAPSHOT_IND",
"WCRS_POLICY_DETAIL_VW"."KEY_OFFICE_CD" "KEY_OFFICE_CD",
"WCRS_POLICY_DETAIL_VW"."POLICY_NBR" "POLICY_NBR"
FROM "CDW_DLV_IDS"."WCRS_POLICY_DETAIL_VW" "WCRS_POLICY_DETAIL_VW"
WHERE "WCRS_POLICY_DETAIL_VW"."CURRENT_SNAPSHOT_IND" = 'Y')
SELECT /*+ gather_plan_statistics monitor bind_aware */
/* ^^unique_id */
"T0"."C0" "Account_Name",
"T0"."C1" "Accident_State_Cd",
"T0"."C2" "c3",
"T0"."C3" "PPO_Name",
"T0"."C4" "Invc_Classification_Type_Desc",
FIRST_VALUE (
"T0"."C5")
OVER (
PARTITION BY "T0"."C0",
"T0"."C1",
"T0"."C2",
"T0"."C3",
"T0"."C4",
"T0"."C6")
"Claim_Cnt___Distinct",
"T0"."C7" "Invc_Control_Number",
"T0"."C8" "Invc_Allowance_Amt",
"T0"."C9" "Invc_Charge_Amt",
"T0"."C10" "c10",
"T0"."C11" "PPO_Reduction_Amt",
"T0"."C12" "Dup_Ln_Save_Amt",
"T0"."C13" "c13",
"T0"."C14" "Sub_Total",
"T0"."C15" "c15",
"T0"."C6" "c16"
FROM (SELECT "T1"."C0" "C0",
"T1"."C1" "C1",
"T1"."C2" "C2",
"T1"."C3" "C3",
"T1"."C4" "C4",
"T1"."C6" "C5",
"T1"."C5" "C6",
"T0"."C0" "C7",
"T1"."C7" "C8",
"T1"."C8" "C9",
"T1"."C9" "C10",
"T1"."C10" "C11",
"T1"."C11" "C12",
"T1"."C12" "C13",
"T1"."C13" "C14",
"T1"."C14" "C15"
FROM (SELECT COUNT (DISTINCT "INVC_DIM_VW"."INVC_ID") "C0"
FROM "CDW_DLV_IDS"."WCRS_POLICY_GROUPING_VW" "WCRS_POLICY_GROUPING_VW",
"WCRS_CLAIM_DETAIL_VW5",
"EDW_DM"."INVC_DIM_VW" "INVC_DIM_VW",
"EDW_DM"."PROVIDER_NETWORK_DIM_VW" "PROVIDER_NETWORK_DIM_VW",
"EDW_DM"."INVC_ACTY_SNPSHT_FACT_VW" "INVC_ACTY_SNPSHT_FACT_VW6",
"EDW_DM"."CURRENT_MED_INVC_RPT_DT_VW" "CURRENT_MED_INVC_RPT_DT_VW",
"EDW_DM"."ALL_INVC_SNPSHT_FACT_VW" "ALL_INVC_SNPSHT_FACT_VW",
"CDW_DLV_IDS"."WCRS_CURRENT_CLAIM_RPT_DT_VW" "WCRS_CURRENT_CLAIM_RPT_DT_VW",
"CDW_DLV_IDS"."WCRS_CLAIM_FACT_VW" "WCRS_CLAIM_FACT_VW",
"WCRS_POLICY_DETAIL_VW7",
"EDW_DM"."INVC_CLAIM_DTL_BRDG_FACT_VW" "INVC_CLAIM_DTL_BRDG_FACT_VW"
WHERE "INVC_DIM_VW"."INVC_DELETION_IND" <> 'Y'
AND "INVC_DIM_VW"."INVC_CONSIDRTN_TYPE_DESC" =
'Original'
AND "CURRENT_MED_INVC_RPT_DT_VW"."CURRENT_MONTH_RPT_DT" =
"ALL_INVC_SNPSHT_FACT_VW"."AS_OF_MONTH_END_DT_PK_ID"
AND "WCRS_CURRENT_CLAIM_RPT_DT_VW"."CURRENT_CLAIM_RPT_DT" =
"WCRS_CLAIM_FACT_VW"."CLAIM_REPORTING_DT"
AND "WCRS_POLICY_GROUPING_VW"."ACCOUNT_NM" =
CAST ('1ST TEAM STAFFING SERVICES, INC.' AS VARCHAR (50 CHAR))
AND "WCRS_POLICY_DETAIL_VW7"."POLICY_NBR" =
"WCRS_POLICY_GROUPING_VW"."POLICY_IDENTIFIER"
AND "WCRS_POLICY_DETAIL_VW7"."CLAIM_NBR" =
"WCRS_CLAIM_FACT_VW"."CLAIM_NBR"
AND "WCRS_POLICY_DETAIL_VW7"."CLAIM_SYMBOL_CD" =
"WCRS_CLAIM_FACT_VW"."CLAIM_SYMBOL_CD"
AND "WCRS_POLICY_DETAIL_VW7"."KEY_OFFICE_CD" =
"WCRS_CLAIM_FACT_VW"."KEY_OFFICE_CD"
AND "WCRS_POLICY_DETAIL_VW7"."CURRENT_SNAPSHOT_IND" =
'Y'
AND "WCRS_CLAIM_FACT_VW"."CLAIM_DETAIL_PK_ID" =
"WCRS_CLAIM_DETAIL_VW5"."CLAIM_DETAIL_PK_ID"
AND "WCRS_CLAIM_DETAIL_VW5"."CURRENT_SNAPSHOT_IND" =
'Y'
AND "WCRS_CLAIM_FACT_VW"."CLAIM_GID" =
"INVC_CLAIM_DTL_BRDG_FACT_VW"."CLM_GID"
AND "INVC_CLAIM_DTL_BRDG_FACT_VW"."INVC_GID" =
"INVC_DIM_VW"."INVC_GID"
AND "INVC_DIM_VW"."INVC_PK_ID" =
"INVC_ACTY_SNPSHT_FACT_VW6"."INVC_PK_ID"
AND "ALL_INVC_SNPSHT_FACT_VW"."MONTH_END_DT_PK_ID" =
"INVC_ACTY_SNPSHT_FACT_VW6"."MONTH_END_DT_PK_ID"
AND "ALL_INVC_SNPSHT_FACT_VW"."INVC_GID" =
"INVC_ACTY_SNPSHT_FACT_VW6"."INVC_GID"
AND "PROVIDER_NETWORK_DIM_VW"."PROVIDER_NETWORK_PK_ID" =
"INVC_ACTY_SNPSHT_FACT_VW6"."PPO_PROVIDER_NETWORK_PK_ID"
AND "WCRS_CURRENT_CLAIM_RPT_DT_VW"."CURRENT_CLAIM_RPT_DT" =
"WCRS_CLAIM_FACT_VW"."CLAIM_REPORTING_DT") "T0",
( SELECT "WCRS_POLICY_GROUPING_VW"."ACCOUNT_NM" "C0",
"WCRS_CLAIM_DETAIL_VW5"."REGULATORY_STATE_CD" "C1",
CASE
WHEN "INVC_DIM_VW"."INVC_IN_OUT_OF_NETWORK_IND" =
'Y'
THEN
'In - Network'
WHEN "INVC_DIM_VW"."INVC_IN_OUT_OF_NETWORK_IND" =
'N'
THEN
'Out - Network'
ELSE
'Others'
END
"C2",
"PROVIDER_NETWORK_DIM_VW"."PROVIDER_NETWORK_NM" "C3",
"INVC_DIM_VW"."INVC_CLASS_TYPE_DESC" "C4",
CASE
WHEN (EXTRACT (
YEAR FROM ("WCRS_CLAIM_DETAIL_VW5"."LOSS_DT"))
IS NULL)
OR (EXTRACT (
MONTH FROM ("WCRS_CLAIM_DETAIL_VW5"."LOSS_DT"))
IS NULL)
THEN
NULL
ELSE
( EXTRACT (
YEAR FROM ("WCRS_CLAIM_DETAIL_VW5"."LOSS_DT"))
|| EXTRACT (
MONTH FROM ("WCRS_CLAIM_DETAIL_VW5"."LOSS_DT")))
END
"C5",
COUNT (DISTINCT "WCRS_CLAIM_DETAIL_VW5"."CLAIM_ID")
"C6",
SUM ("INVC_ACTY_SNPSHT_FACT_VW6"."INVC_ALWC_AMT") "C7",
SUM ("INVC_ACTY_SNPSHT_FACT_VW6"."INVC_CHRGS_AMT")
"C8",
SUM (
"INVC_ACTY_SNPSHT_FACT_VW6"."TOT_INVC_REVIEW_RULE_ALWC_AMT")
"C9",
SUM ("INVC_ACTY_SNPSHT_FACT_VW6"."INVC_PPO_REDUC_AMT")
"C10",
SUM ("INVC_ACTY_SNPSHT_FACT_VW6"."INVC_DUP_REDUC_AMT")
"C11",
SUM ("INVC_ACTY_SNPSHT_FACT_VW6"."INVC_OSR_REDUC_AMT")
"C12",
( SUM (
"INVC_ACTY_SNPSHT_FACT_VW6"."INVC_CHRGS_AMT")
- SUM ("INVC_ACTY_SNPSHT_FACT_VW6"."INVC_ALWC_AMT"))
- SUM (
"INVC_ACTY_SNPSHT_FACT_VW6"."INVC_DUP_REDUC_AMT")
"C13",
SUM (
"INVC_ACTY_SNPSHT_FACT_VW6"."INVC_CLNT_SPEC_REDUC_AMT")
"C14"
FROM "CDW_DLV_IDS"."WCRS_POLICY_GROUPING_VW" "WCRS_POLICY_GROUPING_VW",
"WCRS_CLAIM_DETAIL_VW5",
"EDW_DM"."INVC_DIM_VW" "INVC_DIM_VW",
"EDW_DM"."PROVIDER_NETWORK_DIM_VW" "PROVIDER_NETWORK_DIM_VW",
"EDW_DM"."INVC_ACTY_SNPSHT_FACT_VW" "INVC_ACTY_SNPSHT_FACT_VW6",
"EDW_DM"."CURRENT_MED_INVC_RPT_DT_VW" "CURRENT_MED_INVC_RPT_DT_VW",
"EDW_DM"."ALL_INVC_SNPSHT_FACT_VW" "ALL_INVC_SNPSHT_FACT_VW",
"CDW_DLV_IDS"."WCRS_CURRENT_CLAIM_RPT_DT_VW" "WCRS_CURRENT_CLAIM_RPT_DT_VW",
"CDW_DLV_IDS"."WCRS_CLAIM_FACT_VW" "WCRS_CLAIM_FACT_VW",
"WCRS_POLICY_DETAIL_VW7",
"EDW_DM"."INVC_CLAIM_DTL_BRDG_FACT_VW" "INVC_CLAIM_DTL_BRDG_FACT_VW"
WHERE "INVC_DIM_VW"."INVC_DELETION_IND" <> 'Y'
AND "INVC_DIM_VW"."INVC_CONSIDRTN_TYPE_DESC" =
'Original'
AND "CURRENT_MED_INVC_RPT_DT_VW"."CURRENT_MONTH_RPT_DT" =
"ALL_INVC_SNPSHT_FACT_VW"."AS_OF_MONTH_END_DT_PK_ID"
AND "WCRS_CURRENT_CLAIM_RPT_DT_VW"."CURRENT_CLAIM_RPT_DT" =
"WCRS_CLAIM_FACT_VW"."CLAIM_REPORTING_DT"
AND "WCRS_POLICY_GROUPING_VW"."ACCOUNT_NM" =
CAST ('1ST TEAM STAFFING SERVICES, INC.' AS VARCHAR (50 CHAR))
AND "WCRS_POLICY_DETAIL_VW7"."POLICY_NBR" =
"WCRS_POLICY_GROUPING_VW"."POLICY_IDENTIFIER"
AND "WCRS_POLICY_DETAIL_VW7"."CLAIM_NBR" =
"WCRS_CLAIM_FACT_VW"."CLAIM_NBR"
AND "WCRS_POLICY_DETAIL_VW7"."CLAIM_SYMBOL_CD" =
"WCRS_CLAIM_FACT_VW"."CLAIM_SYMBOL_CD"
AND "WCRS_POLICY_DETAIL_VW7"."KEY_OFFICE_CD" =
"WCRS_CLAIM_FACT_VW"."KEY_OFFICE_CD"
AND "WCRS_POLICY_DETAIL_VW7"."CURRENT_SNAPSHOT_IND" =
'Y'
AND "WCRS_CLAIM_FACT_VW"."CLAIM_DETAIL_PK_ID" =
"WCRS_CLAIM_DETAIL_VW5"."CLAIM_DETAIL_PK_ID"
AND "WCRS_CLAIM_DETAIL_VW5"."CURRENT_SNAPSHOT_IND" =
'Y'
AND "WCRS_CLAIM_FACT_VW"."CLAIM_GID" =
"INVC_CLAIM_DTL_BRDG_FACT_VW"."CLM_GID"
AND "INVC_CLAIM_DTL_BRDG_FACT_VW"."INVC_GID" =
"INVC_DIM_VW"."INVC_GID"
AND "INVC_DIM_VW"."INVC_PK_ID" =
"INVC_ACTY_SNPSHT_FACT_VW6"."INVC_PK_ID"
AND "ALL_INVC_SNPSHT_FACT_VW"."MONTH_END_DT_PK_ID" =
"INVC_ACTY_SNPSHT_FACT_VW6"."MONTH_END_DT_PK_ID"
AND "ALL_INVC_SNPSHT_FACT_VW"."INVC_GID" =
"INVC_ACTY_SNPSHT_FACT_VW6"."INVC_GID"
AND "PROVIDER_NETWORK_DIM_VW"."PROVIDER_NETWORK_PK_ID" =
"INVC_ACTY_SNPSHT_FACT_VW6"."PPO_PROVIDER_NETWORK_PK_ID"
AND "WCRS_CURRENT_CLAIM_RPT_DT_VW"."CURRENT_CLAIM_RPT_DT" =
"WCRS_CLAIM_FACT_VW"."CLAIM_REPORTING_DT"
GROUP BY "WCRS_POLICY_GROUPING_VW"."ACCOUNT_NM",
"WCRS_CLAIM_DETAIL_VW5"."REGULATORY_STATE_CD",
CASE
WHEN "INVC_DIM_VW"."INVC_IN_OUT_OF_NETWORK_IND" =
'Y'
THEN
'In - Network'
WHEN "INVC_DIM_VW"."INVC_IN_OUT_OF_NETWORK_IND" =
'N'
THEN
'Out - Network'
ELSE
'Others'
END,
"PROVIDER_NETWORK_DIM_VW"."PROVIDER_NETWORK_NM",
"INVC_DIM_VW"."INVC_CLASS_TYPE_DESC",
CASE
WHEN (EXTRACT (
YEAR FROM ("WCRS_CLAIM_DETAIL_VW5"."LOSS_DT"))
IS NULL)
OR (EXTRACT (
MONTH FROM ("WCRS_CLAIM_DETAIL_VW5"."LOSS_DT"))
IS NULL)
THEN
NULL
ELSE
( EXTRACT (
YEAR FROM ("WCRS_CLAIM_DETAIL_VW5"."LOSS_DT"))
|| EXTRACT (
MONTH FROM ("WCRS_CLAIM_DETAIL_VW5"."LOSS_DT")))
END) "T1") "T0"
ORDER BY "Account_Name" ASC NULLS LAST,
"Accident_State_Cd" ASC NULLS LAST,
"c3" ASC NULLS LAST,
"PPO_Name" ASC NULLS LAST,
"Invc_Classification_Type_Desc" ASC NULLS LAST| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Pstart| Pstop |
| 0 | SELECT STATEMENT | | 1 | 838 | 1079K (1)| 00:00:34 | | |
| 1 | TEMP TABLE TRANSFORMATION | | | | | | | |
| 2 | PX COORDINATOR | | | | | | | |
| 3 | PX SEND QC (RANDOM) | :TQ10000 | 10M| 317M| 848K (1)| 00:00:27 | | |
| 4 | LOAD AS SELECT | SYS_TEMP_0FD9D677A_286AAA2E | | | | | | |
| 5 | PX BLOCK ITERATOR | | 10M| 317M| 848K (1)| 00:00:27 | | |
|* 6 | TABLE ACCESS STORAGE FULL | WCRS_CLAIM_DETAIL | 10M| 317M| 848K (1)| 00:00:27 | | |
| 7 | PX COORDINATOR | | | | | | | |
| 8 | PX SEND QC (RANDOM) | :TQ20000 | 10M| 268M| 44875 (1)| 00:00:02 | | |
| 9 | LOAD AS SELECT | SYS_TEMP_0FD9D677B_286AAA2E | | | | | | |
| 10 | PX BLOCK ITERATOR | | 10M| 268M| 44875 (1)| 00:00:02 | | |
|* 11 | TABLE ACCESS STORAGE FULL | WCRS_POLICY_DETAIL | 10M| 268M| 44875 (1)| 00:00:02 | | |
| 12 | PX COORDINATOR | | | | | | | |
| 13 | PX SEND QC (ORDER) | :TQ40017 | 1 | 838 | 186K (2)| 00:00:06 | | |
| 14 | WINDOW SORT | | 1 | 838 | 186K (2)| 00:00:06 | | |
| 15 | PX RECEIVE | | 1 | 838 | 186K (2)| 00:00:06 | | |
| 16 | PX SEND RANGE | :TQ40016 | 1 | 838 | 186K (2)| 00:00:06 | | |
| 17 | NESTED LOOPS | | 1 | 838 | 186K (2)| 00:00:06 | | |
| 18 | BUFFER SORT | | | | | | | |
| 19 | PX RECEIVE | | | | | | | |
| 20 | PX SEND BROADCAST | :TQ40001 | | | | | | |
| 21 | VIEW | | 1 | 13 | 93216 (2)| 00:00:03 | | |
| 22 | SORT GROUP BY | | 1 | 393 | | | | |
| 23 | PX COORDINATOR | | | | | | | |
| 24 | PX SEND QC (RANDOM) | :TQ30015 | 1 | 393 | | | | |
| 25 | SORT GROUP BY | | 1 | 393 | | | | |
| 26 | PX RECEIVE | | 1 | 393 | | | | |
| 27 | PX SEND HASH | :TQ30014 | 1 | 393 | | | | |
| 28 | SORT GROUP BY | | 1 | 393 | | | | |
|* 29 | HASH JOIN ANTI | | 1 | 393 | 93216 (2)| 00:00:03 | | |
| 30 | PX RECEIVE | | 1 | 376 | 85197 (2)| 00:00:03 | | |
| 31 | PX SEND HASH | :TQ30012 | 1 | 376 | 85197 (2)| 00:00:03 | | |
| 32 | BUFFER SORT | | 1 | 838 | | | | |
| 33 | NESTED LOOPS | | 1 | 376 | 85197 (2)| 00:00:03 | | |
| 34 | NESTED LOOPS | | 1 | 358 | 85197 (2)| 00:00:03 | | |
| 35 | NESTED LOOPS | | 1 | 348 | 85197 (2)| 00:00:03 | | |
|* 36 | HASH JOIN ANTI | | 1 | 316 | 85179 (2)| 00:00:03 | | |
| 37 | PX RECEIVE | | 4 | 1156 | 77161 (2)| 00:00:03 | | |
| 38 | PX SEND HASH | :TQ30010 | 4 | 1156 | 77161 (2)| 00:00:03 | | |
|* 39 | HASH JOIN ANTI BUFFERED | | 4 | 1156 | 77161 (2)| 00:00:03 | | |
| 40 | PX RECEIVE | | 371 | 94605 | 69142 (2)| 00:00:03 | | |
| 41 | PX SEND HASH | :TQ30008 | 371 | 94605 | 69142 (2)| 00:00:03 | | |
|* 42 | HASH JOIN | | 371 | 94605 | 69142 (2)| 00:00:03 | | |
| 43 | PX RECEIVE | | 350 | 77000 | 36642 (1)| 00:00:02 | | |
| 44 | PX SEND BROADCAST | :TQ30007 | 350 | 77000 | 36642 (1)| 00:00:02 | | |
|* 45 | HASH JOIN | | 350 | 77000 | 36642 (1)| 00:00:02 | | |
| 46 | PX RECEIVE | | 140 | 25200 | 28624 (1)| 00:00:01 | | |
| 47 | PX SEND BROADCAST | :TQ30006 | 140 | 25200 | 28624 (1)| 00:00:01 | | |
|* 48 | HASH JOIN | | 140 | 25200 | 28624 (1)| 00:00:01 | | |
| 49 | PX RECEIVE | | 140 | 22820 | 25169 (1)| 00:00:01 | | |
| 50 | PX SEND BROADCAST | :TQ30005 | 140 | 22820 | 25169 (1)| 00:00:01 | | |
|* 51 | HASH JOIN BUFFERED | | 140 | 22820 | 25169 (1)| 00:00:01 | | |
| 52 | BUFFER SORT | | | | | | | |
| 53 | PX RECEIVE | | 9 | 306 | 5 (0)| 00:00:01 | | |
| 54 | T PX SEND BROADCAS | :TQ30000 | 9 | 306 | 5 (0)| 00:00:01 | | |
| 55 | INDEX ROWID TABLE ACCESS BY | WCRS_POLICY_GROUPING | 9 | 306 | 5 (0)| 00:00:01 | | |
|* 56 | AN INDEX RANGE SC | SUK3 | 9 | | 1 (0)| 00:00:01 | | |
|* 57 | HASH JOIN | | 9699K| 1193M| 25149 (1)| 00:00:01 | | |
| 58 | PX RECEIVE | | 9699K| 434M| 22205 (1)| 00:00:01 | | |
| 59 | PX SEND HASH | :TQ30003 | 9699K| 434M| 22205 (1)| 00:00:01 | | |
| 60 | NESTED LOOPS | | 9699K| 434M| 22205 (1)| 00:00:01 | | |
| 61 | BUFFER SORT | | | | | | | |
| 62 | PX RECEIVE | | | | | | | |
| 63 | DCAST PX SEND BROA | :TQ30002 | | | | | | |
| 64 | CARTESIAN MERGE JOIN | | 1 | 14 | 13 (0)| 00:00:01 | | |
| 65 | TERATOR PX BLOCK I | | 1 | 8 | 10 (0)| 00:00:01 | | |
| 66 | ESS STORAGE FULL TABLE ACC | CURRENT_MED_INVC_RPT_DT | 1 | 8 | 10 (0)| 00:00:01 | | |
| 67 | T BUFFER SOR | | 1 | 6 | 3 (0)| 00:00:01 | | |
| 68 | E PX RECEIV | | 1 | 6 | 2 (0)| 00:00:01 | | |
| 69 | BROADCAST PX SEND | :TQ30001 | 1 | 6 | 2 (0)| 00:00:01 | | |
| 70 | K ITERATOR PX BLOC | | 1 | 6 | 2 (0)| 00:00:01 | | |
| 71 | ACCESS STORAGE FULL TABLE | WCRS_CURRENT_CLAIM_RPT_DT | 1 | 6 | 2 (0)| 00:00:01 | | |
| 72 | TOR PX BLOCK ITERA | | 9699K| 305M| 22192 (1)| 00:00:01 | KEY | KEY |
|* 73 | STORAGE FULL TABLE ACCESS | WCRS_CURRENT_CLAIM_FACT | 9699K| 305M| 22192 (1)| 00:00:01 | KEY | KEY |
| 74 | PX RECEIVE | | 10M| 785M| 2907 (2)| 00:00:01 | | |
| 75 | PX SEND HASH | :TQ30004 | 10M| 785M| 2907 (2)| 00:00:01 | | |
|* 76 | VIEW | | 10M| 785M| 2907 (2)| 00:00:01 | | |
| 77 | TOR PX BLOCK ITERA | | 10M| 268M| 2907 (2)| 00:00:01 | | |
| 78 | STORAGE FULL TABLE ACCESS | SYS_TEMP_0FD9D677B_286AAA2E | 10M| 268M| 2907 (2)| 00:00:01 | | |
|* 79 | VIEW | | 10M| 168M| 3439 (2)| 00:00:01 | | |
| 80 | PX BLOCK ITERATOR | | 10M| 317M| 3439 (2)| 00:00:01 | | |
| 81 | E FULL TABLE ACCESS STORAG | SYS_TEMP_0FD9D677A_286AAA2E | 10M| 317M| 3439 (2)| 00:00:01 | | |
| 82 | PX BLOCK ITERATOR | | 15M| 599M| 7994 (1)| 00:00:01 | | |
| 83 | LL TABLE ACCESS STORAGE FU | INVC_CLAIM_DTL_BRDG_FACT | 15M| 599M| 7994 (1)| 00:00:01 | | |
| 84 | PX BLOCK ITERATOR | | 15M| 521M| 32477 (2)| 00:00:02 | | |
|* 85 | TABLE ACCESS STORAGE FULL | INVC_DIM | 15M| 521M| 32477 (2)| 00:00:02 | | |
| 86 | PX RECEIVE | | 15M| 509M| 7994 (1)| 00:00:01 | | |
| 87 | PX SEND HASH | :TQ30009 | 15M| 509M| 7994 (1)| 00:00:01 | | |
| 88 | PX BLOCK ITERATOR | | 15M| 509M| 7994 (1)| 00:00:01 | | |
| 89 | TABLE ACCESS STORAGE FULL | INVC_CLAIM_DTL_BRDG_FACT | 15M| 509M| 7994 (1)| 00:00:01 | | |
| 90 | PX RECEIVE | | 15M| 404M| 7994 (1)| 00:00:01 | | |
| 91 | PX SEND HASH | :TQ30011 | 15M| 404M| 7994 (1)| 00:00:01 | | |
| 92 | PX BLOCK ITERATOR | | 15M| 404M| 7994 (1)| 00:00:01 | | |
| 93 | TABLE ACCESS STORAGE FULL | INVC_CLAIM_DTL_BRDG_FACT | 15M| 404M| 7994 (1)| 00:00:01 | | |
| 94 | TABLE ACCESS BY INDEX ROWID | INVC_ACTY_SNPSHT_FACT | 1 | 32 | 18 (0)| 00:00:01 | | |
|* 95 | INDEX RANGE SCAN | IFK_XPKINVOICE_ACTIVITY_SNAPSH | 1 | | 1 (0)| 00:00:01 | | |
|* 96 | INDEX UNIQUE SCAN | IFK_XPKPROVIDER_NETWORK_DIM | 1 | 10 | 0 (0)| 00:00:01 | | |
|* 97 | INDEX RANGE SCAN | IFK_XPKALL_INVC_SNPSHT_FACT | 1 | 18 | 1 (0)| 00:00:01 | | |
| 98 | PX RECEIVE | | 15M| 254M| 7994 (1)| 00:00:01 | | |
| 99 | PX SEND HASH | :TQ30013 | 15M| 254M| 7994 (1)| 00:00:01 | | |
| 100 | PX BLOCK ITERATOR | | 15M| 254M| 7994 (1)| 00:00:01 | | |
| 101 | TABLE ACCESS STORAGE FULL | INVC_CLAIM_DTL_BRDG_FACT | 15M| 254M| 7994 (1)| 00:00:01 | | |
| 102 | VIEW | | 1 | 825 | | | | |
| 103 | SORT GROUP BY | | 1 | 430 | 93216 (2)| 00:00:03 | | |
| 104 | BUFFER SORT | | | | | | | |
| 105 | PX RECEIVE | | 1 | 430 | 93216 (2)| 00:00:03 | | |
| 106 | PX SEND HASH | :TQ40015 | 1 | 430 | 93216 (2)| 00:00:03 | | |
|*107 | HASH JOIN ANTI BUFFERED | | 1 | 430 | 93216 (2)| 00:00:03 | | |
| 108 | PX RECEIVE | | 1 | 413 | 85198 (2)| 00:00:03 | | |
| 109 | PX SEND HASH | :TQ40013 | 1 | 413 | 85198 (2)| 00:00:03 | | |
| 110 | BUFFER SORT | | 1 | 838 | | | | |
| 111 | NESTED LOOPS | | 1 | 413 | 85198 (2)| 00:00:03 | | |
| 112 | NESTED LOOPS | | 1 | 395 | 85197 (2)| 00:00:03 | | |
| 113 | NESTED LOOPS | | 1 | 369 | 85197 (2)| 00:00:03 | | |
|*114 | HASH JOIN ANTI | | 1 | 311 | 85179 (2)| 00:00:03 | | |
| 115 | PX RECEIVE | | 4 | 1136 | 77161 (2)| 00:00:03 | | |
| 116 | PX SEND HASH | :TQ40011 | 4 | 1136 | 77161 (2)| 00:00:03 | | |
|*117 | HASH JOIN ANTI BUFFERED | | 4 | 1136 | 77161 (2)| 00:00:03 | | |
| 118 | PX RECEIVE | | 371 | 92750 | 69143 (2)| 00:00:03 | | |
| 119 | PX SEND HASH | :TQ40009 | 371 | 92750 | 69143 (2)| 00:00:03 | | |
|*120 | HASH JOIN | | 371 | 92750 | 69143 (2)| 00:00:03 | | |
| 121 | PX RECEIVE | | 350 | 72450 | 36642 (1)| 00:00:02 | | |
| 122 | PX SEND BROADCAST | :TQ40008 | 350 | 72450 | 36642 (1)| 00:00:02 | | |
|*123 | HASH JOIN | | 350 | 72450 | 36642 (1)| 00:00:02 | | |
| 124 | PX RECEIVE | | 140 | 23380 | 28624 (1)| 00:00:01 | | |
| 125 | PX SEND BROADCAST | :TQ40007 | 140 | 23380 | 28624 (1)| 00:00:01 | | |
|*126 | HASH JOIN | | 140 | 23380 | 28624 (1)| 00:00:01 | | |
| 127 | PX RECEIVE | | 140 | 15540 | 25169 (1)| 00:00:01 | | |
| 128 | PX SEND BROADCAST | :TQ40006 | 140 | 15540 | 25169 (1)| 00:00:01 | | |
|*129 | HASH JOIN BUFFERED | | 140 | 15540 | 25169 (1)| 00:00:01 | | |
| 130 | BUFFER SORT | | | | | | | |
| 131 | PX RECEIVE | | 9 | 306 | 5 (0)| 00:00:01 | | |
| 132 | PX SEND BROADCAST | :TQ40000 | 9 | 306 | 5 (0)| 00:00:01 | | |
| 133 | ROWID TABLE ACCESS BY INDEX | WCRS_POLICY_GROUPING | 9 | 306 | 5 (0)| 00:00:01 | | |
|*134 | INDEX RANGE SCAN | SUK3 | 9 | | 1 (0)| 00:00:01 | | |
|*135 | HASH JOIN | | 9699K| 712M| 25149 (1)| 00:00:01 | | |
| 136 | PX RECEIVE | | 10M| 287M| 2907 (2)| 00:00:01 | | |
| 137 | PX SEND HASH | :TQ40004 | 10M| 287M| 2907 (2)| 00:00:01 | | |
|*138 | VIEW | | 10M| 287M| 2907 (2)| 00:00:01 | | |
| 139 | PX BLOCK ITERATOR | | 10M| 268M| 2907 (2)| 00:00:01 | | |
| 140 | E FULL TABLE ACCESS STORAG | SYS_TEMP_0FD9D677B_286AAA2E | 10M| 268M| 2907 (2)| 00:00:01 | | |
| 141 | PX RECEIVE | | 9699K| 434M| 22205 (1)| 00:00:01 | | |
| 142 | PX SEND HASH | :TQ40005 | 9699K| 434M| 22205 (1)| 00:00:01 | | |
| 143 | NESTED LOOPS | | 9699K| 434M| 22205 (1)| 00:00:01 | | |
| 144 | BUFFER SORT | | | | | | | |
| 145 | PX RECEIVE | | | | | | | |
| 146 | PX SEND BROADCAST | :TQ40003 | | | | | | |
| 147 | IAN MERGE JOIN CARTES | | 1 | 14 | 13 (0)| 00:00:01 | | |
| 148 | R PX BLOCK ITERATO | | 1 | 8 | 10 (0)| 00:00:01 | | |
| 149 | ORAGE FULL TABLE ACCESS ST | CURRENT_MED_INVC_RPT_DT | 1 | 8 | 10 (0)| 00:00:01 | | |
| 150 | BUFFER SORT | | 1 | 6 | 3 (0)| 00:00:01 | | |
| 151 | PX RECEIVE | | 1 | 6 | 2 (0)| 00:00:01 | | |
| 152 | AST PX SEND BROADC | :TQ40002 | 1 | 6 | 2 (0)| 00:00:01 | | |
| 153 | ATOR PX BLOCK ITER | | 1 | 6 | 2 (0)| 00:00:01 | | |
| 154 | STORAGE FULL TABLE ACCESS | WCRS_CURRENT_CLAIM_RPT_DT | 1 | 6 | 2 (0)| 00:00:01 | | |
| 155 | PX BLOCK ITERATOR | | 9699K| 305M| 22192 (1)| 00:00:01 | KEY | KEY |
|*156 | E FULL TABLE ACCESS STORAG | WCRS_CURRENT_CLAIM_FACT | 9699K| 305M| 22192 (1)| 00:00:01 | KEY | KEY |
|*157 | VIEW | | 10M| 555M| 3439 (2)| 00:00:01 | | |
| 158 | PX BLOCK ITERATOR | | 10M| 317M| 3439 (2)| 00:00:01 | | |
| 159 | TABLE ACCESS STORAGE FULL | SYS_TEMP_0FD9D677A_286AAA2E | 10M| 317M| 3439 (2)| 00:00:01 | | |
| 160 | PX BLOCK ITERATOR | | 15M| 599M| 7994 (1)| 00:00:01 | | |
| 161 | TABLE ACCESS STORAGE FULL | INVC_CLAIM_DTL_BRDG_FACT | 15M| 599M| 7994 (1)| 00:00:01 | | |
| 162 | PX BLOCK ITERATOR | | 15M| 641M| 32477 (2)| 00:00:02 | | |
|*163 | TABLE ACCESS STORAGE FULL | INVC_DIM | 15M| 641M| 32477 (2)| 00:00:02 | | |
| 164 | PX RECEIVE | | 15M| 509M| 7994 (1)| 00:00:01 | | |
| 165 | PX SEND HASH | :TQ40010 | 15M| 509M| 7994 (1)| 00:00:01 | | |
| 166 | PX BLOCK ITERATOR | | 15M| 509M| 7994 (1)| 00:00:01 | | |
| 167 | TABLE ACCESS STORAGE FULL | INVC_CLAIM_DTL_BRDG_FACT | 15M| 509M| 7994 (1)| 00:00:01 | | |
| 168 | PX RECEIVE | | 15M| 404M| 7994 (1)| 00:00:01 | | |
| 169 | PX SEND HASH | :TQ40012 | 15M| 404M| 7994 (1)| 00:00:01 | | |
| 170 | PX BLOCK ITERATOR | | 15M| 404M| 7994 (1)| 00:00:01 | | |
| 171 | TABLE ACCESS STORAGE FULL | INVC_CLAIM_DTL_BRDG_FACT | 15M| 404M| 7994 (1)| 00:00:01 | | |
| 172 | TABLE ACCESS BY INDEX ROWID | INVC_ACTY_SNPSHT_FACT | 1 | 58 | 18 (0)| 00:00:01 | | |
|*173 | INDEX RANGE SCAN | IFK_XPKINVOICE_ACTIVITY_SNAPSH | 1 | | 1 (0)| 00:00:01 | | |
| 174 | TABLE ACCESS BY INDEX ROWID | PROVIDER_NETWORK_DIM | 1 | 26 | 0 (0)| 00:00:01 | | |
|*175 | INDEX UNIQUE SCAN | IFK_XPKPROVIDER_NETWORK_DIM | 1 | | 0 (0)| 00:00:01 | | |
|*176 | INDEX RANGE SCAN | IFK_XPKALL_INVC_SNPSHT_FACT | 1 | 18 | 1 (0)| 00:00:01 | | |
| 177 | PX RECEIVE | | 15M| 254M| 7994 (1)| 00:00:01 | | |
| 178 | PX SEND HASH | :TQ40014 | 15M| 254M| 7994 (1)| 00:00:01 | | |
| 179 | PX BLOCK ITERATOR | | 15M| 254M| 7994 (1)| 00:00:01 | | |
| 180 | TABLE ACCESS STORAGE FULL | INVC_CLAIM_DTL_BRDG_FACT | 15M| 254M| 7994 (1)| 00:00:01 | | |
---------------------------------------------------------------------------------------------------------------------------------------------------------------
Maybe you are looking for
-
Crystal report hangs when calling oracle package
hi i have a oracle package that calls a proceadure, if i test this package in PLSQL developer it compiles and i get sensible results this package has been designed using a ref type cursor to be called from crystal reports. it primary objective when t
-
Links in Word do not convert to PDF
I have a word document I created in Word 2008 with a lot of links. When I convert it to PDF (Print, Save as PDF), the links do not work in the conversion to PDF - Adobe Acrobat. I can't figure out what the problem is and I have a ton of similar files
-
Can't update font from CC Library in Illustrator
Once I have a Comp file open in Illustrator, I am unable to change font using a style I have saved in my CC Library. I can change the style using the usual character tools, and I can apply the styles in InDesign. When I select the text box in Illustr
-
Hi I am developing a report in MRP. I am getting the header data of MRP in MDKP Table. No Line items is displayed in MDTB MRP line items table. System is showing no entries in this table. What could be the possible solution.
-
What is this folder .trashes?
On my MAC, there are, just recently, a number of folders, all preceded with a ".", such as .trashes when I open Finder. Before I do anything like trying to delete these, I am just wondering what they are and where they came from. Can I clean all of t