Support for hierarchical query

Hi all

I must be tired and can't think clearly, so I am a little confused the following query.

The environment is Oracle 9i:

Oracle9i Enterprise Edition Release 9.2.0.8.0 - 64 bit Production

PL/SQL Release 9.2.0.8.0 - Production

CORE Production 9.2.0.8.0

AMT for HP - UX: 9.2.0.8.0 - Production Version

NLSRTL Version 9.2.0.8.0 - Production

Suppose I have the following data:

with mydata as

(

Select the code 1, code_high, null, 'John' cname 'Smith' csurname, 'X' union resp. double all the

Select 2 code, 1 code_high, cname 'Bill', 'White' csurname, RESP null in union double all the

Select 3 code, code_high 2, 'Fred' cname 'Reed' csurname, 'X' union resp. double all the

Select 4 code, code_high, null, 'Tim' cname 'Hackman' csurname, 'X' union resp. double all the

Select code 5, code_high 4, 'John', 'Reed' cname csurname resp null in union double all the

Select 6 code, code_high 5, cname 'Bill', 'Hakcman' csurname, 'X' union resp. double all the

Select the code 7, code_high 6, cname 'Fred' csurname 'White', null union resp. double all the

Select code 8, code_high 7, 'Bill' cname 'Smith' csurname, resp. union null double all the

Select 9 code, code_high 8, cname "Tom", "Reed" csurname, null double RESP

)

Select *.

of mydata;

CODE CODE_HIGH CNAME CSURNAME RESP

---------- ---------- ----- -------- ----

John Smith 1 X

2 1 bill White

3 2 Fred Reed X

4 Tim Hackman X

5 4 John Reed

6 5 bill Hakcman X

7 6 Fred white

8 7 bill Smith

9 8 Tom Reed

It is a hierarchical query where code_high represents the father.

I need to find in the hierarchy of higher level responsible for each code.

Suppose I want to find in the hierarchy, one with resp = 'X '.

Run the following query I find for the code = 9

Select phone, cname, csurname code

of mydata

When resp = 'X '.

and rownum = 1

Connect prior code_high = code

start with code = 9;

CODE CNAME CSURNAME

---------- ----- --------

Bill 6 Hakcman

Is there a way to get the full list with the loaded correspondents.

The expected results are:

CODE CODE_HIGH CNAME CSURNAME RESP. RESP_CODE RESP_NAME RESP_SURNAME

---------- ---------- ----- -------- ---- --------- --------- ------------

1 John Smith John Smith 1 X

2 1 bill White 1 John Smith

3 2 Fred Reed X 3 Fred Reed

Tim Hackman 4 X 4 Tim Hackman

5 4 John Smith 4 Tim Hackman

6 5 bill Hakcman Bill Hakcman 6 X

7 6 Fred White 6 Bill Hakcman

8 7 bill Smith 6 Bill Hakcman

9 8 Tom Reed 6 Bill Hakcman

Kind regards.

Alberto

Hi, Alberto.

I know that you are using Oracle 9; That's why I mentioned that you would have to use a substitute for CONNECT_BY_ROOT.  Before I could show how, I saw the solution of the Padders, which is probably simpler and more efficient for this work.  Padders used REGEXP_SUBSTR, which is not available in Oracle 9, but you can use SUBSTR and INSTR instead.

Here is the solution of the Padders for Orcle 9:

WITH got_resp_path AS

(

SELECT m.*

RTRIM (SYS_CONNECT_BY_PATH (CASE

WHEN resp = 'X '.

THEN the code

END

, ' '

)

) AS resp_path

OF mydata m

START WITH code_high IS NULL

CONNECT BY code_high = code PRIOR

)

C. SELECT

r.code AS resp_code

r.cname AS resp_name

r.csurname AS resp_surname

OF got_resp_path c

JOIN mydata r ON r.code = TO_NUMBER (SUBSTR (c.resp_path

INSTR (c.resp_path

, ' '

-1

)

)

)

ORDER BY c.code

;

I agree that what you posted in your last post is not very satisfactory.  Rather than make a CONNECT a separate query for each column of resp_ you want to view, you can modify it to get only the unique code and then use it in a join, as Padders, to get all the other columns you need.

Tags: Database

