Nodes in the tree

Hi,
Database: ORacle 11g
Query1:
SELECT rank() OVER (PARTITION BY mgr ORDER BY empno) r,
      empno, ename,mgr FROM emp
      start with mgr=7839
      connect by prior empno = mgr
Result set:
r  empno  ename mgr
1
7788
SCOTT
7566
2
7902
FORD
7566
1
7499
ALLEN
7698
2
7521
WARD
7698
3
7654
MARTIN
7698
4
7844
TURNER
7698
5
7900
JAMES
7698
1
7934
MILLER
7782
1
7876
ADAMS
7788
1
7566
JONES
7839
2
7698
BLAKE
7839
3
7782
CLARK
7839
1
7369
SMITH
7902
Query2:
SELECT LTRIM(SYS_CONNECT_BY_PATH(r, '.'), '.') node ,
    LPAD (' ', 2 * (LEVEL - 1))   ||  mgr , struc.* 
    FROM
      SELECT rank() OVER (PARTITION BY mgr ORDER BY empno) r,
      empno, ename,mgr FROM emp
      start with mgr=7839
      connect by prior empno = mgr
) struc
start with mgr=7839
connect by prior empno = mgr
Result set:
node  mgr      r   empno  ename mgr
1
7839
1
7566
JONES
7839
1.1
  7566
1
7788
SCOTT
7566
1.1.1
    7788
1
7876
ADAMS
7788
1.2
  7566
2
7902
FORD
7566
1.2.1
    7902
1
7369
SMITH
7902
2
7839
2
7698
BLAKE
7839
2.1
  7698
1
7499
ALLEN
7698
2.2
  7698
2
7521
WARD
7698
2.3
  7698
3
7654
MARTIN
7698
2.4
  7698
4
7844
TURNER
7698
2.5
  7698
5
7900
JAMES
7698
3
7839
3
7782
CLARK
7839
3.1
  7782
1
7934
MILLER
7782
Is this representation of node column is correct?
Can anyone pplease explain to me step by step how the above query2 executes
Thanks

Hi,
GopalaKrishna wrote:
Hi Frank,
Actually I thought there might be some standard representation of node structure in hierarchical tree.That's why I have asked is that representation of node structure correct or not?
Sorry I am newbie in this concepts.
I was expecting the below type of result set but it turned out  as above result set in original request.More over I did nt understand sys_connect_by_path at that time I will get back to you once I understand  the previous request of mine where you explained it nicely...
1
7839
1.1
  7566
1.1.1
    7788
1.1.1.1
     7876
1.1.2
    7902
1.1.2.1
      7369
1.2
  7698
1.2.1
   7900
1.2.2
   7521
1.2.3
   7499
1.2.4
   7654
1.2.5
   7844
1.3
  7782
1.3.1
   7934
Sometimes people attach numbers to the tree like you did, but most of the time they don't find it necessary.
So, you were expecting to see 14 rows of output, starting with the node that represents 'KING'.  Instead, you got 13 rows, starting with the people who report directly to 'KING'.  If you want to start with 'KING', then change the START WITH clause to start with 'KING':
WITH got_child_num  AS
    SELECT empno, mgr, ename
    ,      ROW_NUMBER () OVER ( PARTITION BY  mgr
                                ORDER BY      empno
                              )   AS child_num
    FROM    scott.emp
SELECT  SUBSTR ( SYS_CONNECT_BY_PATH (child_num, '.')
               , 2
               )               AS node
,       LPAD ( ' '
             , 2 * (LEVEL - 1)
             ) || empno        AS iempno
,       empno, ename, mgr
FROM    got_child_num
START WITH  mgr   IS NULL
CONNECT BY  mgr   = PRIOR empno
Output:
NODE       IEMPNO               EMPNO ENAME             MGR
1          7839                  7839 KING
1.1          7566                7566 JONES            7839
1.1.1          7788              7788 SCOTT            7566
1.1.1.1          7876            7876 ADAMS            7788
1.1.2          7902              7902 FORD             7566
1.1.2.1          7369            7369 SMITH            7902
1.2          7698                7698 BLAKE            7839
1.2.1          7499              7499 ALLEN            7698
1.2.2          7521              7521 WARD             7698
1.2.3          7654              7654 MARTIN           7698
1.2.4          7844              7844 TURNER           7698
1.2.5          7900              7900 JAMES            7698
1.3          7782                7782 CLARK            7839
1.3.1          7934              7934 MILLER           7782
I find it rather neat how the first 2 columns stay a fixed difference apart in this output.  As the node column gets bigger or smaller, there is correspondingly more or less padding in the iempno column.

