Query for hierarchical tree
I am trying to build a hierarchical tree and tried various option but is unable to show the tree. I have tried using record group and also query text. When I used
Ftree.Set_Tree_Property(htree, Ftree.query_text, 'SELECT 1, hierarchy_level, hierarchy_code, '', hierarchy_desc FROM oms_cust_hierarcy_tree_vw
connect by prior hierarchy_code = hierarchy_parent
start with hierarchy_parent is null');
I got following error:
"FRM-47313: invalid query for hierarchical tree".
I am stuck now. Any help will be appreciated.
Thanks
Brinder
dear member try this query
SQL>
1 SELECT level, LPAD(' ',2*level-2)||emp.ename ename, emp.empno, emp.mgr, emp.deptno
2 FROM Emp
3 CONNECT BY PRIOR emp.empno = emp.mgr
4* START WITH emp.empno = 7839
SQL> /
LEVEL ENAME EMPNO MGR DEPTNO
1 KING 7839 10
2 BLAKE 7698 7839 10
3 MARTIN 7654 7698 10
3 ALLEN 7499 7698 10
3 TURNER 7844 7698 10
3 JAMES 7900 7698 10
3 WARD 7521 7698 10
2 CLARK 7782 7839 10
3 MILLER 7934 7782 10
2 JONES 7566 7839 10
3 FORD 7902 7566 10
4 SMITH 7369 7902 10
5 Ken 999 7369 10
3 SCOTT 7788 7566 10
4 ADAMS 7876 7788 10
M Rizwan
Similar Messages
-
Hierarchy Query For Full Tree ?
Hi Everyone,
I want to write a hierarchy query which should give me the whole path starting from root node to each individual nodes by passing value of any individual tree member. below is the sample data and the output what i am expecting. and also the output what i am getting right now from my query.
CREATE TABLE RELATION (PARENT VARCHAR2(1),CHILD VARCHAR2(1) PRIMARY KEY);
--Data for the tree which starts from the root 'A'
Insert into RELATION (PARENT, CHILD) Values (NULL,'A');
Insert into RELATION (PARENT, CHILD) Values ('A', 'B');
Insert into RELATION (PARENT, CHILD) Values ('A', 'C');
Insert into RELATION (PARENT, CHILD) Values ('B', 'D');
Insert into RELATION (PARENT, CHILD) Values ('B', 'E');
Insert into RELATION (PARENT, CHILD) Values ('D', 'F');
Insert into RELATION (PARENT, CHILD) Values ('C', 'G');
--Data for the tree which starts from the root 'H'
Insert into RELATION (PARENT, CHILD) Values (NULL,'H');
Insert into RELATION (PARENT, CHILD) Values ('H', 'I');
Insert into RELATION (PARENT, CHILD) Values ('H', 'J');
Expected Output by passing values as 'C' which gives the whole tree where the node C is present:
A
A->B
A->C
A->B->D
A->B->E
A->C->G
A->B->D->F
My Query:
select
sys_connect_by_path(child,'->') tree
from
relation
--where (parent ='C' or child='C')
start with
parent is null
connect by
prior child = parent
order by tree;
Output of my query:
->A
->A->B
->A->B->D
->A->B->D->F
->A->B->E
->A->C
->A->C->G
->H
->H->I
->H->J
I am not able to add the condition for the query so that i can get only rows of the tree where the nod 'C' is present. i am just getting whole data from the table with all the unwanted trees.
Can anyone please help me in getting the correct output.
Thank you in advance.odie_63 wrote:
Another solution, involving analytics : Hierarchical queries and analytic functions do not mix well together in 10g:
SQL> select * from v$version
2 /
BANNER
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Prod
PL/SQL Release 10.2.0.4.0 - Production
CORE 10.2.0.4.0 Production
TNS for 32-bit Windows: Version 10.2.0.4.0 - Production
NLSRTL Version 10.2.0.4.0 - Production
SQL> SELECT tree
2 FROM (
3 select sys_connect_by_path(child,'->') tree,
4 max(case when child = 'C' then connect_by_root(child) end) over() root1,
5 connect_by_root(child) root2
6 from relation
7 start with parent is null
8 connect by prior child = parent
9 )
10 WHERE root1 = root2
11 ;
from relation
ERROR at line 6:
ORA-00600: internal error code, arguments: [qctcte1], [0], [], [], [], [], [], []
SQL> Although it is much better in 11g:
SQL> select * from v$version
2 /
BANNER
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
PL/SQL Release 11.2.0.1.0 - Production
CORE 11.2.0.1.0 Production
TNS for 32-bit Windows: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production
SQL> SELECT tree
2 FROM (
3 select sys_connect_by_path(child,'->') tree,
4 max(case when child = 'C' then connect_by_root(child) end) over() root1,
5 connect_by_root(child) root2
6 from relation
7 start with parent is null
8 connect by prior child = parent
9 )
10 WHERE root1 = root2
11 ;
TREE
->A
->A->B
->A->B->D
->A->B->D->F
->A->B->E
->A->C
->A->C->G
7 rows selected.
SQL> SY. -
Frm-47313 Invalid Query for Hierarchy tree
Hello. i am trying to create a hierarchy tree with the following query:
SELECT 1, level, n.name, null, hn.nde_id
FROM cerpt_nodes n, cerpt_hierarchy_nodes hn
WHERE n.id = hn.nde_id
AND hn.hir_id = 1
CONNECT BY PRIOR hn.nde_id = hn.nde_id_parent_of
START WITH hn.ntp_code='ROOT';
I check the table and column names, they are correct. I tried to create tree with scott.emp table, I have no problem. The only different is this query has nested tables and where clause. Is that I cannot use WHERE clause and nested tables? Can anybody tell me what I have done wrong? Thank you very muchI had problems with joins in the same SQL statement using the Connect Prior By statement. Try creating a view over your nested tables then create the SQL statement for the tree using the view.
I ended up having a lot of problems using the tree control. I ended up modifing my database design to accomodate the short falls of the Connect Prior By statement.
Hope this helps.
Jamie -
Plz help me in this query for the tree
hi All
I want to bulid tree that start with for example
schema name "scott"
then table "dept,emp
then ename in table emp
root scott
parent dept
child emp_name
please help me in the query ?user222 wrote:
any help my dearsIf you can draw one simple tree example. Then it will be easy to create query. Because i am confuse about the output. Just draw one example of your desired output tree. Then it will help to find solution.
And while writing query or any example so use the 6 digit before and after your query or example to keep the formatting in orignal format. Otherwise it becomes hard to read.
For more information see FAQ on right corner for page.
-Ammad -
Hierarchical Tree error - fighting for over a year
For over a year now, our Oracle forms have presented an elusive problem with Hierarchical Trees. First some core information:
We are running Developer 6i, patchset 8, on a Sun host and an Oracle 8i database. Our forms are deployed over the web on the
Oracle Application Server using J-Initiator 1.1.7.27.
Now, only on our Production platform, and only during busy times of the day, we randomly get the error "Invalid Query for Hierarchical
Tree" when one of our tree-based forms populates the tree. This error is sometimes followed by the infamous
FRM-92100 "connection has been terminated" error. This happens whether building the tree with a single Selec and Populate Treet,
or via a systematic series of Add Tree Node calls.
We have tried rebuilding the form logic to eliminate form corruption, (form corruption - happens if you open a large FMB in the
forms developer without first being connected to the database, manifests itself as random and odd form behaviour,
or FRM-92100 errors, Oracle product support denies it really happens), we have added debug code, we've even tried generating
the FMX on the Production platform as part of our deployment (normally we generate FMX files on our Integration platform
which mirrors Production).
We are not scheduled to upgrade for Forms 9i and the 9IAS for several more months, so upgrading isn't an immediate option for us.
Any and all ideas welcome.
Jeff ClineHi Nigel,
Two questions:
1. When the publisher sends the access permission to the subcriber by:
netStream.send("|RtmpSampleAccess", true, true)
, on the subscriber side, what event or function can handle the guaranteed receipt of the access permission? Currently it is possible to draw the incoming stream video upon receiving NetStream.Play.Star and waiting for 5 seconds or so:
public class MyWebcamSubscriber extends WebcamSubscriber {
override protected function layoutCameraStreams():void
// trying the event listener seems to work here.
_streamManager.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus);
override protected function onNetStatus(e:NetStatusEvent):void
super.onNetStatus(e);
case "NetStream.Play.Start":
setTimeout(function():void {
// draw the video from the incoming stream here.
}, 5000);
The questions is, which event can let the subscriber know that it has the access permission to the video stream?
2. In WebcamPublisher, why is that the access permission is sent 3 times?
a. Once on receiving NetStream.Connect.Success with 0.5 second delay, as in below.
b. Once immediately upon receiving NetStream.Connect.Success, as in below.
protected function onNetStatus(p_evt:NetStatusEvent):void
if (p_evt.info.code=="NetStream.Connect.Success") {
setTimeout(sendSnapShotPermission, 500);
_stream.send("|RtmpSampleAccess", true, true);
protected function sendSnapShotPermission():void
_stream.send("|RtmpSampleAccess", true, true);
c. Once in onConnectionTypeChange() with 2 seconds delay:
protected function onConnectionTypeChange(p_evt:StreamEvent):void
if ( _streamManager.isP2P) {
_stream= new NetStream(_connectSession.sessionInternals.session_internal::connection as NetConnection,NetStream.DIRECT_CONNECTIONS);
setTimeout(sendSnapShotPermission, 2000); -
It's possible to make Hierarchical Tree from multiple tables ?
the famous example for Hierarchical Tree is about employee_id and manager_id field in employees table ............ so I was wondering it's possible to make[b] Hierarchical Tree from multiple tables ? and How ??
if the answer associate with example that will be so kind of you :D
and thanks in advance.HI
use curose in when new form instance or procedure then u can got data more then one table like that
DECLARE
htree ITEM;
top_node FTREE.NODE;
new_node FTREE.NODE ;
child_node ftree.node ;
item_value VARCHAR2(30);
cursor prime_cur is select main_desc mgr_name, main_code dept
from pur_item_group_mst;
cursor child_cur(v_dept number) is select sub_desc,sub_code
from pur_item_group_dtl where main_code = v_dept ;
BEGIN
htree := Find_Item('tmp.tree4');
for dummy in prime_cur loop
new_node := Ftree.Add_Tree_Node(htree,
ftree.root_node,
Ftree.PARENT_OFFSET,
Ftree.LAST_CHILD,
Ftree.EXPANDED_NODE,
dummy.mgr_name,
'D:\ORYX_POLYBAGS\accept',
dummy.dept);
for child in child_cur(dummy.dept) loop
child_node := Ftree.Add_Tree_Node(htree,
new_node,
Ftree.PARENT_OFFSET,
Ftree.LAST_CHILD,
Ftree.EXPANDED_NODE,
child.sub_desc||' '||'('||child.sub_code||' '||')',
'D:\ORYX_POLYBAGS\next',
child.sub_code);
end loop;
end loop;
END;
Rizwan Shafiq
www.rizwanshafiq.blogspot.com -
Hierarchical tree - Data Entry Form
I am trying to make a data entry form for hierarchical tree. Any one help me to send a sample .fmb file.
I created a table like
create table master_ACTIVITY
(INITIAL_LEVEL NUMBER (4) ,
NODE_DEPTH NUMBER (4) ,
NODE_LABEL VARCHAR2(160) ,
NODE_ICON VARCHAR2(60) ,
NODE_DATA VARCHAR2(160) ,
NODE_PARENT VARCHAR2(160)
1. How do i use hierarchical tree for adding and deleting item into it.
2. In my other form i use the item from hierarchical tree. so how to get the return value of the selected item in a hierarchical tree. and which of filed in this table i need in other forms to connect to this table and get values.
please send a sample form to [email protected]
thank you
saji danielAndreas,
It got worked.
I have another problem now. I have 2000 records in my tree. when i populate it is taking time to populate.
I want to display only parent trees ie Level 1 & 2 Items. But the Level 1 & 2 should have '+' symbol to display.
When the user click on any items in level 2, only then the child of the selected parent should populate.
By default all the items are displayed in collapsed mode (-1). But still it take time to populate.
Any solution ?. -
Hierarchical Tree Icon Alignment
Hi
I am able to create and display a hierarchical tree with icons in the nodes okay. The default is that the icon is placed at the left of the node (like a folder icon on windows explorer). Is there any option to display icon at right side of node? I am unable to find any such option, but wish to confirm or seek other ideas.
ThanksI think there is no option to display the icon in right side of the node. Even i tried to display only the icon without node label. And big icon (more then 16*16 pixel) with minimum of node label. If I succeed above two options then I might make an icon and label as a single image (even left icon right label or left label and right icon) and show it for a node.
So by default for hierarchical tree icon will be displayed left side with Dimensions: 16 (height) * 16 (width) pixels.
Regards
Balaji.M -
Hierarchical Query for Chart of Account
Hellow all
I have one Table which is for chart of account
The Column in this Table is
Acc_id and Acc_name
I Insert data in This chart of account
Insert into COA
values
*(01,'ASSETS');*
values
*(01001,'Current Assets');*
values
*(01002,'Fixed Assets');*
values
*(010010001,'Banks');*
values
*(010010002,'Cash');*
values
*(01001000100001,'Metrol Politan Bank');*
values
*(01001000100002,'Royal Bank');*
values
*(01001000100003,'Stander Charted Bank');*
values
*(01001000200001,'Cash in Hand');*
values
*(01001000200002,'Patty Cash');*
That's all my record now i need to create a Hierarchical tree
Which look like this
*01- Assets*
------010001 Current Assets+
----------010010001 Bank+
--------------01001000100001 Metrol Politan Bank+
--------------01001000100002 Royal Bank+
--------------01001000100003 Stander Charted Bank+
----------010010002 Cash+
--------------01001000200001 Cash in Hand+
--------------01001000200002 Patty Cash+
------010002 Fixed Assets+
----------010020001 Machinery Assets+
--------------01002000100001 Needle Machine+
--------------01002000100002 GGT Machine+
----------010020002 Computer Assets+
--------------01002000200001 Computer Server+
--------------01002000200002 Computer other+
Hope you guys understand i need the Hierarchical query for making this kind of Tree
Regards
ShahzaibIn above posts you have solution to your problem but maybe you can think about changeing the design slightly.
I would suggest using parent_id to find parent account, instead of operations on strings which can be slower in larger tables.
SQL> create table t14(id int, account_code varchar2(16), account_name varchar2(32), parent_id int)
2 /
Table created.
SQL> insert into t14 values(1,'01','Assets',null);
1 row created.
SQL> insert into t14 values(2,'01001','Current Assets',1);
1 row created.
SQL> insert into t14 values(3,'01002','Current Assets',1);
1 row created.
SQL> commit;
Commit complete.
SQL> select * from t14;
ID ACCOUNT_CODE ACCOUNT_NAME PARENT_ID
1 01 Assets
2 01001 Current Assets 1
3 01002 Current Assets 1
SQL> select lpad(' ',2*(level-1)) || account_code as account_code, account_name
2 from t14
3 start with parent_id is null connect by prior id = parent_id
4 /
ACCOUNT_CODE ACCOUNT_NAME
01 Assets
01001 Current Assets
01002 Current AssetsWith kind regards
Krystian Zieja -
Hierarchical + Analytical query for organizational unit parameters
Hello gurus,
I try for a couples of hour ago to make a query work as I would like.
Our application need to store some parameters for our organization units. These organization units are typically organized in in an hierarchy manner: one top unit with many level of child units. The parameters are stored into another table with 1:1 relationship.
For sake of visualisation, here is the data for the organization unit and parameter table in a more visual format:
SQL> select * from organization_unit;
UNIT_CODE UNIT_NAME PARENT_UNIT_CODE
00000 Top level
10 L2 unit #10 00000
10-01 L3 unit #10-01 10
10-02 L3 unit #10-02 10
20 L2 unit #20 00000
20-01 L3 unit #20-01 20
20-02 L3 unit #20-02 20
SQL> select * from org_unit_parameters;
UNIT_CODE PARAM1 PARAM2 PARAM3 PARAM4
00000 Default value Default value Default value {null}
10 {null} Value from 10 Value from 10 {null}
10-01 {null} {null} Value from 10-01 {null}
10-02 {null} {null} {null} Value from 10-02
20 Value from 20 Value from 20 Value from 20 {null}
20-01 {null} Value from 20-01 {null} {null}
20-02 {null} Value from 20-02 {null} {null}The application will query the parameter table to get a parameter value for a given unit.
The parameter resolution algorithm is rather simple: when querying a unit, the applicable parameter is the one defined at the requested level. If the parameter is not defined (null) at the requested level, the parameter value that must be returned is the next defined one in the parent hierarchy. In some rare cases, it can be null if a parameter is not defined anywhere from the requested level to top.
I've made a query that seems to work when querying for one unit at a time. It use hierarchical operators (start with + connect by) with a bit of analytical functions. Here is a test & raw output example:
SQL> WITH hierarchy
2 AS
3 (
4 SELECT ou.unit_code,
5 LEVEL AS lvl
6 FROM organization_unit ou
7 START WITH
8 ou.unit_code = '20-01'
9 CONNECT BY
10 ou.unit_code = PRIOR ou.parent_unit_code
11 )
12 SELECT h.*,
13 p.param1 AS param1_raw,
14 LAST_VALUE (p.param1 IGNORE NULLS) OVER (ORDER BY h.lvl DESC) AS param1_with_last,
15 FIRST_VALUE(p.param1 IGNORE NULLS) OVER (ORDER BY h.lvl ASC) AS param1_with_first,
16 p.param2 AS param2_raw,
17 LAST_VALUE (p.param2 IGNORE NULLS) OVER (ORDER BY h.lvl DESC) AS param2_with_last,
18 FIRST_VALUE(p.param2 IGNORE NULLS) OVER (ORDER BY h.lvl ASC) AS param2_with_first,
19 p.param3 AS param3_raw,
20 LAST_VALUE (p.param3 IGNORE NULLS) OVER (ORDER BY h.lvl DESC) AS param3_with_last,
21 FIRST_VALUE(p.param3 IGNORE NULLS) OVER (ORDER BY h.lvl ASC) AS param3_with_first,
22 p.param4 AS param4_raw,
23 LAST_VALUE (p.param4 IGNORE NULLS) OVER (ORDER BY h.lvl DESC) AS param4_with_last,
24 FIRST_VALUE(p.param4 IGNORE NULLS) OVER (ORDER BY h.lvl ASC) AS param4_with_first
25 FROM hierarchy h
26 LEFT JOIN org_unit_parameters p
27 ON h.unit_code = p.unit_code
28 ORDER BY h.lvl DESC;
UNIT_CODE LVL PARAM1_RAW PARAM1_WITH_LAST PARAM1_WITH_FIRST PARAM2_RAW PARAM2_WITH_LAST PARAM2_WITH_FIRST PARAM3_RAW PARAM3_WITH_LAST PARAM3_WITH_FIRST PARAM4_RAW PARAM4_WITH_LAST PARAM4_WITH_FIRST
00000 3 Default value Default value Value from 20 Default value Default value Value from 20-01 Default value Default value Value from 20 {null} {null} {null}
20 2 Value from 20 Value from 20 Value from 20 Value from 20 Value from 20 Value from 20-01 Value from 20 Value from 20 Value from 20 {null} {null} {null}
20-01 1 {null} Value from 20 {null} Value from 20-01 Value from 20-01 Value from 20-01 {null} Value from 20 {null} {null} {null} {null}Seems pretty good, the upper parameters are well «propagated» down with LAST_VALUE function. But, I don't understand why the use of FIRST_VALUE and oppposite ordering doesn't give the same result. A little more playing with the last query for getting the final result for a given unit code:
SQL> SELECT *
2 FROM
3 (
4 WITH hierarchy
5 AS
6 (
7 SELECT ou.unit_code,
8 LEVEL AS lvl
9 FROM organization_unit ou
10 START WITH
11 ou.unit_code = '20-01'
12 CONNECT BY
13 ou.unit_code = PRIOR ou.parent_unit_code
14 )
15 SELECT h.*,
16 LAST_VALUE (p.param1 IGNORE NULLS) OVER (ORDER BY h.lvl DESC) AS param1,
17 LAST_VALUE (p.param2 IGNORE NULLS) OVER (ORDER BY h.lvl DESC) AS param2,
18 LAST_VALUE (p.param3 IGNORE NULLS) OVER (ORDER BY h.lvl DESC) AS param3,
19 LAST_VALUE (p.param4 IGNORE NULLS) OVER (ORDER BY h.lvl DESC) AS param4
20 FROM hierarchy h
21 LEFT JOIN org_unit_parameters p
22 ON h.unit_code = p.unit_code
23 ORDER BY h.lvl
24 )
25 WHERE ROWNUM = 1;
UNIT_CODE LVL PARAM1 PARAM2 PARAM3 PARAM4
20-01 1 Value from 20 Value from 20-01 Value from 20 {null}Works well!
But, my ultimate goal is to create a view that resolve correctly all these parameters for each level of the organization with proper propagation rather then querying for each unit at a time. I played a bit, but without success. :( My current raw query is this one:
SQL> WITH hierarchy
2 AS
3 (
4 SELECT ou.unit_code,
5 LPAD(' ',2*(LEVEL-1)) || ou.unit_code AS tree,
6 LEVEL AS lvl
7 FROM organization_unit ou
8 START WITH
9 parent_unit_code IS NULL
10 CONNECT BY
11 PRIOR unit_code = parent_unit_code
12 )
13 SELECT h.*,
14 p.param1 AS param1_raw,
15 LAST_VALUE (p.param1 IGNORE NULLS) OVER (ORDER BY h.lvl DESC) AS param1_with_last,
16 FIRST_VALUE(p.param1 IGNORE NULLS) OVER (ORDER BY h.lvl ASC) AS param1_with_first,
17 p.param2 AS param2_raw,
18 LAST_VALUE (p.param2 IGNORE NULLS) OVER (ORDER BY h.lvl DESC) AS param2_with_last,
19 FIRST_VALUE(p.param2 IGNORE NULLS) OVER (ORDER BY h.lvl ASC) AS param2_with_first,
20 p.param3 AS param3_raw,
21 LAST_VALUE (p.param3 IGNORE NULLS) OVER (ORDER BY h.lvl DESC) AS param3_with_last,
22 FIRST_VALUE(p.param3 IGNORE NULLS) OVER (ORDER BY h.lvl ASC) AS param3_with_first,
23 p.param4 AS param4_raw,
24 LAST_VALUE (p.param4 IGNORE NULLS) OVER (ORDER BY h.lvl DESC) AS param4_with_last,
25 FIRST_VALUE(p.param4 IGNORE NULLS) OVER (ORDER BY h.lvl ASC) AS param4_with_first
26 FROM hierarchy h
27 LEFT JOIN org_unit_parameters p
28 ON h.unit_code = p.unit_code
29 ORDER BY h.unit_code;
UNIT_CODE TREE LVL PARAM1_RAW PARAM1_WITH_LAST PARAM1_WITH_FIRST PARAM2_RAW PARAM2_WITH_LAST PARAM2_WITH_FIRST PARAM3_RAW PARAM3_WITH_LAST PARAM3_WITH_FIRST PARAM4_RAW PARAM4_WITH_LAST PARAM4_WITH_FIRST
00000 00000 1 Default value Default value Default value Default value Default value Default value Default value Default value Default value {null} Value from 10-02 {null}
10 10 2 {null} Value from 20 Default value Value from 10 Value from 10 Default value Value from 10 Value from 10 Default value {null} Value from 10-02 {null}
10-01 10-01 3 {null} {null} Default value {null} Value from 20-02 Default value Value from 10-01 Value from 10-01 Default value {null} Value from 10-02 Value from 10-02
10-02 10-02 3 {null} {null} Default value {null} Value from 20-02 Default value {null} Value from 10-01 Default value Value from 10-02 Value from 10-02 Value from 10-02
20 20 2 Value from 20 Value from 20 Default value Value from 20 Value from 10 Default value Value from 20 Value from 10 Default value {null} Value from 10-02 {null}
20-01 20-01 3 {null} {null} Default value Value from 20-01 Value from 20-02 Default value {null} Value from 10-01 Default value {null} Value from 10-02 Value from 10-02
20-02 20-02 3 {null} {null} Default value Value from 20-02 Value from 20-02 Default value {null} Value from 10-01 Default value {null} Value from 10-02 Value from 10-02As you can see, it's not as I expected. I know there's something to do with a PARTITION BY clause, but don't know how.
Is anyone knows how to solve my problem?
Thanks
Bruno
For reproductibility purposes, here is the code to create sturcture and data:
Here is the format of my tables and some samble data:
CREATE TABLE organization_unit (
unit_code VARCHAR2(5 CHAR) NOT NULL PRIMARY KEY,
unit_name VARCHAR2(100 CHAR) NOT NULL,
parent_unit_code VARCHAR2(5 CHAR)
CREATE TABLE org_unit_parameters (
unit_code VARCHAR2(5 CHAR) NOT NULL PRIMARY KEY,
param1 VARCHAR2(100 CHAR),
param2 VARCHAR2(100 CHAR),
param3 VARCHAR2(100 CHAR),
param4 VARCHAR2(100 CHAR)
-- Inserting data
INSERT INTO organization_unit (unit_code, unit_name, parent_unit_code)
VALUES ('00000', 'Top level', NULL);
INSERT INTO organization_unit (unit_code, unit_name, parent_unit_code)
VALUES ('10', 'L2 unit #10', '00000');
INSERT INTO organization_unit (unit_code, unit_name, parent_unit_code)
VALUES ('10-01', 'L3 unit #10-01', '10');
INSERT INTO organization_unit (unit_code, unit_name, parent_unit_code)
VALUES ('10-02', 'L3 unit #10-02', '10');
INSERT INTO organization_unit (unit_code, unit_name, parent_unit_code)
VALUES ('20', 'L2 unit #20', '00000');
INSERT INTO organization_unit (unit_code, unit_name, parent_unit_code)
VALUES ('20-01', 'L3 unit #20-01', '20');
INSERT INTO organization_unit (unit_code, unit_name, parent_unit_code)
VALUES ('20-02', 'L3 unit #20-02', '20');
INSERT INTO ORG_UNIT_PARAMETERS (unit_code, param1, param2, param3)
VALUES ('00000', 'Default value', 'Default value', 'Default value');
INSERT INTO ORG_UNIT_PARAMETERS (unit_code, param2, param3)
VALUES ('10', 'Value from 10', 'Value from 10');
INSERT INTO ORG_UNIT_PARAMETERS (unit_code, param3)
VALUES ('10-01', 'Value from 10-01');
INSERT INTO ORG_UNIT_PARAMETERS (unit_code, param4)
VALUES ('10-02', 'Value from 10-02');
INSERT INTO ORG_UNIT_PARAMETERS (unit_code, param1, param2, param3)
VALUES ('20', 'Value from 20', 'Value from 20', 'Value from 20');
INSERT INTO ORG_UNIT_PARAMETERS (unit_code, param2)
VALUES ('20-01', 'Value from 20-01');
INSERT INTO ORG_UNIT_PARAMETERS (unit_code, param2)
VALUES ('20-02', 'Value from 20-02');
COMMIT;Now, I hoppe I got your reqs:
WITH hierarchy AS (
SELECT ou.unit_code,
LPAD(' ',2*(LEVEL-1)) || ou.unit_code AS tree,
LEVEL AS lvl,
param1 AS param1_raw,
param2 AS param2_raw,
param3 AS param3_raw,
param4 AS param4_raw,
SYS_CONNECT_BY_PATH(p.param1,'#') || '#' AS param1_path,
SYS_CONNECT_BY_PATH(p.param2,'#') || '#' AS param2_path,
SYS_CONNECT_BY_PATH(p.param3,'#') || '#' AS param3_path,
SYS_CONNECT_BY_PATH(p.param4,'#') || '#' AS param4_path
FROM organization_unit ou LEFT JOIN org_unit_parameters p
ON ou.unit_code = p.unit_code
START WITH parent_unit_code IS NULL
CONNECT BY PRIOR ou.unit_code = parent_unit_code
SELECT unit_code,
tree,
lvl,
param1_raw,
REGEXP_SUBSTR(param1_path,'[^#]+',1,GREATEST(1,REGEXP_COUNT(param1_path,'[^#]+'))) AS param1_with_last,
REGEXP_SUBSTR(param1_path,'[^#]+') AS param1_with_first,
param2_raw,
REGEXP_SUBSTR(param2_path,'[^#]+',1,GREATEST(1,REGEXP_COUNT(param2_path,'[^#]+'))) AS param2_with_last,
REGEXP_SUBSTR(param2_path,'[^#]+') AS param2_with_first,
param3_raw,
REGEXP_SUBSTR(param3_path,'[^#]+',1,GREATEST(1,REGEXP_COUNT(param3_path,'[^#]+'))) AS param3_with_last,
REGEXP_SUBSTR(param3_path,'[^#]+') AS param3_with_first,
param4_raw,
REGEXP_SUBSTR(param4_path,'[^#]+',1,GREATEST(1,REGEXP_COUNT(param4_path,'[^#]+'))) AS param4_with_last,
REGEXP_SUBSTR(param4_path,'[^#]+') AS param4_with_first
FROM hierarchy
ORDER BY unit_code
UNIT_ TREE LVL PARAM1_RAW PARAM1_WITH_LAST PARAM1_WITH_FIRS PARAM2_RAW PARAM2_WITH_LAST PARAM2_WITH_FIRS PARAM3_RAW PARAM3_WITH_LAST PARAM3_WITH_FIRS PARAM4_RAW PARAM4_WITH_LAST PARAM4_WITH_FIRS
00000 00000 1 Default value Default value Default value Default value Default value Default value Default value Default value Default value
10 10 2 Default value Default value Value from 10 Value from 10 Default value Value from 10 Value from 10 Default value
10-01 10-01 3 Default value Default value Value from 10 Default value Value from 10-01 Value from 10-01 Default value
10-02 10-02 3 Default value Default value Value from 10 Default value Value from 10 Default value Value from 10-02 Value from 10-02 Value from 10-02
20 20 2 Value from 20 Value from 20 Default value Value from 20 Value from 20 Default value Value from 20 Value from 20 Default value
20-01 20-01 3 Value from 20 Default value Value from 20-01 Value from 20-01 Default value Value from 20 Default value
20-02 20-02 3 Value from 20 Default value Value from 20-02 Value from 20-02 Default value Value from 20 Default value
7 rows selected.
SQL> SY.
Edited by: Solomon Yakobson on Nov 12, 2010 10:09 AM -
Hierarchical Tree Data Query/Record Group Question
I need help with Hierarchical Forms right now. I'm currently trying to implement a hierarchical tree to display the different items in different categories. I have been reading up on it for the past few days, and i do not understand a few things.
What is the difference between a data query and record group? they seem the same to me.
How does the XX = prior XXX work? i understand that this is what connects the parent to the child.
How do you determine what depth the node is? its done in the record group/data query, but how do i decide what level it is dynamically?
Thanks a lot in advance!Thanks! I am unable to create a table specifically for the tree because i am using tables that have been ported live and are in use. My question about levels is how do I know which depth the node is. For example, i have a category called Information Technology and a category item called Business Informatics. I want to know how to decide that the Category(information technology) is on level 1 and the Item(business informatics) is on level 2.
Information Technology
|_
Business Informatics
And i do know how the Connect By XX = prior XXX works in the data query/record group.
Thanks for your help! -
Tree interface concept for hierarchical data creation/modification
I am designing an interface for hierarchical data creation and maintenance. The interface will have to provide all basic data modifications options:
edit an existing node, add new child/parent/sibling, as well as removing, sorting, dragging and dropping nodes around. Flex tree control is fully capable of all these functions while coding is not going to be a simple task. Has anyone worked on something like this? Any conceptual ideas?
ThanksWOW Odie! You're awesome !! It worked like a charm, I created a view as you suggested:
CREATE OR REPLACE FORCE VIEW "VIEW_TASKS_PROJECTS_TREE" ("ID", "PARENT_ID", "NODE_NAME") AS
SELECT to_char(id) as id
, null as parent_id
, project_name as node_name
FROM eba_task_projects
UNION ALL
SELECT to_char(id)
, to_char(project_id)
, task_name
FROM eba_task_tasks;
And then I created a new tree with the defaults and customized the Tree query a bit (just added the links really):
select case when connect_by_isleaf = 1 then 0
when level = 1 then 1
else -1
end as status,
level,
"NODE_NAME" as title,
null as icon,
"ID" as value,
null as tooltip,
'f?p=&APP_ID.:22:&SESSION.::NO::P22_ID,P22_PREV_PAGE:' || "ID" || ',3' as link
from "#OWNER#"."VIEW_TASKS_PROJECTS_TREE"
start with "PARENT_ID" is null
connect by prior "ID" = "PARENT_ID"
order siblings by "NODE_NAME"
Thanks man, you saved me a lot of time and headaches :) -
Query for spesific children in a tree structure
Hi,
My data is organized in a tree structure.
I need a sql statement that returns a parent that
have a set of children corresponding to some demands.
I provide a very simplified description of my data, but it covers my problem.
Can anyone please help me write a select statement that gives me all featureids
that have a GID attribute with children GNR=123 AND BNR=456?
Regards
gv
create table attributetype( id number, name varchar2(8), parentid number );
insert into attributetype( id, name ) values ( 1, 'GIDLIST' );
insert into attributetype( id, name, parentid ) values ( 2, 'GID', 1 );
insert into attributetype( id, name, parentid ) values( 3, 'GNR', 2 );
insert into attributetype( id, name, parentid ) values ( 4, 'BNR', 2 );
create table attribute( featureid number, id number, parentid number, atttypeid number, intvalue number );
--attributes for feature1
insert into attribute( featureid, id, parentid, atttypeid ) values( 1, 1, 0, 1 );
insert into attribute( featureid, id, parentid, atttypeid ) values( 1, 2, 1, 2 );
insert into attribute( featureid, id, parentid, atttypeid, intvalue ) values( 1, 3, 2, 3, 123 );
insert into attribute( featureid, id, parentid, atttypeid, intvalue ) values( 1, 4, 2, 4, 456 );
insert into attribute( featureid, id, parentid, atttypeid ) values( 1, 5, 1, 2 );
insert into attribute( featureid, id, parentid, atttypeid, intvalue ) values( 1, 6, 5, 3, 12 );
insert into attribute( featureid, id, parentid, atttypeid, intvalue ) values( 1, 7, 5, 4, 456 );
--attributes for feature 2
insert into attribute( featureid, id, parentid, atttypeid ) values( 2, 8, 0, 1 );
insert into attribute( featureid, id, parentid, atttypeid ) values( 2, 9, 8, 2 );
insert into attribute( featureid, id, parentid, atttypeid, intvalue ) values( 2, 10, 9, 3, 678 );
insert into attribute( featureid, id, parentid, atttypeid, intvalue ) values( 2, 11, 9, 4, 456 );
insert into attribute( featureid, id, parentid, atttypeid ) values( 2, 12, 8, 2 );
insert into attribute( featureid, id, parentid, atttypeid, intvalue ) values( 2, 13, 12, 3, 876 );
insert into attribute( featureid, id, parentid, atttypeid, intvalue ) values( 2, 14, 12, 4, 456 );
commit;
column name format a15
select a.featureid featureid, lpad(' ', (level - 1) * 2) || b.name name, a.id attid, a.parentid parentid, a.intvalue
from attribute a, attributetype b
where a.atttypeid=b.id
connect by prior a.id=a.parentid
start with a.parentid=0;
FEATUREID NAME ATTID PARENTID INTVALUE
1 GIDLIST 1 0
1 GID 2 1
1 GNR 3 2 123
1 BNR 4 2 456
1 GID 5 1
1 GNR 6 5 12
1 BNR 7 5 456
2 GIDLIST 8 0
2 GID 12 8
2 GNR 13 12 876
2 BNR 14 12 456
2 GID 9 8
2 GNR 10 9 678
2 BNR 11 9 456Hi,
Thanks for providing the CREATE TABLE and INSERT statements; that helps a lot.
You want featureids that meet three criteria:
(1) there is a GID attribute
(2) the GID attribute has a GNR child with intvalue=123
(3) the GID attribute has a BNR child with intvalue=456
Since you're looking for immediate children, not distant descendants, it's easiest to do this with a non-hierarrchical query that finds one of these criteria, and does EXISTS sub-queries to test for the other two.
For example:
WITH aat AS
( -- Begin aat: join of attribute and attributetype
SELECT a.featureid
, a.id
, a.parentid
, a.intvalue
, t.name
FROM attribute a
JOIN attributetype t ON a.atttypeid = t.id
) -- End aat: join of attribute and attributetype
SELECT DISTINCT featureid
FROM aat m -- m for main
WHERE name = 'GID'
AND EXISTS ( -- Begin EXISTS sub-query for GNR=123
SELECT NULL
FROM aat
WHERE parentid = m.id
AND name = 'GNR'
AND intvalue = 123
) -- End EXISTS sub-query for GNR=123
AND EXISTS ( -- Begin EXISTS sub-query for BNR=456
SELECT NULL
FROM aat
WHERE parentid = m.id
AND name = 'BNR'
AND intvalue = 456
) -- End EXISTS sub-query for BNR=456
;Alternatively, you could do a three-way self join, and skip the EXISTS sub-queries.
If you were looking for GNR and BNR descendants, any number of levels below the same GID node, it's easy to modify the query above. Just re-write the EXISTS sub-queries to CONNECT BY queries that "START WITH parentid = m.id".
It looks like this application will have a lot of use for a view like aat, above. If you don't already have a permanent view like that, you should create one. -
Populate hierarchical tree with Query "Select * from EMP"
Dear(S)
I want to populate a Hierarchical Tree to display results
in a well alligned form as results usually display in SQL Plus environment.
I try much using LPAD() and RPAD() function but fail to get required results.
I want to display more than one field values by concatenating them.
e.g.
SMITH CLERK 800
ALLEN SALESMAN 1600
WARD SALESMAN 1250
JONES MANAGER 2975
Please someone guide me how i can allign more than one field values in a Hierarchical tree.
Thanks and regards,
Tanveer Ahmad.Dear Thiru,
I have successfully populate the tree
but i want to display these fields at a specific distance.
How i can do it? (I have try it with LPAD() and RPAD() but fail.)
Thanks
Tanveer -
URGENT *** Hierarchical Tree in Forms 9i *** URGENT
Hello everybody,
for my company I need to build a hierarchical tree item, that will display static data over three levels. Let's say: departments, employees and employee projects.
How do I fill the Item?
When do I fill the Item?
Where do I fill the Item?
What are the elements of the SQL query, that fills the hierarchical tree?
Any help will be appreciated
[email protected]Note:210663.1 helped a bit.
I used the database column as the third element in the select part and put NULL as the fifth element. Then it worked.
Now I am looking for the way to add the employees, when the user selects / activates a department node.
Maybe you are looking for
-
Unable to add replication feature in sql server 2012 web edition
Hi All, We are using SQL Server 2012, Web edition and when it was installed replication is not an added feature so I tried to add this feature but getting below error. Error: There are no SQL Server instances or shared features that can be updated on
-
Macbook Pro Retina Display - Sound and video doesn't work at the same time.
I just bought a macbook pro retina display and tried to watch a movie by connecting my macbook pro via hdmi to my home theater receiver (Onkyo TX-SR309) and into my HDTV (Sony Bravia 42"). My problem is, i don't get sound from the speakers connected
-
Browsers display pages in new tab
My default browser is Chrome but I also use Firefox and Safari on my iMac. Since installation of Yosemite, I have a sporadic problem when the browser starts opening a link or displaying successive pages in a new tab rather than replacing the on-scre
-
Lr4B XML sidecar files and Lr3?
Being somewhat paranoid i permanently have Write to (xml) file turned on in Lr3 Is this safe in the mixed environment ie will any Lr4 extensions be ignored if I were to reload the folder into Lr3?
-
ipad 2 is stuck in shut down process and will not connect to itunes. unknown error.