liu ming created TRAFODION-3034:
-----------------------------------

             Summary: support Oracle 'Start with connect by' feature
                 Key: TRAFODION-3034
                 URL: https://issues.apache.org/jira/browse/TRAFODION-3034
             Project: Apache Trafodion
          Issue Type: New Feature
            Reporter: liu ming
            Assignee: liu ming


Oracle support hierarchy search , or recursive query. Syntax is 'connect by, 
start with'

 

If a table contains hierarchical data, then you can select rows in a 
hierarchical order using the hierarchical query clause (START WITH condition1) 
CONNECT BY condition2 

The START WITH clause is optional and specifies the rows athat are the root(s) 
of the hierarchical query. If you omit this clause, then Oracle uses all rows 
in the table as root rows. The START WITH condition can contain a subquery, but 
it cannot contain a scalar subquery expression. 

The CONNECT BY clause specifies the relationship between parent rows and child 
rows of the hierarchy. The connect_by_condition can be any condition, however, 
it must use the PRIOR operator to refer to the parent row. Restriction on the 
CONNECT BY clause: The connect_by_condition cannot contain a regular subquery 
or a scalar subquery expression. 

The PRIOR operator to refer to the parent row can be used as following: 

Sample query on the employees table:

SELECT employee_id, last_name, manager_id, LEVEL FROM employees CONNECT BY 
PRIOR employee_id = manager_id;

shows employee_id, last_name, manager_id and level in the tree for the employee 
hierarchy. 

In Oracle 9i a new feature for hierarchical queries is added: 
sys_connect_by_path It returns the path of a column value from root to node, 
with column values separated by char for each row returned by CONNECT BY 
condition. Both column and char can be any of the datatypes CHAR, VARCHAR2, 
NCHAR, or NVARCHAR2. The string returned is of VARCHAR2 datatype and is in the 
same character set as column. 
Examples
The following example returns the path of employee names from employee Kochhar 
to all employees of Kochhar (and their employees): 

SELECT LPAD(' ', 2*level-1)|| SYS_CONNECT_BY_PATH(last_name, '/') "Path" FROM 
employees CONNECT BY PRIOR employee_id = manager_id;

In Oracle 10 3 new features for hierarchical queries are added:
h3. connect_by_root

CONNECT_BY_ROOT is a unary operator that is valid only in hierarchical queries. 
When you qualify a column with this operator, Oracle returns the column value 
using data from the root row. This operator extends the functionality of the 
CONNECT BY [PRIOR] condition of hierarchical queries. Restriction on 
CONNECT_BY_ROOT: You cannot specify this operator in the START WITH condition 
or the CONNECT BY condition. Example query:

SELECT last_name "Employee", CONNECT_BY_ROOT last_name "Manager", LEVEL-1 
"Pathlen", SYS_CONNECT_BY_PATH(last_name, '/') "Path" FROM employees WHERE 
LEVEL > 1 and department_id = 110 CONNECT BY PRIOR employee_id = manager_id;
h3. connect_by_isleaf

The CONNECT_BY_ISLEAF pseudocolumn returns 1 if the current row is a leaf of 
the tree defined by the CONNECT BY condition. Otherwise it returns 0. This 
information indicates whether a given row can be further expanded to show more 
of the hierarchy. Example

SELECT employee_id, last_name, manager_id, connect_by_isleaf "IsLeaf" FROM 
employees START WITH last_name = 'King' CONNECT BY PRIOR employee_id = 
manager_id;
h3. connect_by_iscycle

The CONNECT_BY_ISCYCLE pseudocolumn returns 1 if the current row has a child 
which is also its ancestor. Otherwise it returns 0. 
You can specify CONNECT_BY_ISCYCLE only if you have specified the NOCYCLE 
parameter of the CONNECT BY clause. NOCYCLE enables Oracle to return the 
results of a query that would otherwise fail because of a CONNECT BY loop in 
the data. 



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to