Similar Messages

  • Displaying the entire text of a tree node when the tree isn�t wide enough

    Hi,
    I have a JTree displayed in a JScrollPane, so there is a chance that some of the tree data may be hidden if the tree's width is insufficient, so when the user moves the cursor over a tree node whose text is not completely visible (cut off by the right edge of the scroll pane and/or window), a tooltip is displayed to show the entire node text. So far so good!
    If the user double click a node in the tree a new window is supposed to be opened. This works fine if the tooltip hasn�t been displayed jet, but if it has then the user has to click 3 times to open the window.
    The first time to remove the tooltip and the next 2 opens the window.
    How can I awoid this?
    Thanks!!!!
    :-)Lisa

    Any ideas, please?

  • JTree - How to Expand all Nodes in the Tree

    I have a tree that has one primary node, two sub-nodes, and multiple sub-sub-nodes under those. I want to expand (show) all these nodes in the tree when the tree first loads. I tried expandRow() but that only seems to expand one row at a time by entering a single integer for the row. Is there any way to expand all rows/nodes when loading the tree?

    see
    http://forum.java.sun.com/thread.jsp?forum=57&thread=148793

  • JTree - need to get the value of a node at a specific node in the tree

    For Example here is a tree:
    Root
    -Item1
    A
    B
    C
    -Item2
    A
    B
    C
    Scenario: Somebody selects B in Item2 from the tree and drags it to a JList. Need to be able to tell the JList that the B came from Item2 and not Item1. So how do I get the Item1, Item2 value? Thanks in advance for all your help.
    Here is the code I am working with...so I have a TreeSelectionEvent(e), a DefaultMutableTreeNode(node) and my JTree(mainTree)
    public void valueChanged(TreeSelectionEvent e) {
    DefaultMutableTreeNode node = (DefaultMutableTreeNode) mainTree.getLastSelectedPathComponent();
    getChildren(node);

    public void valueChanged(TreeSelectionEvent e) {
       javax.swing.tree.TreePath path = e.getPath();
       ...Then use path.getLastPathComponent() and path.getParentPath().getLastPathComponent() methods.
    Tristan

  • Program to add node /  delete node in the tree control via abap object

    Hi all,
    i am new to abap objects.
    Can anyone help me out to give program about add node , delete node at
    a particular point in tree hierarchy.
    folder1                     -- level 1
    subfolder1          -- level 2
    *********subfolder1   -- level 3
    *********subfolder2  -- level 3
    subfolder2          -- level 2
    folder2                     -- level 1
    if i select level3 and click on ADD button .....i get a facility to add new node
    at level 3 and and same thing can happen at level1 and level2 ............ if i select
    and folder at level3 and click on delete button ....it should delete that folder...
    if you do not have such program ........then guide me how to achieve this target via object oriented because i have to split the screen also and have to show some alve display in that.
    just guide me how to add and delete node at a particular level in tree structure....
    thanks in advance........

    Hello Ravi,
    Try this demo program:
    <b>BCALV_TREE_01</b>
    <b>BCALV_TREE_DEMO</b>
    BCALV_TREE_SIMPLE_DEMO
    Also try:
    BCALV_TREE_02
    BCALV_TREE_03
    BCALV_TREE_04
    BCALV_TREE_05
    BCALV_TREE_06
    regards,
    Beejal
    **reward if this helps

  • How to add a button in the child node of the Tree Table?

    Hi All,
    I am having a requirement to create a tree table and it should have a delete button to each child node (screenshot attached).
    Can anyone provide me a sample for how to implement this.
    Thanks in Advance
    Aravindh

    Hi Aravindhan,
    Try something like this:
    var ttDesvios = new sap.ui.table.TreeTable();
      var cbDesviacion = new sap.ui.commons.CheckBox();
      ttDesvios.addColumn(new sap.ui.table.Column({
      label: new sap.ui.commons.Label({text: "Col1"}),
      template: new sap.ui.commons.Label({text: "Info"}),
      width: "50px",
      ttDesvios.addColumn(new sap.ui.table.Column({
      label: new sap.ui.commons.Label({text: "Action"}),
      template: new sap.ui.commons.Button({text: "Delete"}).bindProperty("visible", "pathPropertyChild", function(value){
              if(value .............){ return true;} //For child
              else{ return false;} //For parent
      width: "160px",
    Regards
    EDIT: Wrong paste code, that's better!

  • ToolTip for each node of the Tree in JTreeTable?

    Hello! I have the problem that a ToolTip i have set in the TreeCellRenderer would not been displayed! Only one ToolTip will pop up over the JTreeTable with the ToolTipText that was set in the first CellRenderer. Does everybody have an idea?

    OK! Its done! The solution does not help exact, but it gives my the way! With the coordinates of the MouseEvent I can get the Value of the current table row and set the ToolTip text new. Teh ToolTipManager automatically repaints the ToolTip whit the new text and position.

  • How to make the tree sibling nodes sorting  in memory per the VO default?

    Hi,
    I have a question on the uncommitted tree nodes sorting. The tree was built using the same VO with the view link to itself (parent/child relation). I have defined a default sorting on my VO. Now if I insert a node to the tree, the sibling nodes may not sort correctly if it is not committed. I tried to insert it to the RowsetIterator at the right position, it seems OK. but when you right click or something that make the tree to refresh, the order will mess up. If I do an auto save after each action, everything looks OK. But the fusion pattern is to do a global save, I have to manipulate the tree with the uncommitted data. I know I can set the view object's SQL mode to do the in-memory sorting. But not sure if it works on the tree structure, because it is not a single RowsetIteroator.. Can someone give an advice? Many thanks.
    Edited by: user736572 on Jan 20, 2012 2:48 PM

    Thanks Sudipto for trying to help. I did try that, and as I mentioned in the previous posting, it doesn't work for the tree nodes (multiple RowSetIterator). the following is my code, where the treeVO is the vo instance for the firstLevel tree nodes and it has view link to its children. I am not sure how to sort all children for each level. Even for the first level where I did the explicit sorting in memory, it still not sorting at all.
    treeVO.setSortBy("code");
    treeVO.setQueryMode(ViewObject.QUERY_MODE_SCAN_ENTITY_ROWS|ViewObject..QUERY_MODE_SCAN_DATABASE_TABLES);
    treeVO.executeQuery();

  • How to make the leaf node of the APEX tree downloadable

    Hi All,
    I am trying to build a "library" page for my application, with the documents as the leaf nodes of the tree. The documents come from a database table, and each document is a BLOB.
    My question is, how should I write the "link" part of the APEX tree query to make the lead node document downloadable for the end users?
    Thanks,
    Christine

    Hilary helped me out of this by creating a new form page with two new items there corresponding to the PK and BLOB column, then in the tree query use apex_util.get_blob_file_src function as the link. Below is the email from Hilary:
    1. Created Form, page 13, based upon your table storing the documents as BLOBs. The form page has just two associated items: P13_DOC and P13_DOC_ID. The item P13_DOC is of type FILE and contains a source type of DB column, which is the first required parameters of the function get_blob_file_src. NOTE: I could have created a form region on the same page as your tree, but chose to generate a separate page. You may choose to change this yourself.
    2. Updated the Tree query on pg 12 to use the following link for tree nodes of level 4:
    apex_util.get_blob_file_src('P13_DOC',v.attr3)
    ...where P13_DOC is the application page item mentioned in step 1 above, and v.attr3 should hold the unique ID associated with the document. Your tree now allows users to download the listed documents.

  • I want to make only one node draggable in the tree. How?

    I want to make only one node draggable in the tree. How?
    when we have only
    tree.setDragEnable(true)which makes draggable the entire nodes in the tree.
    Thanks -

    Hi Andrea
    Just to clarify things up: is this what you want?
    package treeDnD;
    * DragJustOneNode.java
    import java.awt.*;
    import java.awt.datatransfer.*;
    import java.awt.dnd.*;
    import java.io.*;
    import javax.swing.*;
    import javax.swing.tree.*;
    public class DragJustOneNode extends JFrame {
        private JTree tree;
        private DefaultTreeModel model;
        private DefaultMutableTreeNode root;
        public DragJustOneNode() {
            super("Only child 1 is draggable!");
            setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
            setSize(400,300);
            setLocationRelativeTo(null);
            tree = new JTree();
            tree.setDragEnabled(true);
            getContentPane().add(new JScrollPane(tree), BorderLayout.CENTER);
            tree.setTransferHandler(new TreeTransferHandler());
            root = new DefaultMutableTreeNode(new NodeData(0, "root"));
            root.add(new DefaultMutableTreeNode(new NodeData(1, "child 1")));
            root.add(new DefaultMutableTreeNode(new NodeData(2, "child 2")));
            root.add(new DefaultMutableTreeNode(new NodeData(3, "child 3")));
            root.add(new DefaultMutableTreeNode(new NodeData(4, "child 4")));
            model = new DefaultTreeModel(root);
            tree.setModel(model);
        public static void main(final String args[]) {new DragJustOneNode().setVisible(true);}
    class NodeData{
        private int id;
        private String data;
        public NodeData(final int id, final String data){
            this.id = id;
            this.data = data;
        public int getId() {return id;}
        public void setId(final int id) {this.id = id;}
        public String getData() {return data;}
        public void setData(final String data) {this.data = data;}
        public String toString() {return data;}
    class TreeTransferable implements Transferable{
        private NodeData nodeData;
        public TreeTransferable(NodeData nodeData){
            this.nodeData = nodeData;
        public DataFlavor[] getTransferDataFlavors() {
            return new DataFlavor[]{DataFlavor.stringFlavor};
        public boolean isDataFlavorSupported(DataFlavor flavor) {
            return true;
        public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {
            return nodeData;
    class TreeTransferHandler extends TransferHandler{
        private DefaultMutableTreeNode sourceNode, targetNode;
        public boolean canImport(final JComponent comp, final DataFlavor[] transferFlavors) {
            NodeData nodeData = (NodeData) (sourceNode).getUserObject();
            if(nodeData.getId() == 1) return true;
            return false;
        protected Transferable createTransferable(final JComponent c) {
            JTree tree = ((JTree)c);
            sourceNode = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
            return new TreeTransferable((NodeData) sourceNode.getUserObject());
        public int getSourceActions(final JComponent c) {return DnDConstants.ACTION_MOVE;}
        public boolean importData(final JComponent comp, final Transferable t) {
            JTree tree = ((JTree)comp);
            DefaultTreeModel model = (DefaultTreeModel)tree.getModel();
            targetNode = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
            DefaultMutableTreeNode parent = (DefaultMutableTreeNode)targetNode.getParent();
            if(parent == null) return false;
            model.removeNodeFromParent(sourceNode);
            model.insertNodeInto(sourceNode, parent, parent.getIndex(targetNode));
            tree.setSelectionPath(new TreePath(model.getPathToRoot(sourceNode)));
            return true;
    }

  • How to get UIComponent of the selected node in af:tree with drag and drop

    Hi
    Are there examples showing how one could get a UIComponent using DropEvent to be used with a Popup showing as a custom "context menu" at the target node ?
    Right now, with dropEvent.getDropComponent, we could only get the tree.
    We like to get its selected node so that the popup shows at the node level, not at the tree level.
    Thanks

    Hi Frank
    Thanks for responding.
    We like to show on our custom "context menu" using PopupHints (not using facet name contextmenu) with 3 commandMenuItems.
    Since component id is needed by PopupHints to place this custom "context menu", we tried
    RichTree dropTree = (RichTree)dropEvent.getDropComponent();
    alignId = dropTree.getClientId(context);
    // alignId = pt1:pt_region1:1:pt1:pc1:navTree
    getClientId returns us the tree id and hence the context menu is placed next to tree.
    We like to place the context menu next to a target node of the tree when dragging and dropping.
    But we couldn't figure out how to get that node id.
    In your suggestion,
    List dropRowKey = (List) dropEvent.getDropSite();
    RichTree dropComponent = (RichTree) dropEvent.getDropComponent();
    dropCompoent.setRowKey(dropRowKey);
    how do we then get the id of this node then ? What's the method ?
    Thanks Frank

  • Can't remove a node from a tree

    I am using the custom tree dataDescriptor provided in Flex live
    doc. It works for creating the tree and add notes, however when I
    try to remove a node from the tree it cant work. Does anyone have
    any idea?
    This is the code for MyCustomeTreeDataDescriptor.as
    package
    import mx.collections.ArrayCollection;
    import mx.collections.CursorBookmark;
    import mx.collections.ICollectionView;
    import mx.collections.IViewCursor;
    import mx.events.CollectionEvent;
    import mx.events.CollectionEventKind;
    import mx.controls.treeClasses.*;
    public class MyCustomTreeDataDescriptor implements
    ITreeDataDescriptor
    // The getChildren method requires the node to be an Object
    // with a children field.
    // If the field contains an ArrayCollection, it returns the
    field
    // Otherwise, it wraps the field in an ArrayCollection.
    public function getChildren(node:Object,
    model:Object=null):ICollectionView
    try
    if (node is Object) {
    if(node.children is ArrayCollection){
    return node.children;
    }else{
    return new ArrayCollection(node.children);
    catch (e:Error) {
    trace("[Descriptor] exception checking for getChildren");
    return null;
    // The isBranch method simply returns true if the node is an
    // Object with a children field.
    // It does not support empty branches, but does support null
    children
    // fields.
    public function isBranch(node:Object,
    model:Object=null):Boolean {
    try {
    if (node is Object) {
    if (node.children != null) {
    return true;
    catch (e:Error) {
    trace("[Descriptor] exception checking for isBranch");
    return false;
    // The hasChildren method Returns true if the node actually
    has children.
    public function hasChildren(node:Object,
    model:Object=null):Boolean {
    if (node == null)
    return false;
    var children:ICollectionView = getChildren(node, model);
    try {
    if (children.length > 0)
    return true;
    catch (e:Error) {
    return false;
    // The getData method simply returns the node as an Object.
    public function getData(node:Object,
    model:Object=null):Object {
    try {
    return node;
    catch (e:Error) {
    return null;
    // The addChildAt method does the following:
    // If the parent parameter is null or undefined, inserts
    // the child parameter as the first child of the model
    parameter.
    // If the parent parameter is an Object and has a children
    field,
    // adds the child parameter to it at the index parameter
    location.
    // It does not add a child to a terminal node if it does not
    have
    // a children field.
    public function addChildAt(parent:Object, child:Object,
    index:int,
    model:Object=null):Boolean {
    var event:CollectionEvent = new
    CollectionEvent(CollectionEvent.COLLECTION_CHANGE);
    event.kind = CollectionEventKind.ADD;
    event.items = [child];
    event.location = index;
    if (!parent) {
    var iterator:IViewCursor = model.createCursor();
    iterator.seek(CursorBookmark.FIRST, index);
    iterator.insert(child);
    else if (parent is Object) {
    if (parent.children != null) {
    if(parent.children is ArrayCollection) {
    parent.children.addItemAt(child, index);
    if (model){
    model.dispatchEvent(event);
    model.itemUpdated(parent);
    return true;
    else {
    parent.children.splice(index, 0, child);
    if (model)
    model.dispatchEvent(event);
    return true;
    return false;
    // The removeChildAt method does the following:
    // If the parent parameter is null or undefined, removes
    // the child at the specified index in the model.
    // If the parent parameter is an Object and has a children
    field,
    // removes the child at the index parameter location in the
    parent.
    public function removeChildAt(parent:Object, child:Object,
    index:int, model:Object=null):Boolean
    var event:CollectionEvent = new
    CollectionEvent(CollectionEvent.COLLECTION_CHANGE);
    event.kind = CollectionEventKind.REMOVE;
    event.items = [child];
    event.location = index;
    //handle top level where there is no parent
    if (!parent)
    var iterator:IViewCursor = model.createCursor();
    iterator.seek(CursorBookmark.FIRST, index);
    iterator.remove();
    if (model)
    model.dispatchEvent(event);
    return true;
    else if (parent is Object)
    if (parent.children != undefined)
    parent.children.splice(index, 1);
    if (model)
    model.dispatchEvent(event);
    return true;
    return false;
    This is my tree definition:
    <mx:Tree width="143" top="0" bottom="0" left="0"
    height="100%"
    id="publicCaseTree"
    dataDescriptor="{new MyCustomTreeDataDescriptor()}"
    dataProvider="{ac}"
    defaultLeafIcon="@Embed('assets/caseIcon.png')"
    change="publicTreeChanged(event)"
    dragEnabled="true"
    dragMoveEnabled="false"/>
    This is how I remove the selected node from the tree. When
    Delete button is clicked, the doDeleteCase function is
    exectuted.
    public function publicTreeChanged(event:Event):void {
    selectedNode =
    publicCaseTree.dataDescriptor.getData(Tree(event.target).selectedItem,
    ac);
    public function doDeleteCase(event:Event):void{
    publicCaseTree.dataDescriptor.removeChildAt(publicCaseTree.firstVisibleItem,
    selectedNode, 0, ac);
    Any help would be appreciated.Thanks.

    Finally I removed nodes from tree, but not sure I did in the
    right way. Anybody encounter the same problem, please
    discuss.

  • How to go back to item that were just on in the tree if data block info has an error?

    I have a tree that lists information about a Client (addresses, quotes, etc). When the user clicks on a node in the tree, a data block on the right gets populated with the information for that node. If the user enters invalid information for that node and then clicks on another node in the tree, the error appears, the data block keeps the information for the offending node, but the node in the tree that is selected is for the one the user just clicked on, not the offending node. How do I get the selected node in the tree to remain at the offending data block?

    hi tina,
    create a 'when-mouse-enter' trigger in the 'tree block'.. check the record displayed on the data block is correct.. if not disable the tree item.. so the user will not be able to select any other node without correcting it..
    another alternative is to store the current node in a global variable.. check the validation in 'when-tree-node-selected' trigger.. if it fails then search for the treenode and position it back.. a l'il difficult
    hope this will help u..
    ajith

  • Selecting/highlighting a node in Flex Tree using HierarchicalCollectionView as DataProvider

    Hi,
    I am using GroupingCollection2 as the dataprovider for HierarchicalCollectionView. The GroupingCollection2 takes its data from an ArrayCollection. And finally I have a Tree whose dataprovider is the HierarchicalCollectionView . I want to acheive 2 things:
    1) I want to programatically select/highlight a node in this tree. Using expandItem and passing the Object from the arraycollection is not working.
    2) Refresh the tree if there is a change in the arrayCollection.
    For the second task, I have a Java Layer that gives me the ArrayCollection  (dp for GroupingCollection2) when I fire a CairngormEvent. But the problem is that every node in the tree is duplicated. I can clearly see that say there are 8 items in the array collection but still the tree shows 16 items ( Each item duplicated as the node in the tree.)
    I have been trying to figure this out for many days now without any luck. Any sort of suggestion would be appreciated.
    Thank u in advance.

    I got the refreshing of the tree part by myself. One needs to call the refresh method on the GroupingCollection2 and HierarchicalCollectionView objects when the arraycollection has just arrived from the database.
    But I still havent been able to figure out how to highlight or open a tree node programatically. I am repeating that using (calling / setting) tree.expandItem() and tree.openItems is not helping me. Plz somebody help.

  • Can anyone give me some link about the axample about the tree

    Dear All:
    I am learning something about the tree, is there any one can provide a link about a an example for tree node deletion /add?
    and I also need an example about drop and drag a node from the tree too.
    Thank you very much !

    Start with this section from the Swing tutorial on "How to Use Trees":
    http://java.sun.com/docs/books/tutorial/uiswing/components/tree.html
    The Swing Connections has a couple of articles that might help:
    http://java.sun.com/products/jfc/tsc/articles/

Maybe you are looking for