Similar Questions

  • Support for PIVOT query (or advice on the best way to do it)

    Hi gurus of SQL,.

    I'd appreciate any help you could provide on this request, I'm assuming that the best way to do this would be by using the PIVOT function. I read through some of the documents and books, and done some research here in the forums, but can't seem to find a way to make it work.

    I'm on Oracle 11.1.0.6.0 self.

    I have a table like this:
    ID     Product          Month_A_Amt Month_B_Amt Month_C_Amt     Month_D_Amt
    
    123     ProductA     3          5          7          9
    123     ProductB     2          4          6          8
    123     ProductC     10          11          12          13
    456     ProductA     1          2          3          4
    456     ProductB     3          4          5          6
    We get this data each month - Month_A is always the most recent month, and so it goes back for this game, Month_A is 09 November, Month_B is October 09, Month_C is Sept 09, etc. I'm OK with Hardcoding this value each month, so for the purposes of this exercise, just assume that Month_A is the 09 November, Month_B is Oct 09, Month_C is Sept 09 and Month_D is Aug 09.

    I need essentially "Pivot" in this table, so the end result looks like this:
    ID     Month          Product_A_Amt     Product_B_Amt     Product_C_Amt
    
    123     Nov 09          3          2          10
    123     Oct 09          5          4          11
    123     Sep 09          7          6          12
    123     Aug 09          9          8          13
    456     Nov 09          1          3          null
    456     Oct 09          2          4          null
    456     Sep 09          3          5          null
    456     Aug 09          4          6          null
    Here's the SQL code to create the database with test data table. Now that I've typed this explanation, it still seems easier that I had done it to be... but I'm still confused, so any help is greatly appreciated, thank you!

    create table test_base_table)
    Identification number,
    Product varchar2 (20).
    Number of Month_a_amt
    Number of Month_b_amt
    Number of Month_c_amt
    Number of Month_d_amt);

    insert into test_base_table values (123, "ProductA', 3, 5, 7, 9);
    insert into test_base_table values (123, "ProductB", 2, 4, 6, 8);
    insert into test_base_table values (123, "ProductC", 10, 11, 12, 13);
    insert into test_base_table values (456, 'ProductA", 1, 2, 3, 4);
    insert into test_base_table values (456, 'ProductB', 3, 4, 5, 6);

    Published by: TheBlakester on February 10, 2010 19:56

    Hello

    You don't want to make several clauses UNPIVOT and PIVOT; you want to do several sets of columns in a cluase PIVOT and UNPIVOT one clause.

    In the UNPIVOT clause, it's just a matter of replacing the unique "amt" column before the keyword FOR with a list in parentheses '(amt_1, amt_2)' and the replacement of each column in the list (for example, "month_a_amt") with a list of the same length ("(month_a_amt_1, month_a_amt_2)" ").
    In the PIVOT clause, it's just a matter of replacing the unique "SUM (amt)" aggregate function with a list of unparenthesized of functions, each with an alias ("the SUM (amt_1) AS amt_1, SUM (amt_2) AS amt_2'. The alias that will be added at the end of the givien for names output column in the IN clause.

    SELECT       id
    ,       TO_CHAR ( ADD_MONTHS ( TO_DATE ( 'Nov 2009'
                                            , 'Mon YYYY'
                              )
                          , month_num
                          )
                , 'Mon YYYY'
                )          AS month
    ,       product_a_amt_1
    ,       product_a_amt_2
    ,       product_b_amt_1
    ,       product_b_amt_2
    ,       product_c_amt_1
    ,       product_c_amt_2
    FROM       test_base_table
    UNPIVOT       ( (amt_1,         amt_2      )     FOR month_num IN (
             (month_a_amt_1, month_a_amt_2)     AS  0,
             (month_b_amt_1, month_b_amt_2)     AS -1,
             (month_c_amt_1, month_c_amt_2)     AS -3,
             (month_d_amt_1, month_d_amt_2)     AS -4              )
           )
    PIVOT       ( SUM (amt_1) AS amt_1
           , SUM (amt_2) AS amt_2 FOR product IN ( 'ProductA' AS product_a
                                                        , 'ProductB' AS product_b
                                       , 'ProductC' AS product_c
                                       )
           )
    ORDER BY  id
    ,            month_num     DESC
    ;
    

    Output:

    .              PRODUCT  PRODUCT  PRODUCT  PRODUCT  PRODUCT  PRODUCT
      ID MONTH    _A_AMT_1 _A_AMT_2 _B_AMT_1 _B_AMT_2 _C_AMT_1 _C_AMT_2
    ---- -------- -------- -------- -------- -------- -------- --------
     123 Nov 2009        3        9        2        9       10        9
     123 Oct 2009        5        9        4        9       11        9
     123 Aug 2009        7        9        6        9       12        9
     123 Jul 2009        9        9        8        9       13        9
     456 Nov 2009        1        9        3        9
     456 Oct 2009        2        9        4        9
     456 Aug 2009        3        9        5        9
     456 Jul 2009        4        9        6        9
    

    It looks like all the new values of amt2 are 9. Don't you think it's the best test? I think that different numbers, as you used for the examples of previous data, reduce the chances of getting good results purely by chance.

    If you want to experiment with queries like this, I suggest you use "SELECT *" (nothing added) in the SELECT clause. Start with just an UNPIVOT operation. Some examples in the documentation to do a TABLE CREATION AS... to save the results of an UNPIVOT operator and use this table as the base for a PIVOT table. I think it's a good idea to reduce confusion.

  • In a hierarchical query, is it possible for a line having more than one immediate ancestor?

    Hello

    Question:

    In a hierarchical query, is it possible for a line having more than one immediate ancestor?


    Answer:



    Isn't it?  Surely this is Yes?


    Thank you

    Jason

    Line may have ancestors as much as you want. It goes the same for successors.

    SY.

  • SSE/sse2 support for windows xp

    I need at each facility sse/sse2 support for windows xp service pack 3 or I need instructions for how to turn on thx.

    Hello
     
    Thank you for visiting the Microsoft answers Forum.

    The question you posted would be better suited in the MSDN Forums. I would recommend posting your query in the MSDN Forums:

    http://social.msdn.Microsoft.com/forums/en-us/searchserverinstallconfigandadminstration/threads

    See also: http://msdn.microsoft.com/en-us/library/windows/desktop/ee418728%28v=vs.85%29.aspx#Windows_SSE_vs_SSE2

  • HP dv4 1551dx does hardware support for virtualization?

    Hello

    HP dv4 1551dx does hardware support for virtualization? If support, how it allows?

    Thank you

    To help you in your query, I found a link from microsoft on the Windows 7 operating system, itself. The link will provide all the necessary information about your query.

    http://www.Microsoft.com/Windows/Virtual-PC/support/configure-BIOS.aspx

    Please post the update of the solution for more help.

  • Query on hierarchical query in interactive report!

    Hello

    In Apex Oracle 5.1, I tried to use an interactive report to view details of employee based on a hierarchy. I used the query to display data below:

    SELECT last_name, employe_id, manager_id, LEVEL

    Employees

    START WITH employee_id = 100

    CONNECT BY PRIOR employee_id = manager_id

    Brothers and SŒURS of ORDER BY last_name;

    The output was as below:

    LAST_NAME EMPLOYEE_ID MANAGER_ID LEVEL

    ------------------------- ----------- ---------- ----------

    King                                100                                                       1

    Cambrault                        148                                 100                 2

    Bates                              172                                 148                 3

    Bloom                             169                                  148                3

    Fox                                 170                                  148                3

    Kumar                             173                                  148                3

    Ozer                                168                                  148               3

    Smith                               171                                  148              3

    De Haan                           102                                   100             2

    Hunold                              103                                   102             3

    Austin                               105                                   103             4

    Ernst                                 104                                   103             4

    Lorentz                              107                                   103             4

    Pataballa                           106                                    103            4

    Errazuriz                           147                                   100              2

    Ande                                 166                                    147             3

    Banda                               167                                     147             3

    ...

    Now, I would like to display data based on the connection of employees.

    For example (based on above request): If an employee named - Cambrault is the login, only employees under him (Bates, Bloom, Fox, Kumar, Smith, Ozer) and its own contact information should appear in the report.

    Please advise.

    Kind regards

    mebu

    Mebu wrote:

    I used a hierarchical query. But based on Login, I want to display only members under him.

    For example: If Cambrault LOGIN, only employees under him (Bates, Bloom, Fox, Kumar, Smith, Ozer) and its own coordinates must display in Oracle Apex.

    SELECT last_name, employe_id, manager_id, LEVEL

    Employees

    START WITH employee_id = 100

    CONNECT BY PRIOR employee_id = manager_id

    Brothers and SŒURS of ORDER BY last_name;

    See what/when/where? How to get the answers from the forum

    Describe the requirements clearly and completely, using the APEX, Oracle and terminology of web standard.

  • hierarchical query of VO in the ofa page

    Hello

    I try to use the hierarchical query in VO for the display of all levels of supervisors for employee and want to display in populist:

    This is the query

    REPLACE SELECT distinct (mgx.full_name, "',' ') supervisor_full_name;

    XPP. Employee_number

    OF per_assignments_x pax,.

    per_people_x ppx,

    per_people_x mgx,

    per_positions pp,

    per_jobs pj,

    per_position_definitions ppd

    WHERE ppx.person_id = pax.person_id

    AND ppx.current_employee_flag = 'Y '.

    AND mgx.person_id = pax.supervisor_id

    AND pp.position_id = pax.position_id

    AND pj.job_id = pax.job_id

    AND ppd.position_definition_id = pp.position_definition_id

    START WITH ppx.employee_number =: 1

    CONNECT BY PRIOR MGX.employee_number = ppx.employee_number AND LEVEL < 6

    I'm trying to get this VO implemented PR when I run the page in jdeveloper with parameter binding, it's getting error.

    oracle.apps.fnd.framework.OAException: oracle.jbo.SQLStmtException: 27122 Houston: SQL error in the preparation of the statement.

    I would like to delete the parameter binding and executing CO VO past these two statements may be:

    START WITH ppx.employee_number =: 1

    CONNECT BY PRIOR MGX.employee_number = ppx.employee_number AND LEVEL < 6

    How can I do?

    Thank you

    MK

    has worked?

  • Help with hierarchical query

    I'm trying to parse each string inside of individual characters. For this, I used the link by the hierarchical query clause. I am not able to use connect by correctly. Here is my example.

    with the CBC as)

    Select 1: the nurse, 'abc' double union all Str

    Select 2: the nurse, '123' Str of all union double

    Select 3: the nurse, "pqr xyz" dual union all Str

    Select option 4: the nurse, 'john doe' double Str

    )

    Select the level, homobasidiomycetes, substr(s.str,level,1) as chr

    s of the CBC

    connect nocycle level < = length (homobasidiomycetes)

    /

    The above query returns 3 028 lines when I want that 21. Adding a distinct to select, it's what I want.

    with the CBC as)

    Select 1: the nurse, 'abc' double union all Str

    Select 2: the nurse, '123' Str of all union double

    Select 3: the nurse, "pqr xyz" dual union all Str

    Select option 4: the nurse, 'john doe' double Str

    )

    Select distinct level, homobasidiomycetes, substr(s.str,level,1) as chr

    s of the CBC

    connect nocycle level < = length (homobasidiomycetes)

    order by str, level

    /

    For a large data set I could end up with several million rows before the separate would lead. So, how can I restrict the connection by clause to go within each line.

    Assuming that the AI is the primary key, you could do this:

    with src as (
      select 1 as rn, 'abc' as str from dual union all
      select 2 as rn, '123' as str from dual union all
      select 3 as rn, 'pqr xyz' as str from dual union all
      select 4 as rn, 'john doe' as str from dual
    )
    select level,
          s.str,
          substr(s.str,level,1) as chr
    from src s
    connect by level <= length(s.str)
              and prior rn = rn
              and prior dbms_random.value is not null;
    

    See DBMS_RANDOM.value in a hierarchical solution for string to table? for an exchange of views around the case.

  • Two criteria in mind: one for af:query, second with bind var, both use same result table

    JDeveloper 12.1.2

    I have two display criteria, VC1 and VC2 are based both on the same VO. For example, let's say that I have used VO

    SELECT Employees.EMPLOYEE, Employees.EMPLOYEE_ID, Employees.FIRST_NAME, Employees.LAST_NAME, Employees.DEPARTMENT_ID

    Employees;

    Let this be VC1:

    SELECT * from (SELECT Employees.EMPLOYEE, Employees.EMPLOYEE_ID, Employees.FIRST_NAME, Employees.LAST_NAME, Employees.DEPARTMENT_ID

    EMPLOYEES employees ) QRSLT WHERE 1 = 2


    Used for af:query


    So let's say I have VC2 with bind variable


    SELECT * from (SELECT Employees.EMPLOYEE, Employees.EMPLOYEE_ID, Employees.FIRST_NAME, Employees.LAST_NAME, Employees.DEPARTMENT_ID

    EMPLOYEES employees ) QRSLT WHERE 1 = 2 AND ((UPPER (QRSLT. Department_id) = UPPER(:DeptIdBind))) )

    The user runs the af:query research and resulting table lists some employees. The last value of the column in the table of results, I did as links:

    < af:column headerText = 'Department' id = "c1" width = "140" >

    < af:link shortDesc = "#{bindings.myVO.hints.DepartmentId.tooltip}" id = "ot4" text = ' #{row. "" DepartmentId}'

    action = "#{backingBeanScope.MyBean.byDept}" partialTriggers =": t1" / >

    < / af:column >

    If the user now clicks on the link, I would expect the following:

    1. the values entered in the af: query to stay

    2. the table refreshes since the underlying VC2 is defined and executed VO. Here is the code VOImpl and backingbean

    The bean of support code

    public String byDept() {}

    Links DCBindingContainer = (DCBindingContainer) BindingContext.getCurrent () .getCurrentBindingsEntry ();

    DCIteratorBinding dcItteratorBindings = bindings.findIteratorBinding("EmployeesIterator");

    Line r = dcItteratorBindings.getCurrentRow ();

    Object keyvar = r.getAttribute ("DepartmentId");

    OperationBinding searchExp = ADFUtils.findOperation ("searchByDept");

    searchExp.getParamsMap () .put ("deptId", keyvar);

    searchExp.execute ();

    Returns a null value.

    }

    Impl VO

    {} public void searchByDepartment (String deptId)

    setDeptIdBind (deptId);

    executeQuery();

    }

    Problem:

    Query (VC2) runs but table does not reflect that. That is to say I don't see the list of employees of the selected Department

    Any idea?

    RPP = partial page request

    PPR refresh a component jsf

    AdfFacesContext.getCurrentInstance () .addPartialTarget (UIComponent);

    Where component is the component that you want to refresh.

    Have you checked that the query executed vc ID?

    Timo

  • How to write a hierarchical query so that only the child nodes are displayed?

    Hi all

    I have a hierarchical query that I use in an area of tree demand APEX and there are nodes that have no children and I am trying to find a way to not display these nodes. Essentially if the user does not have to develop a lot of knots to know that nothing exists at the most detailed level.

    The data are based on the Oracle Fusion FND tables but for example purposes here is enough data to illustrate my question:


    create table APPL_TAXONOMY_HIERARCHY (SOURCE_MODULE_ID varchar2(30), TARGET_MODULE_ID varchar2(30));
    create table APPL_TAXONOMY_TL (module_id varchar2(30), description varchar2(100), user_module_name varchar2(30), language varchar2(5));
    create table APPL_TAXONOMY (MODULE_ID    varchar2(30),    MODULE_NAME    varchar2(30), MODULE_TYPE varchar2(10),    MODULE_KEY varchar2(30));
    create table TABLES (table_name varchar2(30), module_key varchar2(30));
    
    

    insert into APPL_TAXONOMY_TL values ('1', null, 'Oracle Fusion', 'US' );
    insert into APPL_TAXONOMY_TL values ('2', null, 'Financials', 'US' );
    insert into APPL_TAXONOMY_TL values ('3', null, 'Human Resources', 'US' );
    insert into APPL_TAXONOMY_TL values ('20', null, 'Accounts Payable', 'US' );
    insert into APPL_TAXONOMY_TL values ('10', null, 'General Ledger', 'US' );
    
    insert into APPL_TAXONOMY_HIERARCHY values ('1', 'DDDDDDDD');
    insert into APPL_TAXONOMY_HIERARCHY values ('2', '1');
    insert into APPL_TAXONOMY_HIERARCHY values ('3', '1');
    insert into APPL_TAXONOMY_HIERARCHY values ('4', '1');
    insert into APPL_TAXONOMY_HIERARCHY values ('10', '2');
    insert into APPL_TAXONOMY_HIERARCHY values ('20', '2');
    
    insert into APPL_TAXONOMY values ('1', 'Fusion', 'PROD', 'Fusion');
    insert into APPL_TAXONOMY values ('2', 'Financials', 'FAMILY', 'FIN');
    insert into APPL_TAXONOMY values ('10', 'GL', 'APP', 'GL');
    insert into APPL_TAXONOMY values ('3', 'Human Resources', 'FAMILY', 'HR');
    insert into APPL_TAXONOMY values ('20', 'AP', 'APP', 'AP');
    
    insert into tables values ('GL_JE_SOURCES_TL','GL');
    insert into tables values ('GL_JE_CATEGORIES','GL');
    

    My hierarchical query is as follows:

    with MODULES as
    (
    SELECT h.source_module_id, b.user_module_name, h.target_module_id
          FROM APPL_TAXONOMY_HIERARCHY H,
          APPL_TAXONOMY_TL B,
    APPL_TAXONOMY VL
    where H.source_module_id = b.module_id
    and b.module_id = vl.module_id
    and vl.module_type not in ('PAGE', 'LBA')
    UNION ALL
    select distinct table_name, table_name,  regexp_substr(table_name,'[^_]+',1,1) 
    from TABLES --needed as a link between TABLES and APPL_TAXONOMY
    union all
    select module_key as source_module_id, module_name as user_module_name, module_id as target_module_id  from appl_taxonomy VL where VL.module_type = 'APP')
    SELECT  case when connect_by_isleaf = 1 then 0
                when level = 1             then 1
                else                           -1
           end as status,
    LEVEL,
    user_module_name as title,
    null as icon,
    ltrim(user_module_name, ' ') as value,
    null as tooltip,
    null as link
          FROM MODULES
          START WITH source_module_id = '1'
          CONNECT BY PRIOR source_module_id = target_module_id
    ORDER SIBLINGS BY user_module_name;
    

    In Oracle APEX, this gives a tree with the appropriate data, you can see here:

    https://Apex.Oracle.com/pls/Apex/f?p=32581:29 (username: guest, pw: app_1000);

    The SQL of the query results are:

    STATUSTITLE LEVELVALUE

    ---------- ---------- ------------------------------ ------------------------------

    11 oracle FusionOracle Fusion
    -12 financial tablesFinancials
    -13 accounts payableAccounts payable
    04 APAP
    -1General Accounting 3General Accounting
    -14 GLGL
    05 GL_JE_CATEGORIESGL_JE_CATEGORIES
    05 GL_JE_SOURCES_TLGL_JE_SOURCES_TL
    02 human resourcesHuman resources

    The lowest level is the name of the table to level 5. HR is not any level under level 2, in the same way, "AP" (level 4) has nothing below, i.e. no level 5 and that's why I don't want to show these nodes. Is this possible with the above query?

    Thanks in advance for your suggestions!

    John

    Hello

    The following query will include only the nodes of level = 5 and their ancestors (or descendants):

    WITH modules LIKE

    (

    SELECT h.source_module_id

    b.user_module_name AS the title

    h.target_module_id

    To appl_taxonomy_hierarchy:

    appl_taxonomy_tl b

    appl_taxonomy vl

    WHERE h.source_module_id = b.module_id

    AND b.module_id = vl.module_id

    AND vl.module_type NOT IN ('PAGE', "LBA")

    UNION ALL

    SELECT DISTINCT

    table-name

    table_name

    , REGEXP_SUBSTR (table_name, ' [^ _] +')

    From the tables - required as a link between the TABLES and APPL_TAXONOMY

    UNION ALL

    SELECT module_key AS source_module_id

    AS user_module_name module_name

    module_id AS target_module_id

    Of appl_taxonomy vl

    WHERE vl.module_type = 'APP '.

    )

    connect_by_results AS

    (

    SELECT THE CHECK BOX

    WHEN CONNECT_BY_ISLEAF = 1 THEN 0

    WHEN LEVEL = 1 THEN 1

    OF ANOTHER-1

    The END as status

    LEVEL AS lvl

    title

    -, NULL AS icon

    , LTRIM (title, "") AS the value

    -, NULL as ToolTip

    -, Link AS NULL

    source_module_id

    SYS_CONNECT_BY_PATH (source_module_id - or something unique

    , ' ~' - or anything else that may occur in the unique key

    ) || ' ~' AS the path

    ROWNUM AS sort_key

    Modules

    START WITH source_module_id = '1'

    CONNECT BY PRIOR Source_module_id = target_module_id

    Brothers and SŒURS of ORDER BY title

    )

    SELECT the status, lvl, title, value

    -, icon, tooltip, link

    OF connect_by_results m

    WHEN THERE IS)

    SELECT 1

    OF connect_by_results

    WHERE the lvl = 5

    AND the path AS ' % ~' | m.source_module_id

    || '~%'

    )

    ORDER BY sort_key

    ;

    You may notice that subqueries modules and the connect_by_results are essentially what you've posted originally.  What was the main request is now called connect_by_results, and it has a couple of additional columns that are necessary in the new main request or the EXISTS subquery.

    However, I am suspicious of the 'magic number' 5.  Could you have a situation where the sheets you are interested in can be a different levels (for example, some level = 5 and then some, into another branch of the tree, at the LEVEL = 6, or 7 or 4)?  If so, post an example.  You have need of a Query of Yo-Yo, where you do a bottom-up CONNECT BY query to get the universe of interest, and then make a descendant CONNECT BY query on this set of results.

  • Hierarchical data, how to aggregate over levels in hierarchical query?

    Hello

    I hope someone can help me.

    I held in a data table ("" what part was built in what other part of when when? "')
    ID parent_id build_in build_out
    1 NULL NULL NULL
    2/1 2010 2012
    3 2 2011 2013
    4 2 2013 NULL

    What are the parts is stored in a separate table.

    Now I want to know when when which part was built in the first level, in the example, I want to know that
    1 was simply a part of 1
    2 was part of 1 between 2010 and 2012
    3 was part of 1 between 2011 and 2012
    4 has never been a part of 1

    I tried several approaches - if there is a fixed number of levels between the types, I am interested I can do using joins and more/less (similarly as some nvl). Unfortunately this is not always the case (some parts appear on several levels).
    If I'm only interested in the parts that are never deleted, I can get by using a style of connect request and get the current configuration. But I can't seem to understand the time connecting part to the high level in such a query, or even filtering absurd combinations (like "4 in 1" in the example above). I could deal with the data recovered outside the database, but I prefer not.

    Is there a way to obtain the hierarchical data with an aggregate (min, max) for all levels?

    What version of Oracle you are on?

    In 11.2.x, you can use the recursive subquery factoring. Something like

    with t (id, parent_id, build_in, build_out) as (
    select 1, null, null, null from dual union all
    select 2, 1, 2010, 2012 from dual union all
    select 3, 2, 2011, 2013 from dual union all
    select 4, 2, 2013, null from dual
    )
    , c1 (root_id, id, parent_id, build_in, build_out) as (
    select id, id, parent_id, 0, 9999
    from t
    where parent_id is null
    union all
    select root_id, t.id, t.parent_id
    , greatest(nvl(t.build_in,0), nvl(b.build_in,0))
    , least(nvl(t.build_out,9999), nvl(b.build_out,9999))
    from c1 b, t
    where b.id = t.parent_id
    )
    select * from c1
    where build_in < build_out
    ;
    ROOT_ID ID    PARENT_ID  BUILD_IN  BUILD_OUT
    ------- ----- ---------- --------- ----------
    1       1                0         9999
    1       2     1          2010      2012
    1       3     2          2011      2012      
    

    With a hierarchical query by using the syntax connection, you could do something like

    select * from (
    select connect_by_root id as root, id
    , greatest(nvl(build_in,0), nvl(prior build_in,0)) as max_in, least(nvl(build_out,9999), nvl(prior build_out,9999)) as min_out
    from t
    start with parent_id is null
    connect by parent_id = prior id
    )
    where max_in < min_out
    ;
    

    but it is not powerful enough. This version compares the dates between a current and previous levels, but the recursive subquery is to compare the dates in the current level for the winners of the comparisons to the previous level. Not sure if it's an important distinction for your needs, however.

    If you are on 11.2 I advise to use the recursive subquery factoring. If this isn't the case, you can try the link by version.

    Kind regards
    Bob

  • Problems with views based on a hierarchical query

    Datamodeler 3.1.3.706 (SQL Dev 3.2.10.09):

    When you create a view that uses a hierarchical query, the query designer encounter various difficulties:

    When pasting in the SQL code, if the notice is registered without first clicking the schema update button, the object in the entity-relationship diagram view provides a faithful representation of the view without errors, but when the reopening of the view, the code is missing.

    Simple example with the classic emp table:
    SELECT level lev
          , emp.*
       FROM emp
      CONNECT BY prior empno = mgr
      START WITH mgr        IS NULL
    If you press the schema update button to refresh the display. He mangles connect it by the clause and the view gets marked with a warning/error icon in the diagram of the relationships, but the now decomposed code remains available on reopening of the query designer.

    Same code as above after having clicked on the button of update of schema:
     SELECT Level lev
    , emp.*
       FROM emp
      CONNECT BY
    Other issues are met if the query contains a column CONNECT_BY_ % nickname hierarchical:
    SELECT level
          , emp.*
          , connect_by_root emp.ename root_ename
       FROM emp
      CONNECT BY prior empno = mgr
      START WITH mgr        IS NULL;
    In this case, paste in the code and clicking Update schema button or the OK button translates into a "unexpected Token' error analysis.

    These problems are encountered with the logic model and the relational.

    Is this a known issue? I searched this forum but have not found any references to this.

    Thank you

    Sentinel

    Hi, Sentinel,

    I logged a bug for this.
    You can try 3.3 DM treat it better first problem, analysis of connect_by_root operator will pass if you do not alias.

    Philippe

  • Hierarchical query help need to Oracle

    Hello
    I'm in a deep trouble.

    I want to do a hierarchical query in my TreeView table in oracle. But I want that the query retrieves information path between two nodes.

    Review the table below.

    ------------------------------------------------------
    Node ID | Name of the node. ID of the parent
    -----------------------------------------------------
    1A 0
    2 1
    3C0
    4 2
    -----------------------------------------------------

    What I want is that I'll give you 2 node id in the request. One is the source node and the other is the destination node.
    so if I put 1 node and node 4, I want to be the output

    1-> 2-> 4

    I want just a return line. Or there may be several rows but stands only the node of this path.

    1
    2
    4
    ----

    This means that I don't want to node 3 in the search result.


    More if I have the source as 4 node and the node of destination as 1 then I will also get an output of the query as below-
    4-> 2-> 1

    This means that the search for the query for the result in a way directional bi.


    If anyone can give me some information about who it's going to be great for me.

    Published by: user13276471 on December 31, 2012 03:21

    Hello

    Welcome to the forum!

    Assuming you have 2 separate nodes: Node_A and: node_b, you can find the hierarchy from one to the other like this:

    SELECT     SYS_CONNECT_BY_PATH (node_id, ',')     AS lineage
    FROM     table_x
    WHERE     node_id     IN (:node_a, :node_b)
    AND     LEVEL     > 1
    START WITH     node_id          IN (:node_a, :node_b)
    CONNECT BY     parent_id     = PRIOR node_id
    ;
    

    It will work if: the Node_A is an ancestor of the: node_b, or if: node_b is an ancestor of the: Node_A.
    If is the ancestor of the other, then it will produce 0 rows.

  • Can we still use NOT_SUPPORTED and supported for any request method?

    Hi all

    Because the database selection didn't need a transaction (Please correct me if that's wrong), define the level of transaction "NOT supported" or "Supported" for all of these methods that question only something database?

    Maybe these methods will be called in other in a transaction, so "NEVER" cannot be used.

    My question is: is there a reason to get a transaction for methods without any insert/update of database?

    Say there are three beans as below:

    @Stateless
    @TransactionManagement (TransactionManagementType.CONTAINER)
    / public class InsertBean implements {Insert}
    @Override
    @TransactionAttribute (TransactionAttributeType.REQUIRED)
    {} public void createUsers (< user > list of users)
    INSERT INTO user WHERE...
    }
    }

    @Stateless
    @TransactionManagement (TransactionManagementType.CONTAINER)
    / public class QueryBean implements Query {}
    @Override
    @TransactionAttribute (TransactionAttributeType.NOT_SUPPORTED)
    public int getUserNumber() {}
    SELECT COUNT (*) FROM user
    }
    }

    @Stateless
    @TransactionManagement (TransactionManagementType.CONTAINER)
    / public class UpdateBean implements {update
    @Override
    @TransactionAttribute (TransactionAttributeType.REQUIRED)
    {} public void updateUsers (list < user > users)
    UPDATE user SET logindate = xxx WHERE...
    }
    }

    Insert and update requires a transaction and not the query. If there is a method of bean called as:

    InsertBean.createUsers (users);
    int n = QueryBean.getUserNumber ();
    UpdateBean.updateUsers (users);

    In this case, that the level of transactions for getUserNumber() request method must not be 'NEVER', only 'SUPPORTED' or 'NOT_SUPPROTED' is reasonable. But 'NOT_SUPPORTED' is more effective. So can I use level 'NOT_SUPPORTED' for all methods of query?

    If sometimes the query method must be in a transaction could you share?

    Thanks in advance.

    When the query is running for a long time and you who call inside the transaction, the transaction may time out.
    In this case you would go non-supported, so that this transaction manager can take the action when the method
    is called within a transaction. Otherwise it does not really matter.

  • Get the value of the root of a hierarchical query

    I'm writing a hierarchical query for one of my paintings.

    I need to know the value of the root by entering a value of sheet of any level.

    for example: I enter a value which is at level 4. I need to find the value of the root without displaying the other levels.

    Help, please.

    Thank you.

    TRY THIS,

    SELECT     ename, PRIOR  ename MGRNAME
          FROM emp
         WHERE ename = 
    START WITH mgr IS NULL
    CONNECT BY PRIOR empno = mgr
    

    Published by: NSK2KSN on August 9, 2010 18:10

Maybe you are looking for

  • We have one topic: configuration option to disable start private browsing?

    I was able to disable some windows private options that appear in the menus and buttons by locating the controls right in the browser.xul and adding the disabled = "true" attribute to each tag. I was also able to prevent all: privatebrowsing are used

  • iCloud issues after upgrade to El Capitan

    I thank everyone in advance for the contribution to this issue.  I have an old MacBook Pro (13, 2.5 GHz Intel i5, 8 GB 1333 MHz DDR3)) and I recently upgraded from Yosemite to El Capitan (10.11.4).  I went to open my iTunes application and when I did

  • Is someone spying on me?

    Some strange things have developed to the end that suddenly somewhat concerned me that someone keeps track any activity on my macbook air. I see nothing wrong in the file of applications, but I have to admit that I am somewhat a sucker when it comes

  • How to change the contact print size in live mail window

    print only in large part and not in a business card size

  • Not found network hardware

    Hello (to one who may be reading this) I'm only 15 so I'm not so good with computers, but I know things to and extent. Recently, I have a Windows 7 OS from my friend computer and did not know the password, so I downgraded it to WIndows Vista in order