Skip to main content

Oracle Connect By Clause to Perform Hierarchical Queries.

 If we want to perform hierarchical queries we need to use connect by clause in our sql query.

Hierarchical query is any query wherin you want to display parent child relationship with the case that a parent may have multiple children and those have their own creating a tree like structure.

One classic scenario highlighted on almost all sites is employee table wherein employee's manager is stored in the employee row the manager id is again one of the employee in the employee table.

But we are not going to take it as you can reference it almost on any site that hosts oracle based content.
We are going to do a query based on DBA_DEPEDENCIES or ALL_DEPENDANCIES if you do not have access to former.

In DBA_DEPENDANCY table we have hierarchy of REFERENCED_NAME(parent) and the referring objects in column NAME(child ) that have dependency on the parent.

with this in mind we would need to set our connect by clause as prior NAME= REFERENCED_NAME
This confirms that REFRENCED_NAME is the parent and we are going to base this hierarchy on this relation.

Next addendum to connect by clause we are going to make is nocycle attribute. In Oracle there is a possibility of cyclical dependency in this case we would not have clear tree. Oracle throws an error when there is such cyclical data in your query. If you know this is the possibility its better to use nocycle clause. 

So here's the code that would print all the dependencies of table 'ORDER_HEADER_TABLE'.
select CONNECT_BY_ROOT REFERENCED_NAME  ||   sys_connect_by_path( name , '->' ),
d.* from dba_dependencies d
where owner = 'HR' 
connect by nocycle prior NAME= REFERENCED_NAME 
start with REFERENCED_NAME = 'ORDER_HEADER_TABLE' 
order by 1
Demo of DBA_DEPENDENCIES HIERARCHY
Demo of DBA_DEPENDENCIES HIERARCHY


SYS_CONNECT_BY_PATH gives you bread crumb like navigation from root node (in this case ORDER_HEADER_TABLE) to its child leaf nodes or intermediate nodes. So basically you have printed the hierarchy and path tracing from parent to child nodes. Hope you found this useful.


Comments

Popular posts from this blog

Oracle Procedures to delete the parent child table rows with integrity constraints.

With some very hard work and innovative thinking we came up with the procedures (can be easily clubbed into package) to delete the parent child relationship row with any number of levels. Below code would find the child row of the parent row being deleted and delete it first , if the child row has its own child then that childs children are fetched and deleted so its basically a recursive algorithm There are not many situations where you would want to use this. We had a customer mstr record to be deleted which had 20 levels of child records held tight by (ORA-02292: integrity constraint   violated - child record found ) with their parent child constraints. Since this only was a delete for 1 Master record we went ahead and used this script. If you have more than 20 levels Wise course would be to disable constraints and really think why you want to delete such master record. Note of caution : BE CAREFUL using this on production environment. The procedures create the insert ...

Get a PLSQL code dump of all your Oracle database code.

I used to work as a part time DBA and when I was doing my supposedely menial tasks like unlocking accounts. One of the frequent request was to get an code for the object a Function or Package or Trigger. While this was trivial task to get an single object code it had to be quick. I never bothered to write any code or script to get that.  However one day a developer came and asked me for a code dump for a whole schema ( We had 2500 eligible objects). What he wanted was the code dump for every plsql object stored in the system. This included triggers, functions, procedures , packages. So I searched the internet and came up with a code to do that. It was fairly small 10 liner code which was astonishing. Curiously I never saw the function used anywhere. The function clob2file is from package dbms_xslprocessor. This one is available in oracle 11g so if you ever found yourself yearning to dump a clob object to file you should try using this. There was just a little problem I wante...

New version of QueryLight is out !!

Here are the fixes and new development done. Latest Update and Fixes Added ability to write xlsx in new office xlsx format. Added ability to view code with F4. Added additional describe capabilities with F4. Download Page :  Go to Project HomePage https://sourceforge.net/projects/query-light-light-orcl-client/