START WITH and CONNECT BY in Oracle SQL ( hierarchical relationship)
Hi, the original table as below
Customer_ID Account_ID Paying_Account_ID Parent_Account_ID Company_ID
158 158 158 158 0
159 159 158 158 0
160 160 158 158 0
181 181 181 181 0
183 183 183 183 0
24669 24669 24669 24669 0
24671 24671 24671 24669 0
24670 24670 24670 24669 0
3385127 3385127 3385127 24670 0To identify the hierarchical relationship of the data, which are PARENT_ACCOUNT_ID & ACCOUNT_ID, below is the query that I was used.
select lpad(' ', 2*level) || A.ACCOUNT_ID AS LEVEL_LABEL, CONNECT_BY_ISCYCLE "Cycle", LEVEL, A.* from ACCOUNT A
START WITH parent_account_id = account_id
CONNECT BY NOCYCLE PRIOR A.ACCOUNT_ID = A.PARENT_ACCOUNT_ID
AND account_id != parent_account_id
;This is the result from the query
Level_Label Level Cycle Customer_ID Account_ID Paying_Account_ID Parent_Account_ID Company_ID
158 1 0 158 158 158 158 0
159 2 0 159 159 158 158 0
160 2 0 160 160 158 158 0
181 1 0 181 181 181 181 0
183 1 0 183 183 183 183 0
24669 1 0 24669 24669 24669 24669 0
24671 2 0 24671 24671 24671 24669 0
24670 2 0 24670 24670 24670 24669 0
3385127 3 0 3385127 3385127 3385127 24670 0My questions is how can I modified the query in order to calcuate the values for:
My_Total_PR - Number of my child PR accounts which doest not include itself.
Total_PR - Total number of PR accounts in the overall structure
My_Total_NPR - Number of my child NPR accounts which doest not include itself.
Total_NPR - Total number of NPR accounts in the overall structure
*PR stand for payment responsible, for instance the payment responsible for Account 158 is 158 (Paying_Account_ID), so the Total_PR for 158 is 3 (158, 159, 160)
*NPR stand for Non payment responsible, for instance the payment responsible for Account 159 is 158 (Paying_Account_ID), so the Total_NPR for 159 is 1
This is the expected result, Any advice much appreciated. Thanks
Level_Label Level Cycle My_Total_PR Total_PR My_Total_NPR Total_NPR Paying_Account
158 1 0 2 3 0 0 158
159 2 0 0 0 0 1 158
160 2 0 0 0 0 1 158
181 1 0 0 1 0 0 181
183 1 0 0 1 0 0 183
24669 1 0 0 1 3 3 24669
24671 2 0 0 1 0 0 24671
24670 2 0 0 1 1 1 24670
3385127 3 0 0 1 0 0 3385127Edited by: user11432758 on 14-Feb-2012 01:00
Edited by: user11432758 on 14-Feb-2012 07:05
Hi,
user11432758 wrote:
Hi below is the DDL statment, thanks
CREATE TABLE "SYSTEM"."ACCOUNT" ...
Don't create your own objects in the SYSTEM schema, or any schema that comes with the database. Create a separate schema, and put your objects into it. You'll have fewer security problems, and migrating to a new database will be easier.
Here's one way to can get the aggregates that you want:
WITH got_descendants AS
SELECT CONNECT_BY_ROOT account_id AS ancestor_id
, paying_account_id
, LEVEL AS lvl
FROM account
CONNECT BY NOCYCLE PRIOR account_id = parent_account_id
AND account_id != parent_account_id
SELECT ancestor_id
, COUNT (CASE WHEN lvl > 1
AND ancestor_id = paying_account_id THEN 1 END) AS my_total_pr
, COUNT (CASE WHEN ancestor_id = paying_account_id THEN 1 END) AS total_pr
, COUNT (CASE WHEN lvl > 1
AND ancestor_id != paying_account_id THEN 1 END) AS my_total_npr
, COUNT (CASE WHEN ancestor_id != paying_account_id THEN 1 END) AS total_npr
FROM got_descendants
GROUP BY ancestor_id
;Output:
` MY_ MY_
TOTAL TOTAL TOTAL TOTAL
ANCESTOR_ID _PR _PR _NPR _NPR
158 2 3 0 0
159 0 0 0 1
160 0 0 0 1
181 0 1 0 0
183 0 1 0 0
24669 0 1 3 3
24670 0 1 1 1
24671 0 1 0 0
3385217 0 1 0 0This gives you the right numbers, but how can we get them in an order that reflects the hierarchy, with the columns (such as lvl) that are derived from the hierarchy?
One way would be to do two CONNECT BY queries; one without a START WITH clause (like the one above) that gets the aggregates, and the other with a START WITH clause (like your original query), that is in the right order, and has columns such as level_label and level. We could join the result sets and get exactly what we want. I'll leave that as an exercise.
Here's another way, that gets the right results with only one CONNECT BY query:
WITH got_descendants AS
SELECT CONNECT_BY_ROOT account_id AS ancestor_id
, paying_account_id
, account_id
, LEVEL AS lvl
, CONNECT_BY_ISCYCLE AS cycle
, CASE
WHEN CONNECT_BY_ROOT account_id
= CONNECT_BY_ROOT parent_account_id
THEN ROWNUM
END AS r_num
FROM account
CONNECT BY NOCYCLE PRIOR account_id = parent_account_id
AND account_id != parent_account_id
ORDER SIBLINGS BY account_id -- Optional
, got_o_num AS
SELECT got_descendants.*
, MIN (r_num) OVER (PARTITION BY account_id) AS o_num
, MAX (lvl) OVER (PARTITION BY account_id) AS max_lvl
FROM got_descendants
SELECT LPAD ( ' '
, 2 * (MIN (max_lvl) - 1)
) || ancestor_id AS level_label
, MIN (max_lvl) AS "Level"
, MIN (cycle) AS "Cycle"
, COUNT (CASE WHEN lvl > 1
AND ancestor_id = paying_account_id THEN 1 END) AS my_total_pr
, COUNT (CASE WHEN ancestor_id = paying_account_id THEN 1 END) AS total_pr
, COUNT (CASE WHEN lvl > 1
AND ancestor_id != paying_account_id THEN 1 END) AS my_total_npr
, COUNT (CASE WHEN ancestor_id != paying_account_id THEN 1 END) AS total_npr
, MIN (paying_account_id) AS paying_account
FROM got_o_num
GROUP BY ancestor_id
ORDER BY MIN (o_num)
;Output:
` MY_ MY_
TOTAL TOTAL TOTAL TOTAL PAYING_
LEVEL_LABEL Level Cycle _PR _PR _NPR _NPR ACCOUNT
158 1 0 2 3 0 0 158
159 2 0 0 0 0 1 158
160 2 0 0 0 0 1 158
181 1 0 0 1 0 0 181
183 1 0 0 1 0 0 183
24669 1 0 0 1 3 3 24669
24670 2 0 0 1 1 1 24670
3385217 3 0 0 1 0 0 3385217
24671 2 0 0 1 0 0 24671This is exactly what you requested, except that you posted the row with level_label=' 24671' before the row with level_label=' 24671'. You may not care which of those comes first, but if that's important, explain why those rows need to be in descending order by account_id, while '159 and '160' are in ascending order. You'll need to change the ORDER SIBLINGS BY clause accordingly.
Similar Messages
-
How to use SQL filtercondition 'Start with' and 'connect by' in ADF's LOV?
Hello every!
I can not use 'Start with' and 'connect by' with parameter in creating ADF's LOV?
How could I do with it?
Alexassuming you are using adf 11g,
You need to use View Criteria with the View Object attribute that has a LOV model.
Follow this, to get some idea http://andrejusb.blogspot.com/2008/12/cascading-lovs-in-oracle-adf-11g-update.html
hope this helps, -
Using START WITH and CONNECT BY PRIOR in a report
Hi - I am using Oracle 9i and reports 10g. Does anyone know of a reason why running my sql in TOAD will produce the correct results, but the report is dropping records? I am using start with and connect by prior to build a hierarchy of linked records. The report is dropping the "child records" and only returning records from the route level.
Thanks you for your help.Hi user574499
Could u pls share us ur Query...?
Regards,
Abdetu... -
What is "with" and "Connecty By" in Oracle SQL
Hello All,
I'm Just going through the forum topics, I have seen sql queries starts like "with t as" and at the end it closes like "connect ". I have seen this kind for normal queries also. Please let me know what is the "with" concept and when do we use that?
Thanks in Advance!!!And in 11gR2 you can combine the two with the new feature Recursive Subquery Refactoring (well sort of, because you don't need the connect by bit)
I'd link to the official docs but they seem to be suffering intermittent issues at the moment so:
http://technology.amis.nl/blog/6267/oracle-rdbms-11gr2-new-style-hierarchical-querying-using-recursive-subquery-factoring
http://technology.amis.nl/blog/6104/oracle-rdbms-11gr2-goodbye-connect-by-or-the-end-of-hierarchical-querying-as-we-know-it -
How i use start with and rollup both in one query
hi master
sir i use rollup function for subtotal but rollup not give tree
for tree i want to use start with and connect by function
but that query give error
sir how i use both rollup and start with connect by in one query
for tree wise subtotal
please give me idea
thanking youhi master
thank for your reply
sir i get accid and title from master table and balance from detial table then system give me error
sir i send me all table and data with query and error
Sir this is my master table
SQL> desc chartofacc;
Name Null? Type
PARENT NUMBER
CHILD NUMBER
ACCID NOT NULL VARCHAR2(15)
TITLE VARCHAR2(99)
CAMPID VARCHAR2(2)
ACTIVE NUMBER
FSTATUS NUMBER
Data
Parent child accid
1 K1
1 11 K11
11 1101 K1101
11 1102 K1102
11 1103 K1103
11 1104 K1104
11 1105 K1105
11 1106 K1106
11 1107 K1107
11 1108 K1108
11 1109 K1109
11 1110 K1110
11 1111 K1111
11 1112 K1112
11 1113 K1113
11 1114 K1114
1 12 K12
12 1201 K1201
12 1202 K1202
12 1203 K1203
1 13 K13
13 1301 K1301
1301 130101 K130101
1301 130102 K130102
1301 130103 K130103
1301 130104 K130104
1301 130105 K130105
1301 130106 K130106
1301 130107 K130107
1301 130108 K130108
1301 130109 K130109
1301 130110 K130110
1301 130111 K130111
1301 130112 K130112
1301 130113 K130113
1301 130114 K130114
1301 130115 K130115
13 1302 K1302
1302 130201 K130201
1302 130202 K130202
1302 130203 K130203
1302 130204 K130204
1302 130205 K130205
13 1303 K1303
1303 130301 K130301
1303 130302 K130302
1303 130303 K130303
13 1304 K1304
1304 130401 K130401
1304 130402 K130402
1304 130403 K130403
1304 130404 K130404
1304 130405 K130405
1304 130406 K130406
1304 130407 K130407
1304 130408 K130408
13 1305 K1305
1305 130501 K130501
1305 130502 K130502
13 1306 K1306
1306 130601 K130601
13 1307 K1307
1307 130701 K130701
1307 130702 K130702
1307 130703 K130703
1307 130704 K130704
13 1308 K1308
1308 130801 K130801
1308 130802 K130802
1308 130803 K130803
1308 130804 K130804
1308 130805 K130805
1308 130806 K130806
1308 130807 K130807
1308 130808 K130808
1308 130809 K130809
1308 130810 K130810
1308 130811 K130811
1308 130812 K130812
1308 130813 K130813
13 1309 K1309
13 1310 K1310
13 1311 K1311
1311 131101 K131101
2 K2
2 21 K21
21 2101 K2101
2101 210101 K210101
2101 210102 K210102
2101 210103 K210103
2101 210104 K210104
21 2102 K2102
2102 210201 K210201
2102 210202 K210202
2102 210203 K210203
2102 210204 K210204
21 2103 K2103
2103 210301 K210301
2103 210302 K210302
2103 210303 K210303
2103 210304 K210304
21 2104 K2104
2104 210401 K210401
2104 210402 K210402
2104 210403 K210403
2104 210404 K210404
2 22 K22
22 2201 K2201
2201 220101 K220101
2201 220102 K220102
2201 220103 K220103
2201 220104 K220104
2201 220105 K220105
22 2202 K2202
2202 220201 K220201
2202 220202 K220202
2202 220203 K220203
2202 220204 K220204
22 2203 K2203
2203 220301 K220301
2203 220302 K220302
2203 220303 K220303
2203 220304 K220304
22 2204 K2204
2204 220401 K220401
2204 220402 K220402
2204 220403 K220403
22 2205 K2205
2205 220501 K220501
2205 220502 K220502
220502 22050201 K22050201
220502 22050202 K22050202
220502 22050203 K22050203
220502 22050204 K22050204
22 2206 K2206
2206 220601 K220601
2206 220602 K220602
2206 220603 K220603
2206 220604 K220604
2 23 K23
23 2301 K2301
2301 230101 K230101
2301 230102 K230102
2301 230103 K230103
2301 230104 K230104
2301 230105 K230105
2301 230106 K230106
2301 230107 K230107
2301 230108 K230108
23 2302 K2302
2302 230201 K230201
2302 230202 K230202
2302 230203 K230203
2302 230204 K230204
23 2303 K2303
2303 230301 K230301
2303 230302 K230302
23 2304 K2304
2304 230401 K230401
2304 230402 K230402
2304 230403 K230403
23 2305 K2305
2305 230501 K230501
23 2306 K2306
2306 230601 K230601
2306 230602 K230602
2306 230603 K230603
2306 230604 K230604
23 2307 K2307
23 2308 K2308
2308 230801 K230801
2308 230802 K230802
2308 230803 K230803
23 2309 K2309
2309 230901 K230901
2309 230902 K230902
2309 230903 K230903
2309 230904 K230904
23 2310 K2310
2310 231001 K231001
2310 231002 K231002
2310 231003 K231003
23 2311 K2311
2311 231101 K231101
2311 231102 K231102
2311 231103 K231103
23 2312 K2312
2312 231201 K231201
2312 231202 K231202
2312 231203 K231203
2312 231204 K231204
23 2313 K2313
2313 231301 K231301
2313 231302 K231302
2313 231303 K231303
2313 231304 K231304
2313 231305 K231305
2313 231306 K231306
2313 231307 K231307
2313 231308 K231308
2313 231309 K231309
2313 231310 K231310
2313 231311 K231311
2313 231312 K231312
2313 231313 K231313
2313 231314 K231314
2313 231315 K231315
23 2314 K2314
2314 231401 K231401
2314 231402 K231402
2314 231403 K231403
2314 231404 K231404
2314 231405 K231405
2314 231406 K231406
2314 231407 K231407
23 2315 K2315
23 2316 K2316
2316 231601 K231601
2316 231602 K231602
23 2317 K2317
23 2318 K2318
23 2319 K2319
2319 231901 K231901
2319 231902 K231902
2319 231903 K231903
2319 231904 K231904
2319 231905 K231905
2319 231906 K231906
23 2320 K2320
2320 232001 K232001
3 K3
3 31 K31
31 3101 K3101
31 3102 K3102
31 3103 K3103
31 3104 K3104
31 3105 K3105
3 32 K32
32 3201 K3201
32 3202 K3202
32 3203 K3203
32 3204 K3204
32 3205 K3205
32 3206 K3206
32 3207 K3207
4 K4
4 41 K41
41 4101 K4101
4101 410101 K410101
4101 410102 K410102
4101 410103 K410103
4101 410104 K410104
4101 410105 K410105
4101 410106 K410106
4101 410107 K410107
4101 410108 K410108
4101 410109 K410109
4101 410110 K410110
4101 410111 K410111
4101 410112 K410112
4101 410113 K410113
4101 410114 K410114
4101 410115 K410115
4101 410116 K410116
4101 410117 K410117
4101 410118 K410118
4101 410119 K410119
4101 410120 K410120
4101 410121 K410121
4101 410122 K410122
4101 410123 K410123
4101 410124 K410124
4101 410125 K410125
4101 410126 K410126
4101 410127 K410127
4101 410128 K410128
4101 410129 K410129
4101 410130 K410130
4101 410131 K410131
4101 410132 K410132
41 4102 K4102
41 4103 K4103
41 4104 K4104
4104 410401 K410401
4104 410402 K410402
4104 410403 K410403
4104 410404 K410404
41 4105 K4105
41 4106 K4106
41 4107 K4107
41 4108 K4108
4108 410801 K410801
4108 410802 K410802
4108 410803 K410803
41 4109 K4109
4109 410901 K410901
4109 410902 K410902
4109 410903 K410903
41 4110 K4110
41 4111 K4111
4111 411101 K411101
4111 411102 K411102
4111 411103 K411103
41 4112 K4112
4112 411201 K411201
41 4113 K4113
4113 411301 K411301
41 4114 K4114
4114 411401 K411401
4114 411402 K411402
5 K5
5 51 K51
51 5101 K5101
51 5102 K5102
51 5103 K5103
51 5104 K5104
51 5105 K5105
51 5106 K5106
51 5107 K5107
51 5108 K5108
51 5109 K5109
51 5110 K5110
51 5111 K5111
51 5112 K5112
51 5113 K5113
51 5114 K5114
6 K6
6 61 K61
7 K7
7 71 K71
7 72 K72
7 73 K73
7 74 K74
7 75 K75
7 76 K76
This is my detil table
SQL> desc accbal;
Name Null? Type
ACCID VARCHAR2(15)
YEARID NUMBER
CRBAL NUMBER
DRBAL NUMBER
ENTDATE DATE
BALID NUMBER
Data in detail
K1101 46291132
K1102 13182173
K1103 23784045
K1107 10001795
K1108 9083529
K1110 4224350
K1112 6696832
K1113 7963381
K1114 742766
K1201 1486082
K130104 1977616
K130106 736266
K130107 396673
K130108 42751
K130109 298362
K130110 187696
K130111 537
K130112 942
K130113 987
K130114 1272
K130115 40000
K130205 259941
K130303 177716
K130406 809719
K130408 1786091
K130701 301000
K130702 151200
K130703 7570
K130704 34400
K1308
K130801 5400
K130802 45000
K130803 10856
K130807 24300
K130808 16500
K130810 104500
K130811 60000
K130812 181000
K130813 1750000
K1309 1225565
K1310 2176259
K1311
K131101 788780
K410101 24926
K410102 9545
K410103 28500
K410104 8192
K410105 847
K410106 37100
K410107 2332
K410108 9844
K410109 7843
K410110 9313
K410111 1425
K410112 6089
K410113 15497
K410114 5790
K410115 4251
K410116 22293
K410117 855
K410118 6497
K410119 14996
K410120 124214
K410121 6713
K410122 1567
K410123 75821
K410124 5085
K410125 7125
K410126 4342
K410127 21485
K410128 641111
K410129 589
K410130 50
K410131 163900
K410132 3849
K4105 3946489
K4107 100000
K410801 972011
K410802 1707806
K410803 116450
K4110 13113874
K411101 98335
K411102 32454
K411103 53569
K411201 25327406
K411301 7143103
K411401 4500000
K411402 12754
K5102 2120031
K5103 13543810
K5107 4596103
K5108 5604493
K5110 2008401
K5112 2182778
K5113 4748537
K5114 556914
K61 43297680
Sir I use this query
select lpad(' ',2*(level-1)) || to_char(child),title,sum(drbal),sum(crbal),
from chartofacc, accbal
where chartofacc.accid=accbal.accid(+)
start with parent is null
connect by prior child = parent
group by rollup(substr(mas.accid,2,1),substr(mas.accid,3,1),substr(mas.accid,4,2),substr(mas.accid,6,2) ,chartofacc.accid,title,fstatus);
sir this query not give me result and give me error this
SQL> /
from chartofacc, accbal
ERROR at line 2:
ORA-00936: missing expression
Please give me idea how I get tree type subtotal tribalance
Thanking you
Aamir -
Javax.faces.ViewState value starts with '%' and not with '!'
While recording and ADF Application on JMeter, what should the regular expression extractor be when the javax.faces.ViewState recorded value starts with '%' and not with '!'.
I have been following the following link and it talks only about javax.faces.ViewState values that start with '!'
http://one-size-doesnt-fit-all.blogspot.in/2010/04/configuring-apache-jmeter-specifically.htmlHi,
If '!' present in first position of string, you need to remove it or replace it in transformation.
Following is the sample code...
loop at SOURCE_PACKAGE into ls_SOURCE_PACKAGE.
record_num = sy-tabix.
IF ( ls_SOURCE_PACKAGE-fieldname(1) = '!' ).
ls_SOURCE_PACKAGE-fieldname(1) = '' .
ENDIF.
MODIFY SOURCE_PACKAGE INDEX record_num FROM LS_SOURCE_PACKAGE.
ENDLOOP.
Hope this helps.. -
Hierarchical connect by and start with and joins?
I've got an employees table and an identifiers table. The identifiers table is hierarchical, with parents and children. Each employee has one or more identifiers, but only one identifier is considered the "primary" or root identifier for each employee. Unfortunately, the employee table might be pointing at one of the child identifier rows and not the root. I need a fast query to join the employees with their most current (root) identifier.
Here's code to define the problem.
create table employees (employeeid varchar2(8), fakeNationalID varchar2(9), empname varchar2(30));
insert into employees (employeeid, fakeNationalID, empname) values (1,'001000001','John Smith');
insert into employees (employeeid, fakeNationalID, empname) values (2,'002000002','James Jones');
create table realids (realidkey NUMBER, fakeNationalID VARCHAR2(9) not null,
realNationalID VARCHAR2(9) UNIQUE, parent_realidkey number);
insert into realids (realidkey, fakeNationalID, realNationalID, parent_realidkey) values
(1,'001000001','111111111',3);
insert into realids (realidkey, fakeNationalID, realNationalID, parent_realidkey) values
(2,'002000002','222222222',null);
insert into realids (realidkey, fakeNationalID, realNationalID, parent_realidkey) values
(3,'003000003','333333333',null);
commit;
create or replace function get_parentid (fakeID in VARCHAR2) return varchar2 is
tempid VARCHAR2(9);
begin
select realNationalID into tempid
from (
select realNationalID, fakeNationalID
from realids
start with fakeNationalID = fakeID
connect by nocycle prior parent_realidkey = realidkey
order by level desc)
where rownum = 1;
return tempid;
exception
when NO_DATA_FOUND then
return NULL;
when others then raise;
end;
select get_parentid('001000001') from dual; -- returns 333333333 because its linked to a parent
select get_parentid('002000002') from dual; -- returns 222222222 because there is only one child
select get_parentid('003000003') from dual; -- returns 333333333 because it is the parentWhat I want is to get the highest parent node in realids for each row in employees...
This works, but is NOT very efficient:
select employeeid, get_parentid(fakeNationalID) realid, empname from employees;
employeeid realid empname
1 333333333 John Smith
2 222222222 James JonesYou can imagine what this would be like with 100K rows or greater. It takes about 3 minutes to run.
This seemed like a good way to do this, but with a sub query.
select e.employeeid, e.fakenationalid, e.empname, sub.realnationalid
from employees,
(select realidkey, fakenationalid, realnationalid, parent_realidkey
from realids r
start with r.fakenationalid = e.fakenationalid
connect by prior r.parent_realidkey = r.realidkey) subUnfortunately, it produces an invalid identifier on e.fakenationalid (in the start with clause).
Anyone have any ideas on how to get the top most parent node from the realids for each row in the employees table? In real life there are 6 or more employees tables spread across several remote instances some of which point at children in the realids table and some of which point at the parents. We always want the top most parent realid. Any help would be much appreciated.Hi,
Thanks for posting the sample data in such a convenient form!
It always helps to post your Oracle version, too, especially when dealing with CONNECT BY queries.
The following does what you requested in Oracle 10:
WITH got_roots AS
SELECT CONNECT_BY_ROOT fakenationalid AS leaf_id
, realnationalid
FROM realids
WHERE CONNECT_BY_ISLEAF = 1
START WITH fakenationalid IN ( SELECT fakenationalid
FROM employees
CONNECT BY realidKEY = PRIOR parent_realidkey
SELECT e.employeeid
, r.realnationalid
, e.empname
FROM employees e
JOIN got_roots r ON r.leaf_id = e.fakenationalid
;In any query, calling a user-defined function for each row is going to be slow. Fortunately, Oracle now has built-in functions and operators that can take the place of get_parentid. The CONNECT_BY_ROOT operator, which was introduced in Oracle 10, is the key to this problem. In Oracle 9, you can get the same results using SYS_CONNECT_BY_PATH.
It's usually faster to do the CONNECT BY query separately, and then join whatever other tables you need to the results.
You had a good idea in your last query. The problem was that sub and employees were equal tables in the FROM clause, and you can't correlate equals. You can only correlate a sub-query to its super-query. You could make that general idea work by changing sub into a scalar sub-query,which could be correlated to employees, but I think it would be a lot less efficient than what I posted above. -
Improve hierarchical query speed using 'start with' and 'conect by prior'
Hi
The query within the 'explain' runs about a second and I need to imporve it.
There are indexes set for both the child_id and the parent_id.
The total number of rows for the PRM_COMPONENTS table is 120000.
I'm working on 'Oracle Database 10g Release 10.2.0.4.0 - 64bit Production' in a Linux OS.
I've included the explain plan below.
Any suggestions would be appreciated.
Thanks
EXPLAIN PLAN FOR
SELECT substr(SYS_CONNECT_BY_PATH(usage_title, '|'), 2, instr( SYS_CONNECT_BY_PATH(usage_title, '|'), '|', -1) -2 )
FROM prm_components p
WHERE LEVEL > 1 and usage_id = 10301100
START WITH parent_usage_id is null
CONNECT BY PRIOR usage_id = parent_usage_id;
select * from table(dbms_xplan.display);
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)|
| 0 | SELECT STATEMENT | | 6 | 174 | 4 (0)|
|* 1 | FILTER | | | | |
|* 2 | CONNECT BY WITH FILTERING | | | | |
|* 3 | TABLE ACCESS FULL | PRM_COMPONENTS | 69526 | 3937K| 2468 (1)|
| 4 | NESTED LOOPS | | | | |
| 5 | CONNECT BY PUMP | | | | |
| 6 | TABLE ACCESS BY INDEX ROWID| PRM_COMPONENTS | 6 | 174 | 4 (0)|
|* 7 | INDEX RANGE SCAN | PRM_PARENT_USAGE_ID_I | 2 | | 1 (0)|
Predicate Information (identified by operation id):
1 - filter(LEVEL>1 AND "USAGE_ID"=10301100)
2 - access("PARENT_USAGE_ID"=PRIOR "USAGE_ID")
3 - filter("PARENT_USAGE_ID" IS NULL)
7 - access("PARENT_USAGE_ID"=PRIOR "USAGE_ID")
Note
- 'PLAN_TABLE' is old versionHi
I've resolved the issue by other means but here is the description of the table anyways.
USAGE_ID NOT NULL NUMBER
PARENT_USAGE_ID NUMBER
PRODUCT_CODE NOT NULL VARCHAR2(12)
PRINT_OR_ONLINE NOT NULL CHAR(1)
SLP_ID VARCHAR2(24)
RELEASE_NAME VARCHAR2(80)
USAGE_TITLE VARCHAR2(255)
ENT_USAGE_TITLE VARCHAR2(255)
TRANS_TITLE VARCHAR2(255)
REVISION_TYPE VARCHAR2(8)
ACTIVE CHAR(1)
MARKED_FOR_DELETION CHAR(1)
CREATED_DT DATE
CREATED_BY VARCHAR2(80)
UPDATED_DT DATE
UPDATED_BY VARCHAR2(80)
PLANNING_COMMENTS VARCHAR2(2000)
OUTPUT_FILENAME VARCHAR2(200)
TRANSFORMER_ID NUMBER(38)
START_PAGE VARCHAR2(8)
START_PAGE_NUM NUMBER
END_PAGE VARCHAR2(8)
END_PAGE_NUM NUMBER
VOLUME VARCHAR2(8)
SORT_ORDER NUMBER
PRIORITY NUMBER
XREF_BLIND_ENTRY CHAR(1)
SPECIAL_CATEGORY VARCHAR2(20)
TO_BE_REVISED CHAR(1)
EDITOR VARCHAR2(80)
DUE_DT DATE
POSTED_DT DATE
LOGICAL_UOI_ID NOT NULL VARCHAR2(40)
PHYSICAL_UOI_ID NOT NULL VARCHAR2(40)
EDIT_APPROV_UOI_ID VARCHAR2(40)
EDIT_APPROV_BY VARCHAR2(80)
EDIT_APPROV_DT DATE
FINAL_APPROV_UOI_ID VARCHAR2(40)
FINAL_APPROV_BY VARCHAR2(80)
FINAL_APPROV_DT DATE
PHOTO_APPROV_UOI_ID VARCHAR2(40)
PHOTO_APPROV_BY VARCHAR2(80)
PHOTO_APPROV_DT DATE
RIGHTS_APPROV_UOI_ID VARCHAR2(40)
RIGHTS_APPROV_BY VARCHAR2(80)
RIGHTS_APPROV_DT DATE
LAYOUT_APPROV_UOI_ID VARCHAR2(40)
LAYOUT_APPROV_BY VARCHAR2(80)
LAYOUT_APPROV_DT DATE
BLUES_APPROV_UOI_ID VARCHAR2(40)
BLUES_APPROV_BY VARCHAR2(80)
BLUES_APPROV_DT DATE
LAST_PUB_ONLINE_DT DATE
LAST_PUB_PRINT_DT DATE
BLIND_ENTRY_ON_DT DATE
BLIND_ENTRY_OFF_DT DATE
DELIVERY_APPROV_UOI_ID VARCHAR2(40)
DELIVERY_APPROV_BY VARCHAR2(80)
DELIVERY_APPROV_DT DATE
APPROVAL_STATUS VARCHAR2(40)
CHANGE_SINCE_LAST_DELIVERY CHAR(1)
USAGE_COMMENTS VARCHAR2(2000)
LEXILE_CODE VARCHAR2(18)
SERIES VARCHAR2(8)
USAGE_TITLE_TMP VARCHAR2(255)
ENT_USAGE_TITLE_TMP VARCHAR2(255)
WORD_COUNT VARCHAR2(10)
READ_LEV VARCHAR2(7)
GRADES VARCHAR2(80)
DELIVERY_TYPE NOT NULL CHAR(1)
METADATA_APPROVAL_STATUS VARCHAR2(40)
METADATA_APPROVAL_BY VARCHAR2(80)
METADATA_APPROVAL_DT DATE
RESOURCE_FLAG CHAR(1)
STZ_FLAG CHAR(1)
RESOURCE_TYPE_CODE VARCHAR2(16)
ASSET_DESCRIPTION VARCHAR2(2000)
ROLE_CODE VARCHAR2(16)
PROGRAMS_DATA VARCHAR2(256)
TIME_TO_COMPLETE VARCHAR2(32)
ENTITLEMENTS_DATA VARCHAR2(256)
ISBN_10 VARCHAR2(32)
ISBN_13 VARCHAR2(32)
MFG_ITEM_NO VARCHAR2(256)
AR CHAR(1)
SRC CHAR(1)
SRC_POINTS NUMBER
AUTHORS VARCHAR2(320)
SEARCH_STRINGS VARCHAR2(2000)
PATH_SLP_ID VARCHAR2(256)
PATH_GTC VARCHAR2(256)
PATH_TITLE VARCHAR2(2560)
GRL VARCHAR2(8)
COMMON_CORE CHAR(1) -
How to connect database using oracle SQL developer
Hello
I am newbie in EBS R12
I downloaded Oracle SQL Developer
and create new database conenction
Connection name: ebs demo db connection
username:
password:
Role: Default
Connection type: Basic
Hostname: ebstailin.demo.com
Port: 1521
SID: clone
when i try this there is an error
Status: Failure-Test failed: lo exception: The Network Adapter could not establish the connection
no idea about this
but i used the apps/apps as username and password
please help
thanks
Edited by: cheesewizz on Jul 16, 2010 11:35 PMHello
Thanks for your reply
I tried to connect and here is the result: see below
[oracle@ebstailin 11.1.0]$ sqlplus / as sysdba
SQL*Plus: Release 11.1.0.7.0 - Production on Sat Jul 17 15:35:31 2010
Copyright (c) 1982, 2008, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> CONNECT apps/apps
Connected.
SQL>
But still cannot connect using ORACLE SQL Developer
thanks -
Windows won't start with Nano connected
My computer won't startup or restart with the nano connected to the USB port. It just hangs on the startup screen. I have to disconnect the nano and do a hard power off and then power up again then connect the nano after computer is started. Everything works OK then. Is this normal? Using Dell 8500 laptop with XP Pro sp 2.
Dell Laptop 8500 Windows XP Pro sp 2I have the same (or similar) problem with an iPod Video 30GB, and have found a solution. It is not a boot order problem. I've just posted the following as feedback to http://docs.info.apple.com/article.html?artnum=93953
There is also another reason why a PC may not start with an iPod connected. It is also related to USB, but is a different problem, and there are different work-arounds available.
Problem: PC will not POST or boot with iPod connected to a USB port
Description:
With an iPod connected to any USB port, the PC will not pass power-on self test (POST), and does not attempt to boot. It remains completely unresponsive to anything except a hard power-off; in particular it is impossible to reach the BIOS configuration screen. This is not a problem with the boot order: the internal disk is first in the boot order, and in any case, POST is not passed and so booting is not attempted.
With the iPod disconnected, the PC boots normally, and if the iPod is plugged in later, the iPod and iTunes function normally.
Solution: either:
1. Disable "USB legacy mouse support" and "USB keyboard and legacy support" in BIOS. Disabling legacy USB mouse support stops a USB mouse being used by BIOS and DOS programs, which is not usually a problem. Disabling "USB keyboard and legacy support" will prevent a USB keyboard from being used at all, which is a potentially serious problem.
2. Boot with the iPod disconnected.
System details: a PC based on the ASUS A7N8X v2.0 motherboard running BIOS version 1008. It has a USB mouse, PS/2-compatible keyboard, and a USB-connected printer and scanner as well as the iPod.
Comments:
This is not necessarily a bug with the iPod, but may be. There are three possibilities:
1. There is a bug with the BIOS implementation of USB keyboard and mouse support
2. There is a bug with the way the iPod responds when the BIOS is looking for USB keyboards and mice.
3. There is a bug in the USB spec itself.
Homebrew PC Windows XP ASUS A7N8X motherboard -
How to replace a substring that starts with and end with another substring?
Hi,
I am trying to parse data from HTML tables. First I want to remove all useless tags like <font>. Now, how can I remove substrings like-
*<font face="Verdana, Arial, Helvetica, sans-serif" size="1">My_Data_to_parse</font>*
I was searching for any method which replaces a substring what starts with a substring (in this case "<font") and ends with another substring (in this case ">") . Is there any method like that? Or any better solution?
Another situation like the following-
*<td align="left" height="30" width="100%">*
In this case I want to remove all the height, align , width etc and make it as simple as "<td>". How can I do that?
Finally, all I am trying to do just to parse data from the tables in a html file. Is there any parser API or library to help me do that? Or to bring the data down to array from the tables based on table structure? Please suggest me.
Thanks in advance.probably the best place to start is to search for the "<keyword" of all of the html keywords, then search for the location of the next ">" - this will indicate the end of the <keyword> opening tag.
-
Open a file starting with and latest timestamp
hi all,
i need to open a file whose name starts with ABC_DELTA and has the latest timestamp. i mean there are many files in this folder and some files will start with ABC_DELTA, but i need to pick up the file which has the latest timestamp or is the newest. how would i implement this. pls help.
thanks.ag2011 wrote:
the files creation time. the file wont be modified. its like a log. and i need to parse it. thanks.Well, you're SOL if you want to use creation time: check out the File API. But you should be able to use lastModified in its place. -
Extraction of data from Planning and load it into Oracle/SQL server (RDBMS)
Hi All,
ODI can extract data from Oracle/SQL server RDBMS and load it into Hyperion planning, but I wanted to know if it is possible to extract data from Hyperion Planning through ODI and load it into Oracle or SQL server RDMBS i.e the other way round.
Kindly let me know if that is possible or not,If yes then please let me know what is the exact process to achieve this through ODI.
Thanks & Regrads,
GurpreetYes this can be done. Remember that Planning data is actually stored in Essbase so the Knowledge module you will need to use is LKM Essbase to SQL (DATA)
-
CUPC Starts with limited connectivity.
Hello Team
I need you kind support to fix this issue.
Problem - CUPC starts with limited functionality. ( See attached)
Topology - PC is running Windows 7 (32 bit) and is in the same subnet as CUCM & CUPS. (L2 reachability)
I have only one CUCM with all services enabled.
CUCM Version - System version: 7.0.2.20000-5
CUPS Version - System version: 7.0.1.10000-28
Problem Description - After following the standard procedure, my CUPC gets logged in , but with limited functionality. Errors involved are "CUPC client not able to download file from tftp Server".(See the attached)
Troubleshooting Done -
1: For testing i installed CIPC on the PC and it registered with CUCM without any issues (just to ensure that tftp traffic is not blocked by any local AV/Firewall)
2: All username created on CUCM are in small letters.
3: Integration is ok, between CUCM & CUPS, whenever any user is added / modified in CUCM, it is immediately reflected in CUPS.
4: Reviewed the integration steps many times.
Any help will be highly appreciated.
Thanks
AhadHi
How is CUPC added in CUCM?
Refer below link for the procedure.
http://www.ciscopress.com/articles/article.asp?p=1610815
Regards
Ronak Patel -
ITunes starting up and connecting to iStore on its own...?
As subject describes, iTunes is starting up on its own.
I was offline just now and got the message 'iTunes cannot connect to iStore..'. I wasn't even using the computer at the time.
I have no auto updates enabled, or anything else that might require iTunes to start itself and get online automatically. Ping is set to OFF on my iTunes account.
Can anyone advise what is going on here please??
cheers,
IanJust installed Lion and I'm having exactly the same problem! This is a work machine and it is unusable now in presentations!
I haven't any other threads on this, or any responses to these guys - can someone help please?
Pete
Maybe you are looking for
-
Can not print using wireless. It printed fine using ethernet Running 10.6.8 on mac mini. Ethernet port has quit. (lighting strike I think, it fried two routers, did not get anything else)
-
Can I still click once on an event and see header and notes in Leopard iCAL
I noticed after I upgraded to Leopard that iCAL doesn't seem quite the same. For example, I click on an event and it doesn't expand off to the right like it use to in order to see the header, edit dates, and accompany notes. Do I have to double click
-
Combined code and design view broken
I use Dreamweaver MX 2004 and normally work in the "split" (code and design) view. I just opened a site to work on it and that mode does not work - I click on the link in the toolbar, but it does not take effect. I also cannot make it work from View-
-
Lr 5 with Mac OS 10.6.8
Doesn't Lightroom 5 run on a Mac with OS 10.6.8.? What kind of problems do I have to solve, if I try?
-
Issues activating q10 into current environment
I have a small users base of z10s and q10s running on BDS Version: 6.2.0.36 I've had 7 or so phones working fine and am in the process of connecting another unit to the family. For whatever reason that i am not sure of the activation process fails wi