SQL Developer: Importing Unit Test Repository via Data Modeler

Recently I started looking at the unit testing functionality within Oracle's SQL Developer, as a possible alternative to ut/PLSQL. Oracle's Jeff Smith has a useful starter page on this, Unit Testing Your PL/SQL with Oracle SQL Developer. As he notes, the first thing you need to do is set up a unit test repository, which is essentially a schema within an Oracle database that SQL Developer will create for you for the unit test metadata. The schema contains 24 tables, and when I set it up I thought it would be nice to see an entity-relationship diagram for it.

I often draw these myself after running an analysis query on the foreign key network, as described in a recent post, PL/SQL Pipelined Function for Network Analysis. However, in this case I remembered that SQL Developer also has a data modeler component, and I thought it would be a good opportunity to learn how to use this tool to reverse-engineer a diagram from the schema. It's actually very easy, and in this article I will show the result (see another Jeff Smith post for learning resources on the data modeler, Data Modeling). For good measure, I will include outputs from my own metadata queries, and add similar for Oracle's HR demo schema (and linked schemas, in version 12.1).

12 July 2015I added a section on the Oracle v11.2 Apex schema, APEX_040000, which has 425 tables, to see how the data modeler handles larger schemas.

Unit Test Repository Schema

I created the diagram by following the wizard from File/Import/Data Dictionary - see the link above for more information on how to use the Data Modeler.

Data Modeler Diagram

UT_REPOS

Network Analysis Output

Network                      #Links  #Nodes Lev  Node                                                     Link
---------------------------  ------  ------ ---  -------------------------------------------------------  --------------------------------------
UT_LIB_DYN_QUERIES|UT_REPOS      30      20   0  UT_LIB_DYN_QUERIES|UT_REPOS                              ROOT
                                              1  < UT_TEST_IMPL|UT_REPOS                                  ut_test_lib_dyn_queries_fk1|ut_repos
                                              2    < UT_TEST_COVERAGE_STATS|UT_REPOS                      ut_test_cov_stats_ut_t_fk1|ut_repos                                               3      > UT_TEST_IMPL_RESULTS|UT_REPOS                      ut_test_cov_stats_ut_t_fk2|ut_repos
                                              4        < UT_TEST_IMPL_VAL_RESULTS|UT_REPOS                ut_test_impl_val_res_fk3|ut_repos                                               5          > UT_TEST_IMPL|UT_REPOS*                         ut_test_impl_val_res_fk2|ut_repos
                                              5          > UT_VALIDATIONS|UT_REPOS                        ut_test_impl_val_res_fk1|ut_repos
                                              6            > UT_LIB_VALIDATIONS|UT_REPOS                  ut_validations_lib_validn_fk1|ut_repos
                                              6            > UT_TEST_IMPL|UT_REPOS*                       ut_validations_test_impl_fk1|ut_repos
                                              4        > UT_TEST_IMPL|UT_REPOS*                           ut_test_impl_results_ut_t_fk1|ut_repos
                                              4        > UT_TEST_RESULTS|UT_REPOS                         ut_test_impl_results_ut_t_fk2|ut_repos
                                              5          < UT_SUITE_ITEM_RESULTS|UT_REPOS                 ut_suite_item_results_fk2|ut_repos                                               6            > UT_SUITE_RESULTS|UT_REPOS                    ut_suite_item_results_fk1|ut_repos
                                              7              < UT_SUITE_ITEM_RESULTS|UT_REPOS*            ut_suite_item_results_fk3|ut_repos                                               7              > UT_SUITE|UT_REPOS                          ut_suite_results_fk1|ut_repos
                                              8                < UT_STARTUPS|UT_REPOS                     ut_startups_suite_fk1|ut_repos                                               9                  > UT_LIB_STARTUPS|UT_REPOS               ut_startups_lib_validn_fk1|ut_repos
                                              9                  > UT_TEST|UT_REPOS                       ut_startups_test_fk1|ut_repos
                                              0                    < UT_SUITE_ITEMS|UT_REPOS              ut_suite_items_fk2|ut_repos                                               1                      > UT_SUITE|UT_REPOS*                 ut_suite_items_fk1|ut_repos
                                              1                      > UT_SUITE|UT_REPOS*                 ut_suite_items_fk3|ut_repos
                                              0                    < UT_TEARDOWNS|UT_REPOS                ut_teardowns_test_fk1|ut_repos                                               1                      > UT_LIB_TEARDOWNS|UT_REPOS          ut_teardowns_lib_validn_fk1|ut_repos
                                              1                      > UT_SUITE|UT_REPOS*                 ut_teardowns_suite_fk1|ut_repos
                                              0                    < UT_TEST_ARGUMENTS|UT_REPOS           ut_test_arguments_fk|ut_repos
                                              1                      < UT_TEST_IMPL_ARGUMENTS|UT_REPOS    ut_test_impl_arguments_ut_fk1|ut_repos                                               2                        > UT_TEST_IMPL|UT_REPOS*           ut_test_impl_arguments_ut_fk2|ut_repos
                                              1                      < UT_TEST_IMPL_ARG_RESULTS|UT_REPOS  ut_test_impl_arg_results__fk2|ut_repos                                               2                        > UT_TEST_IMPL|UT_REPOS*           ut_test_impl_arg_results__fk1|ut_repos
                                              0                    < UT_TEST_IMPL|UT_REPOS*               ut_test_impl_ut_test_fk1|ut_repos
                                              0                    < UT_TEST_RESULTS|UT_REPOS*            ut_test_results_ut_test_fk1|ut_repos
UT_LOOKUP_CATEGORIES|UT_REPOS      2       3  0  UT_LOOKUP_CATEGORIES|UT_REPOS                            ROOT
                                              1  < UT_LOOKUP_DATATYPES|UT_REPOS                           ut_lookup_datatypes_ut_lo_fk1|ut_repos
                                              2    < UT_LOOKUP_VALUES|UT_REPOS                            ut_lookup_values_ut_looku_fk1|ut_repos

There is one table not shown as it has no links to any other table.

Schema Metadata Analysis Report

SQL> SELECT 'Start: '||dbs.name "Database", ses.sid "Session", ses.osuser "OS User", ses.machine "Machine", To_Char (SYSDATE,'DD-MON-YYYY HH24:MI:SS') "Time",
  2  	Replace (Substr(ver.banner, 1, Instr(ver.banner, '64')-4), 'Enterprise Edition Release ', '') "Version"
  3    FROM v$database dbs, v$version ver, v$session ses
  4   WHERE ver.banner LIKE 'Oracle%'
  5     AND audsid = USERENV('sessionid');

Database              Session OS User    Machine              Time                 Version
-------------------- -------- ---------- -------------------- -------------------- ------------------------------
Start: XE                 137 HP-Brendan WORKGROUP\HP-BRENDAN 11-JUL-2015 13:21:25 Oracle Database 11g Express Ed
                              \Brend_000                                           ition Release 11.2.0.2.0


SQL> 
SQL> PROMPT '&owner' "Schema", '&tab' "Prefix"
'UT_REPOS' "Schema", '%' "Prefix"
SQL> PROMPT Tables Summary (excluding like '&nottab1', '&nottab2', '$' )
Tables Summary (excluding like '?', '?', '$' )
SQL> SELECT atc.table_name, Nvl2 (atc_w.column_name, 'Yes', NULL)		"Who?",
  2          CASE att.n_att WHEN 0 THEN To_Number(NULL) ELSE att.n_att END	"Attrs",
  3          ind_tot.n_ind "Indexes", Count(atc.column_name)			"Cols"
  4    FROM all_tab_columns		atc
  5      JOIN all_tables atb
  6        ON atb.table_name			= atc.table_name
  7       AND atb.owner			= atc.owner                             -- Join index count
  8        LEFT JOIN (SELECT i.table_owner, i.table_name, Count (i.index_name) n_ind
  9  		   FROM all_indexes			i
 10  		  GROUP BY i.table_owner, i.table_name)			ind_tot
 11          ON ind_tot.table_name		= atb.table_name
 12         AND ind_tot.table_owner		= atb.owner				-- Join attribute count
 13        LEFT JOIN (SELECT atc_att.table_name, atc_att.owner, Count(atc_att.column_name) n_att
 14  	           FROM all_tab_columns			atc_att
 15  	          WHERE atc_att.column_name		LIKE '%&notcol%'
 16  	          GROUP BY atc_att.table_name, atc_att.owner)		att
 17          ON att.table_name		= atb.table_name
 18         AND att.owner			= atb.owner
 19    LEFT JOIN all_tab_columns		atc_w					-- Join the Who column if it exists
 20           ON atc_w.table_name		= atb.table_name
 21          AND atc_w.owner			= atb.owner
 22          AND atc_w.column_name		= 'CREATED_BY'				-- Join index with its sequence for table
 23   WHERE atc.table_name			LIKE Upper('&tab'||'%')
 24     AND atc.table_name			NOT LIKE '%$%'
 25     AND atb.table_name			NOT LIKE '%&nottab1%'
 26     AND atb.table_name			NOT LIKE '%&nottab2%'
 27     AND atb.owner			LIKE Upper('&owner')
 28   GROUP BY atc.table_name,  Nvl2 (atc_w.column_name, 'Yes', NULL),
 29  	CASE att.n_att WHEN 0 THEN To_Number(NULL) ELSE att.n_att END,
 30          ind_tot.n_ind
 31   ORDER BY 1;

TABLE_NAME                     Who?  Attrs Indexes Cols
------------------------------ ----- ----- ------- ----
UT_LIB_DYN_QUERIES             Yes               2    8
UT_LIB_STARTUPS                Yes               2    8
UT_LIB_TEARDOWNS               Yes               2    8
UT_LIB_VALIDATIONS             Yes               2    8
UT_LOOKUP_CATEGORIES           Yes               2    6
UT_LOOKUP_DATATYPES            Yes               3    8
UT_LOOKUP_VALUES               Yes               2    7
UT_METADATA                                      1    2
UT_STARTUPS                    Yes               4   10
UT_SUITE                       Yes               1    7
UT_SUITE_ITEMS                 Yes               4   10
UT_SUITE_ITEM_RESULTS          Yes               4    8
UT_SUITE_RESULTS               Yes               2   21
UT_TEARDOWNS                   Yes               4   10
UT_TEST                        Yes               2   12
UT_TEST_ARGUMENTS              Yes               2   30
UT_TEST_COVERAGE_STATS         Yes               3   13
UT_TEST_IMPL                   Yes               4   11
UT_TEST_IMPL_ARGUMENTS         Yes               3    9
UT_TEST_IMPL_ARG_RESULTS       Yes               4   12
UT_TEST_IMPL_RESULTS           Yes               3   29
UT_TEST_IMPL_VAL_RESULTS       Yes               4   15
UT_TEST_RESULTS                Yes               2   13
UT_VALIDATIONS                 Yes               3   10

24 rows selected.

SQL> 
SQL> PROMPT Triggers
Triggers
SQL> COLUMN "Trigger"	FORMAT A30
SQL> COLUMN "Type"		FORMAT A30
SQL> COLUMN "Event"		FORMAT A30
SQL> 
SQL> SELECT	trg.table_name,
  2  	trg.trigger_name		"Trigger",
  3  	trg.trigger_type		"Type",
  4  	trg.triggering_event		"Event"
  5    FROM all_triggers trg
  6   WHERE trg.table_name			LIKE Upper('&tab'||'%')
  7     AND trg.table_name			NOT LIKE '%$%'
  8     AND trg.table_name			NOT LIKE '%&nottab1%'
  9     AND trg.table_name			NOT LIKE '%&nottab2%'
 10     AND trg.owner			LIKE Upper('&owner')
 11   ORDER BY 1, 2;

TABLE_NAME                     Trigger                        Type                           Event
------------------------------ ------------------------------ ------------------------------ ------------------------------
UT_LIB_DYN_QUERIES             UT_LIB_DYN_QUERIES             BEFORE EACH ROW                INSERT
                               UT_LIB_DYN_QUERIES_UP_TRG      BEFORE EACH ROW                UPDATE
UT_LIB_STARTUPS                UT_LIB_STARTUPS                BEFORE EACH ROW                INSERT
                               UT_LIB_STARTUPS_UP_TRG         BEFORE EACH ROW                UPDATE
UT_LIB_TEARDOWNS               UT_LIB_TEARDOWNS               BEFORE EACH ROW                INSERT
                               UT_LIB_TEARDOWNS_UP_TRG        BEFORE EACH ROW                UPDATE
UT_LIB_VALIDATIONS             UT_LIB_VALIDATIONS             BEFORE EACH ROW                INSERT
                               UT_LIB_VALIDATIONS_UP_TRG      BEFORE EACH ROW                UPDATE
UT_LOOKUP_CATEGORIES           UT_LOOKUP_CAT_TRG              BEFORE EACH ROW                INSERT
                               UT_LOOKUP_CAT_UP_TRG           BEFORE EACH ROW                UPDATE
UT_LOOKUP_DATATYPES            UT_LOOKUP_DATATYPES_UP_TRG     BEFORE EACH ROW                UPDATE
                               UT_LOOKUP_DATA_TRG             BEFORE EACH ROW                INSERT
UT_LOOKUP_VALUES               UT_LOOKUP_VALUES_UP_TRG        BEFORE EACH ROW                UPDATE
                               UT_LOOKUP_VALUE_TRG            BEFORE EACH ROW                INSERT
UT_STARTUPS                    UT_STARTUPS_TRG                BEFORE EACH ROW                INSERT
                               UT_STARTUPS_UP_TRG             BEFORE EACH ROW                UPDATE
UT_SUITE                       UT_SUITE_TRG                   BEFORE EACH ROW                INSERT
                               UT_SUITE_UP_TRG                BEFORE EACH ROW                UPDATE
UT_SUITE_ITEMS                 UT_SUITE_ITEMS_TRG             BEFORE EACH ROW                INSERT
                               UT_SUITE_ITEMS_UP_TRG          BEFORE EACH ROW                UPDATE
UT_SUITE_ITEM_RESULTS          UT_SUITE_ITEM_RESULTS_TRG      BEFORE EACH ROW                INSERT
                               UT_SUITE_ITEM_RESULTS_UP_TRG   BEFORE EACH ROW                UPDATE
UT_SUITE_RESULTS               UT_SUITE_RESULTS_TRG           BEFORE EACH ROW                INSERT
                               UT_SUITE_RESULTS_UP_TRG        BEFORE EACH ROW                UPDATE
UT_TEARDOWNS                   UT_TEARDOWNS_TRG               BEFORE EACH ROW                INSERT
                               UT_TEARDOWNS_UP_TRG            BEFORE EACH ROW                UPDATE
UT_TEST                        UT_TEST_TRG                    BEFORE EACH ROW                INSERT
                               UT_TEST_UP_TRG                 BEFORE EACH ROW                UPDATE
UT_TEST_ARGUMENTS              UT_TEST_ARGUMENTS_TRG          BEFORE EACH ROW                INSERT
                               UT_TEST_ARGUMENTS_UP_TRG       BEFORE EACH ROW                UPDATE
UT_TEST_COVERAGE_STATS         UT_TEST_COVERAGE_STATS_TRG     BEFORE EACH ROW                INSERT
                               UT_TEST_COVERAGE_STATS_UP_TRG  BEFORE EACH ROW                UPDATE
UT_TEST_IMPL                   UT_TEST_IMPL_TRG               BEFORE EACH ROW                INSERT
                               UT_TEST_IMPL_UP_TRG            BEFORE EACH ROW                UPDATE
UT_TEST_IMPL_ARGUMENTS         UT_TEST_IMPL_ARGUMENTS_TRG     BEFORE EACH ROW                INSERT
                               UT_TEST_IMPL_ARGUMENTS_UP_TRG  BEFORE EACH ROW                UPDATE
UT_TEST_IMPL_ARG_RESULTS       UT_TEST_IMPL_ARG_RESULTS_TRG   BEFORE EACH ROW                INSERT
                               UT_TEST_IMPL_ARG_RES_UP_TRG    BEFORE EACH ROW                UPDATE
UT_TEST_IMPL_RESULTS           UT_TEST_IMPL_RESULTS_TRG       BEFORE EACH ROW                INSERT
                               UT_TEST_IMPL_RESULTS_UP_TRG    BEFORE EACH ROW                UPDATE
UT_TEST_IMPL_VAL_RESULTS       UT_TEST_IMPL_VAL_RESULTS_TRG   BEFORE EACH ROW                INSERT
                               UT_TEST_IMPL_VAL_RES_UP_TRG    BEFORE EACH ROW                UPDATE
UT_TEST_RESULTS                UT_TEST_RESULTS_TRG            BEFORE EACH ROW                INSERT
                               UT_TEST_RESULTS_UP_TRG         BEFORE EACH ROW                UPDATE
UT_VALIDATIONS                 UT_VALIDATIONS_TRG             BEFORE EACH ROW                INSERT
                               UT_VALIDATIONS_UP_TRG          BEFORE EACH ROW                UPDATE

46 rows selected.

SQL> 
SQL> PROMPT Foreign Keys
Foreign Keys
SQL> COLUMN "From Table"	FORMAT A30
SQL> COLUMN "To Table"	FORMAT A30
SQL> COLUMN "Constraint"	FORMAT A30
SQL> COLUMN "Column"		FORMAT A30
SQL> COLUMN "Seq"		FORMAT 990
SQL> 
SQL> BREAK ON "From Table" ON "To Table" ON "Constraint"
SQL> 
SQL> SELECT	con_f.table_name		"From Table",
  2  	con_t.table_name		"To Table",
  3  	con_f.constraint_name		"Constraint",
  4  	col_f.position			"Seq",
  5  	col_f.column_name		"Column"
  6    FROM	all_constraints			con_f
  7    JOIN	all_constraints			con_t
  8      ON con_t.constraint_name		= con_f.r_constraint_name
  9     AND con_t.owner			= con_f.r_owner
 10    JOIN	all_cons_columns		col_f
 11      ON con_f.constraint_type		= 'R'
 12     AND col_f.constraint_name		= con_f.constraint_name
 13     AND col_f.owner			= con_f.owner
 14   WHERE
 15      (
 16        (con_f.table_name				LIKE Upper('&tab'||'%')
 17     AND con_f.table_name				NOT LIKE '%$%'
 18     AND con_f.table_name				NOT LIKE '%&nottab1%'
 19     AND con_f.table_name				NOT LIKE '%&nottab2%'
 20     AND con_f.owner				LIKE Upper('&owner')
 21         ) OR
 22        (con_t.table_name				LIKE Upper('&tab'||'%')
 23     AND con_t.table_name				NOT LIKE '%$%'
 24     AND con_t.table_name				NOT LIKE '%&nottab1%'
 25     AND con_t.table_name				NOT LIKE '%&nottab2%'
 26     AND con_t.owner				LIKE Upper('&owner')
 27        ))
 28   ORDER BY 1, 2, 3, 4;

From Table                     To Table                       Constraint                      Seq Column
------------------------------ ------------------------------ ------------------------------ ---- ------------------------------
UT_LOOKUP_DATATYPES            UT_LOOKUP_CATEGORIES           UT_LOOKUP_DATATYPES_UT_LO_FK1     1 CAT_ID
UT_LOOKUP_VALUES               UT_LOOKUP_DATATYPES            UT_LOOKUP_VALUES_UT_LOOKU_FK1     1 DATA_ID
UT_STARTUPS                    UT_LIB_STARTUPS                UT_STARTUPS_LIB_VALIDN_FK1        1 LIB_STARTUP_ID
                               UT_SUITE                       UT_STARTUPS_SUITE_FK1             1 UT_SID
                               UT_TEST                        UT_STARTUPS_TEST_FK1              1 UT_ID
UT_SUITE_ITEMS                 UT_SUITE                       UT_SUITE_ITEMS_FK1                1 UT_SID
                                                              UT_SUITE_ITEMS_FK3                1 UT_NSID
                               UT_TEST                        UT_SUITE_ITEMS_FK2                1 UT_ID
UT_SUITE_ITEM_RESULTS          UT_SUITE_RESULTS               UT_SUITE_ITEM_RESULTS_FK1         1 UTSR_ID
                                                              UT_SUITE_ITEM_RESULTS_FK3         1 UTR_NSID
                               UT_TEST_RESULTS                UT_SUITE_ITEM_RESULTS_FK2         1 UTR_ID
UT_SUITE_RESULTS               UT_SUITE                       UT_SUITE_RESULTS_FK1              1 UT_SID
UT_TEARDOWNS                   UT_LIB_TEARDOWNS               UT_TEARDOWNS_LIB_VALIDN_FK1       1 LIB_TEARDOWN_ID
                               UT_SUITE                       UT_TEARDOWNS_SUITE_FK1            1 UT_SID
                               UT_TEST                        UT_TEARDOWNS_TEST_FK1             1 UT_ID
UT_TEST_ARGUMENTS              UT_TEST                        UT_TEST_ARGUMENTS_FK              1 UT_ID
UT_TEST_COVERAGE_STATS         UT_TEST_IMPL                   UT_TEST_COV_STATS_UT_T_FK1        1 UTI_ID
                               UT_TEST_IMPL_RESULTS           UT_TEST_COV_STATS_UT_T_FK2        1 UTIR_ID
UT_TEST_IMPL                   UT_LIB_DYN_QUERIES             UT_TEST_LIB_DYN_QUERIES_FK1       1 LIB_DYN_QUERY_ID
                               UT_TEST                        UT_TEST_IMPL_UT_TEST_FK1          1 UT_ID
UT_TEST_IMPL_ARGUMENTS         UT_TEST_ARGUMENTS              UT_TEST_IMPL_ARGUMENTS_UT_FK1     1 ARG_ID
                               UT_TEST_IMPL                   UT_TEST_IMPL_ARGUMENTS_UT_FK2     1 UTI_ID
UT_TEST_IMPL_ARG_RESULTS       UT_TEST_ARGUMENTS              UT_TEST_IMPL_ARG_RESULTS__FK2     1 ARG_ID
                               UT_TEST_IMPL                   UT_TEST_IMPL_ARG_RESULTS__FK1     1 UTI_ID
UT_TEST_IMPL_RESULTS           UT_TEST_IMPL                   UT_TEST_IMPL_RESULTS_UT_T_FK1     1 UTI_ID
                               UT_TEST_RESULTS                UT_TEST_IMPL_RESULTS_UT_T_FK2     1 UTR_ID
UT_TEST_IMPL_VAL_RESULTS       UT_TEST_IMPL                   UT_TEST_IMPL_VAL_RES_FK2          1 UTI_ID
                               UT_TEST_IMPL_RESULTS           UT_TEST_IMPL_VAL_RES_FK3          1 UTIR_ID
                               UT_VALIDATIONS                 UT_TEST_IMPL_VAL_RES_FK1          1 VAL_ID
UT_TEST_RESULTS                UT_TEST                        UT_TEST_RESULTS_UT_TEST_FK1       1 UT_ID
UT_VALIDATIONS                 UT_LIB_VALIDATIONS             UT_VALIDATIONS_LIB_VALIDN_FK1     1 LIB_VALIDATION_ID
                               UT_TEST_IMPL                   UT_VALIDATIONS_TEST_IMPL_FK1      1 UTI_ID

32 rows selected.

SQL> 
SQL> BREAK ON table_name ON "Who?" ON "Attrs" ON "Indexes"
SQL> PROMPT Tables and Columns (omitting Who and %&notcol%)
Tables and Columns (omitting Who and %?%)
SQL> SELECT atc.table_name, Nvl2 (atc_w.column_name, 'Yes', NULL)			"Who?",
  2          CASE att.n_att WHEN 0 THEN To_Number(NULL) ELSE att.n_att END		"Attrs",
  3          ind_tot.n_ind								"Indexes",
  4          Lower (atc.column_name)|| CASE atc.nullable WHEN 'N' THEN '*' END	column_name,
  5  	atc.data_type,
  6  	atc.data_length								"Length",
  7                  Max(CASE ind.rn WHEN 1 THEN To_Char(aic.column_position) ELSE ' ' END) ||
  8                  Max(CASE ind.rn WHEN 2 THEN To_Char(aic.column_position) ELSE ' ' END) ||
  9                  Max(CASE ind.rn WHEN 3 THEN To_Char(aic.column_position) ELSE ' ' END) ||
 10                  Max(CASE ind.rn WHEN 4 THEN To_Char(aic.column_position) ELSE ' ' END) ||
 11                  Max(CASE ind.rn WHEN 5 THEN To_Char(aic.column_position) ELSE ' ' END) ||
 12                  Max(CASE ind.rn WHEN 6 THEN To_Char(aic.column_position) ELSE ' ' END) ||
 13                  Max(CASE ind.rn WHEN 7 THEN To_Char(aic.column_position) ELSE ' ' END) ||
 14                  Max(CASE ind.rn WHEN 8 THEN To_Char(aic.column_position) ELSE ' ' END) ||
 15                  Max(CASE ind.rn WHEN 9 THEN To_Char(aic.column_position) ELSE ' ' END)	"Index Pos"
 16    FROM all_tab_columns			atc
 17      JOIN all_tables			atb
 18        ON atb.table_name			= atc.table_name
 19       AND atb.owner			= atc.owner                             -- Join index count
 20      LEFT JOIN (SELECT i.table_owner, i.table_name, Count (i.index_name) n_ind
 21    	         FROM all_indexes				i
 22  	        GROUP BY i.table_owner, i.table_name)		ind_tot
 23           ON ind_tot.table_name		= atb.table_name
 24          AND ind_tot.table_owner		= atb.owner				-- Join attribute count
 25    LEFT JOIN (SELECT atc_att.table_name, atc_att.owner, Count(atc_att.column_name) n_att
 26  	       FROM all_tab_columns				atc_att
 27  	      WHERE atc_att.column_name LIKE '%&notcol%'
 28  	      GROUP BY atc_att.table_name, atc_att.owner)	att
 29           ON att.table_name		= atb.table_name
 30          AND att.owner			= atb.owner
 31    LEFT JOIN all_tab_columns atc_w						-- Join the Who column if it exists
 32           ON atc_w.table_name		= atb.table_name
 33          AND atc_w.owner			= atb.owner
 34          AND atc_w.column_name		= 'CREATED_BY'				-- Join index with its sequence for table
 35    LEFT JOIN (SELECT Row_Number () OVER (PARTITION BY i.table_name, i.table_owner
 36  					ORDER BY i.table_name, i.table_owner, i.index_name) rn,
 37  		    i.table_name, i.table_owner, i.owner, i.index_name
 38  	       FROM all_indexes i)				ind
 39      ON ind.table_name			= atb.table_name
 40     AND ind.table_owner			= atb.owner
 41          LEFT JOIN all_ind_columns	aic					-- Join columns for the index
 42            ON aic.index_owner		= ind.owner
 43           AND aic.index_name		= ind.index_name
 44           AND aic.column_name		= atc.column_name
 45   WHERE atc.column_name			NOT LIKE '%&notcol%'
 46     AND atc.table_name			LIKE Upper('&tab'||'%')
 47     AND atc.table_name			NOT LIKE '%$%'
 48     AND atb.table_name			NOT LIKE '%&nottab1%'
 49     AND atb.table_name			NOT LIKE '%&nottab2%'
 50     AND atb.owner			LIKE Upper('&owner')
 51     AND atc.column_name			NOT IN ('CREATED_BY', 'CREATION_DATE', 'LAST_UPDATED_BY', 'LAST_UPDATE_DATE')
 52   GROUP BY atc.table_name, Nvl2 (atc_w.column_name, 'Yes', NULL), Lower (atc.column_name)||CASE atc.nullable WHEN 'N' THEN '*' END,
 53          CASE att.n_att WHEN 0 THEN To_Number(NULL) ELSE att.n_att END,
 54          ind_tot.n_ind, atc.data_type, atc.data_length
 55   ORDER BY 1, 2;

TABLE_NAME                     Who?  Attrs Indexes COLUMN_NAME                    DATA_TYPE     Length Index Pos
------------------------------ ----- ----- ------- ------------------------------ ------------- ------ ----------
UT_LIB_DYN_QUERIES             Yes               2 created_on*                    TIMESTAMP(6)      11
                                                   lib_dyn_query*                 CLOB            4000
                                                   lib_dyn_query_class*           VARCHAR2         120
                                                   lib_dyn_query_id*              VARCHAR2          40  1
                                                   lib_dyn_query_name*            VARCHAR2         120 1
                                                   updated_by*                    VARCHAR2         120
                                                   updated_on*                    TIMESTAMP(6)      11
UT_LIB_STARTUPS                Yes               2 created_on*                    TIMESTAMP(6)      11
                                                   lib_startup*                   CLOB            4000
                                                   lib_startup_class*             VARCHAR2         120
                                                   lib_startup_id*                VARCHAR2          40  1
                                                   lib_startup_name*              VARCHAR2         120 1
                                                   updated_by*                    VARCHAR2         120
                                                   updated_on*                    TIMESTAMP(6)      11
UT_LIB_TEARDOWNS               Yes               2 created_on*                    TIMESTAMP(6)      11
                                                   lib_teardown*                  CLOB            4000
                                                   lib_teardown_class*            VARCHAR2         120
                                                   lib_teardown_id*               VARCHAR2          40  1
                                                   lib_teardown_name*             VARCHAR2         120 1
                                                   updated_by*                    VARCHAR2         120
                                                   updated_on*                    TIMESTAMP(6)      11
UT_LIB_VALIDATIONS             Yes               2 created_on*                    TIMESTAMP(6)      11
                                                   lib_validation*                CLOB            4000
                                                   lib_validation_class*          VARCHAR2         120
                                                   lib_validation_id*             VARCHAR2          40  1
                                                   lib_validation_name*           VARCHAR2         120 1
                                                   updated_by*                    VARCHAR2         120
                                                   updated_on*                    TIMESTAMP(6)      11
UT_LOOKUP_CATEGORIES           Yes               2 created_on*                    TIMESTAMP(6)      11
                                                   id*                            VARCHAR2          40 1
                                                   name                           VARCHAR2         120  1
                                                   updated_by*                    VARCHAR2         120
                                                   updated_on*                    TIMESTAMP(6)      11
UT_LOOKUP_DATATYPES            Yes               3 cat_id                         VARCHAR2          40  11
                                                   created_on*                    TIMESTAMP(6)      11
                                                   id*                            VARCHAR2          40 1
                                                   type_id                        NUMBER            22
                                                   type_string                    VARCHAR2         120  2
                                                   updated_by*                    VARCHAR2         120
                                                   updated_on*                    TIMESTAMP(6)      11
UT_LOOKUP_VALUES               Yes               2 created_on*                    TIMESTAMP(6)      11
                                                   data_id                        VARCHAR2          40  1
                                                   id*                            VARCHAR2          40 1
                                                   updated_by*                    VARCHAR2         120
                                                   updated_on*                    TIMESTAMP(6)      11
                                                   value                          CLOB            4000
UT_METADATA                                      1 name*                          VARCHAR2         120 1
                                                   value*                         VARCHAR2        2000
UT_STARTUPS                    Yes               4 created_on*                    TIMESTAMP(6)      11
                                                   index_no*                      NUMBER            22
                                                   lib_startup_id                 VARCHAR2          40 1
                                                   startup                        CLOB            4000
                                                   startup_id*                    VARCHAR2          40  1
                                                   updated_by*                    VARCHAR2         120
                                                   updated_on*                    TIMESTAMP(6)      11
                                                   ut_id                          VARCHAR2          40    1
                                                   ut_sid                         VARCHAR2          40   1
UT_SUITE                       Yes               1 coverage                       NUMBER            22
                                                   created_on*                    TIMESTAMP(6)      11
                                                   name*                          VARCHAR2         120
                                                   updated_by*                    VARCHAR2         120
                                                   updated_on*                    TIMESTAMP(6)      11
                                                   ut_sid*                        VARCHAR2          40 1
UT_SUITE_ITEMS                 Yes               4 created_on*                    TIMESTAMP(6)      11
                                                   run_start*                     VARCHAR2           1
                                                   run_tear*                      VARCHAR2           1
                                                   sequence*                      NUMBER            22
                                                   updated_by*                    VARCHAR2         120
                                                   updated_on*                    TIMESTAMP(6)      11
                                                   ut_id                          VARCHAR2          40   12
                                                   ut_nsid                        VARCHAR2          40  1 3
                                                   ut_sid*                        VARCHAR2          40 1  1
UT_SUITE_ITEM_RESULTS          Yes               4 created_on*                    TIMESTAMP(6)      11
                                                   sequence*                      NUMBER            22
                                                   updated_by*                    VARCHAR2         120
                                                   updated_on*                    TIMESTAMP(6)      11
                                                   utr_id                         VARCHAR2          40  1 2
                                                   utr_nsid                       VARCHAR2          40   13
                                                   utsr_id*                       VARCHAR2          40 1  1
UT_SUITE_RESULTS               Yes               2 coverage*                      NUMBER            22
                                                   created_on*                    TIMESTAMP(6)      11
                                                   message                        VARCHAR2        2000
                                                   name*                          VARCHAR2         120
                                                   run_date*                      TIMESTAMP(6)      11
                                                   startup_duration               NUMBER            22
                                                   startup_end_time               VARCHAR2          20
                                                   startup_message                VARCHAR2        2000
                                                   startup_start_time             VARCHAR2          20
                                                   startup_status                 VARCHAR2          20
                                                   status*                        VARCHAR2          20
                                                   teardown_duration              NUMBER            22
                                                   teardown_end_time              VARCHAR2          20
                                                   teardown_message               VARCHAR2        2000
                                                   teardown_start_time            VARCHAR2          20
                                                   teardown_status                VARCHAR2          20
                                                   updated_by*                    VARCHAR2         120
                                                   updated_on*                    TIMESTAMP(6)      11
                                                   ut_sid*                        VARCHAR2          40 1
                                                   utsr_id*                       VARCHAR2          40  1
UT_TEARDOWNS                   Yes               4 created_on*                    TIMESTAMP(6)      11
                                                   index_no*                      NUMBER            22
                                                   lib_teardown_id                VARCHAR2          40 1
                                                   teardown                       CLOB            4000
                                                   teardown_id*                   VARCHAR2          40  1
                                                   updated_by*                    VARCHAR2         120
                                                   updated_on*                    TIMESTAMP(6)      11
                                                   ut_id                          VARCHAR2          40    1
                                                   ut_sid                         VARCHAR2          40   1
UT_TEST                        Yes               2 connection_name                VARCHAR2         120
                                                   coverage                       NUMBER            22
                                                   created_on*                    TIMESTAMP(6)      11
                                                   name*                          VARCHAR2         120  1
                                                   object_call                    VARCHAR2         120
                                                   object_name*                   VARCHAR2         120
                                                   object_owner*                  VARCHAR2         120
                                                   object_type*                   VARCHAR2         120
                                                   updated_by*                    VARCHAR2         120
                                                   updated_on*                    TIMESTAMP(6)      11
                                                   ut_id*                         VARCHAR2          40 1
UT_TEST_ARGUMENTS              Yes               2 arg_id*                        VARCHAR2          40  1
                                                   argument_name                  VARCHAR2          30
                                                   char_length                    NUMBER            22
                                                   char_used                      VARCHAR2           1
                                                   character_set_name             VARCHAR2          44
                                                   created_on*                    TIMESTAMP(6)      11
                                                   data_length                    NUMBER            22
                                                   data_level*                    NUMBER            22
                                                   data_precision                 NUMBER            22
                                                   data_scale                     NUMBER            22
                                                   data_type                      VARCHAR2          30
                                                   default_length                 NUMBER            22
                                                   in_out                         VARCHAR2           9
                                                   object_id*                     NUMBER            22
                                                   object_name                    VARCHAR2          30
                                                   overload                       VARCHAR2          40
                                                   owner*                         VARCHAR2          30
                                                   package_name                   VARCHAR2          30
                                                   pls_type                       VARCHAR2          30
                                                   position*                      NUMBER            22
                                                   radix                          NUMBER            22
                                                   sequence*                      NUMBER            22
                                                   type_link                      VARCHAR2         128
                                                   type_name                      VARCHAR2          30
                                                   type_owner                     VARCHAR2          30
                                                   type_subname                   VARCHAR2          30
                                                   updated_by*                    VARCHAR2         120
                                                   updated_on*                    TIMESTAMP(6)      11
                                                   ut_id                          VARCHAR2          40 1
UT_TEST_COVERAGE_STATS         Yes               3 created_on*                    TIMESTAMP(6)      11
                                                   line                           NUMBER            22
                                                   text                           VARCHAR2        4000
                                                   total_occur                    NUMBER            22
                                                   total_time                     NUMBER            22
                                                   unit_name                      VARCHAR2          30
                                                   unit_owner                     VARCHAR2          30
                                                   updated_by*                    VARCHAR2         120
                                                   updated_on*                    TIMESTAMP(6)      11
                                                   utc_id*                        VARCHAR2          40 1
                                                   uti_id                         VARCHAR2          40  1
                                                   utir_id                        VARCHAR2          40   1
UT_TEST_IMPL                   Yes               4 created_on*                    TIMESTAMP(6)      11
                                                   dynamic_value_query            CLOB            4000
                                                   expected_return                VARCHAR2          20
                                                   expected_return_error          VARCHAR2         200
                                                   lib_dyn_query_id               VARCHAR2          40    1
                                                   name*                          VARCHAR2         120  2
                                                   updated_by*                    VARCHAR2         120
                                                   updated_on*                    TIMESTAMP(6)      11
                                                   ut_id*                         VARCHAR2          40  11
                                                   uti_id*                        VARCHAR2          40 1
UT_TEST_IMPL_ARGUMENTS         Yes               3 arg_id*                        VARCHAR2          40 21
                                                   created_on*                    TIMESTAMP(6)      11
                                                   input_value                    CLOB            4000
                                                   output_value                   CLOB            4000
                                                   test_outval*                   NUMBER            22
                                                   updated_by*                    VARCHAR2         120
                                                   updated_on*                    TIMESTAMP(6)      11
                                                   uti_id*                        VARCHAR2          40 1 1
UT_TEST_IMPL_ARG_RESULTS       Yes               4 arg_id*                        VARCHAR2          40  1
                                                   created_on*                    TIMESTAMP(6)      11
                                                   message                        VARCHAR2        2000
                                                   name                           VARCHAR2         120
                                                   run_date*                      TIMESTAMP(6)      11
                                                   status*                        VARCHAR2          20
                                                   updated_by*                    VARCHAR2         120
                                                   updated_on*                    TIMESTAMP(6)      11
                                                   uti_id*                        VARCHAR2          40 1
                                                   utiar_id*                      VARCHAR2          40    1
                                                   utir_id                        VARCHAR2          40   1
UT_TEST_IMPL_RESULTS           Yes               3 created_on*                    TIMESTAMP(6)      11
                                                   duration                       NUMBER            22
                                                   end_time                       VARCHAR2          20
                                                   message                        VARCHAR2        2000
                                                   name*                          VARCHAR2         120
                                                   op_call_duration               NUMBER            22
                                                   op_call_end_time               VARCHAR2          20
                                                   op_call_message                VARCHAR2        2000
                                                   op_call_start_time             VARCHAR2          20
                                                   op_call_status                 VARCHAR2          20
                                                   run_date*                      TIMESTAMP(6)      11
                                                   start_time                     VARCHAR2          20
                                                   startup_duration               NUMBER            22
                                                   startup_end_time               VARCHAR2          20
                                                   startup_message                VARCHAR2        2000
                                                   startup_start_time             VARCHAR2          20
                                                   startup_status                 VARCHAR2          20
                                                   status*                        VARCHAR2          20
                                                   teardown_duration              NUMBER            22
                                                   teardown_end_time              VARCHAR2          20
                                                   teardown_message               VARCHAR2        2000
                                                   teardown_start_time            VARCHAR2          20
                                                   teardown_status                VARCHAR2          20
                                                   updated_by*                    VARCHAR2         120
                                                   updated_on*                    TIMESTAMP(6)      11
                                                   uti_id*                        VARCHAR2          40  1
                                                   utir_id*                       VARCHAR2          40 1
                                                   utr_id*                        VARCHAR2          40   1
UT_TEST_IMPL_VAL_RESULTS       Yes               4 created_on*                    TIMESTAMP(6)      11
                                                   message                        VARCHAR2        2000
                                                   run_date                       TIMESTAMP(6)      11
                                                   status*                        VARCHAR2          20
                                                   updated_by*                    VARCHAR2         120
                                                   updated_on*                    TIMESTAMP(6)      11
                                                   uti_id*                        VARCHAR2          40  1
                                                   utir_id                        VARCHAR2          40   1
                                                   utivr_id*                      VARCHAR2          40    1
                                                   val_duration                   NUMBER            22
                                                   val_end_time                   VARCHAR2          20
                                                   val_id*                        VARCHAR2          40 1
                                                   val_start_time                 VARCHAR2          20
                                                   val_type*                      VARCHAR2          40
UT_TEST_RESULTS                Yes               2 connection_name                VARCHAR2         120
                                                   coverage*                      NUMBER            22
                                                   created_on*                    TIMESTAMP(6)      11
                                                   message                        VARCHAR2        2000
                                                   name*                          VARCHAR2         120
                                                   run_date*                      TIMESTAMP(6)      11
                                                   status*                        VARCHAR2          20
                                                   test_user_name                 VARCHAR2         120
                                                   updated_by*                    VARCHAR2         120
                                                   updated_on*                    TIMESTAMP(6)      11
                                                   ut_id*                         VARCHAR2          40  1
                                                   utr_id*                        VARCHAR2          40 1
UT_VALIDATIONS                 Yes               3 apply_validation*              NUMBER            22
                                                   created_on*                    TIMESTAMP(6)      11
                                                   index_no*                      NUMBER            22
                                                   lib_validation_id              VARCHAR2          40 1
                                                   updated_by*                    VARCHAR2         120
                                                   updated_on*                    TIMESTAMP(6)      11
                                                   uti_id*                        VARCHAR2          40   1
                                                   validation                     CLOB            4000
                                                   validation_id*                 VARCHAR2          40  1

252 rows selected.

SQL> 
SQL> BREAK ON table_name ON index_name
SQL> PROMPT Indexes
Indexes
SQL> SELECT	atb.table_name, ind.index_name||CASE ind.uniqueness WHEN 'UNIQUE' THEN '*' END index_name,
  2  	aic.column_position "Seq", Lower(aic.column_name) column_name
  3    FROM all_tables			atb
  4    LEFT JOIN all_indexes			ind
  5           ON ind.table_name		= atb.table_name
  6          AND ind.table_owner		= atb.owner
  7         LEFT JOIN all_ind_columns	aic
  8                ON aic.index_name		= ind.index_name
  9               AND aic.index_owner	= ind.owner
 10   WHERE atb.table_name			LIKE Upper('&tab'||'%')
 11     AND atb.table_name			NOT LIKE '%$%'
 12     AND atb.table_name			NOT LIKE '%&nottab1%'
 13     AND atb.table_name			NOT LIKE '%&nottab2%'
 14     AND atb.owner			LIKE Upper('&owner')
 15   ORDER BY 1, 2, 3;

TABLE_NAME                     INDEX_NAME                       Seq COLUMN_NAME
------------------------------ ------------------------------- ---- ------------------------------
UT_LIB_DYN_QUERIES             UT_LIB_DYN_QUERIES_NAME*           1 lib_dyn_query_name
                               UT_LIB_DYN_QUERIES_PK*             1 lib_dyn_query_id
UT_LIB_STARTUPS                UT_LIB_STARTUPS_NAME*              1 lib_startup_name
                               UT_LIB_STARTUPS_PK*                1 lib_startup_id
UT_LIB_TEARDOWNS               UT_LIB_TEARDOWNS_NAME*             1 lib_teardown_name
                               UT_LIB_TEARDOWNS_PK*               1 lib_teardown_id
UT_LIB_VALIDATIONS             UT_LIB_VALIDATIONS_NAME*           1 lib_validation_name
                               UT_LIB_VALIDATIONS_PK*             1 lib_validation_id
UT_LOOKUP_CATEGORIES           UT_LOOKUP_CATEGORIES_PK*           1 id
                               UT_LOOKUP_CATEGORIES_UK1*          1 name
UT_LOOKUP_DATATYPES            UT_LOOKUP_DATATYPES_PK*            1 id
                               UT_LOOKUP_DATATYPES_UK1*           1 cat_id
                                                                  2 type_string
                               UT_LOOKUP_DTS_CAT_ID_IX            1 cat_id
UT_LOOKUP_VALUES               UT_LOOKUP_VALUES_PK*               1 id
                               UT_LOOKUP_VALUES_UT_LOOKU_IX       1 data_id
UT_METADATA                    UT_METADATA_PK*                    1 name
UT_STARTUPS                    UT_STARTUPS_LIB_VALIDN_IX          1 lib_startup_id
                               UT_STARTUPS_PK*                    1 startup_id
                               UT_STARTUPS_SUITE_IX               1 ut_sid
                               UT_STARTUPS_TEST_IX                1 ut_id
UT_SUITE                       UT_SUITE_PK*                       1 ut_sid
UT_SUITE_ITEMS                 UT_SUITE_ITEMS_IX1                 1 ut_sid
                               UT_SUITE_ITEMS_IX2                 1 ut_nsid
                               UT_SUITE_ITEMS_IX3                 1 ut_id
                               UT_SUITE_ITEMS_UK*                 1 ut_sid
                                                                  2 ut_id
                                                                  3 ut_nsid
UT_SUITE_ITEM_RESULTS          UT_SUITE_ITEM_RESULTS_FK1          1 utsr_id
                               UT_SUITE_ITEM_RESULTS_FK2          1 utr_id
                               UT_SUITE_ITEM_RESULTS_FK3          1 utr_nsid
                               UT_SUITE_ITEM_RESULTS_UK*          1 utsr_id
                                                                  2 utr_id
                                                                  3 utr_nsid
UT_SUITE_RESULTS               UT_SUITE_RESULTS_IX                1 ut_sid
                               UT_SUITE_RESULTS_PK*               1 utsr_id
UT_TEARDOWNS                   UT_TEARDOWNS_LIB_VALIDN_IX         1 lib_teardown_id
                               UT_TEARDOWNS_PK*                   1 teardown_id
                               UT_TEARDOWNS_SUITE_IX              1 ut_sid
                               UT_TEARDOWNS_TEST_IX               1 ut_id
UT_TEST                        UT_TEST_PK*                        1 ut_id
                               UT_TEST_UK1*                       1 name
UT_TEST_ARGUMENTS              UT_TEST_ARGUMENTS_IX               1 ut_id
                               UT_TEST_ARGUMENTS_PK*              1 arg_id
UT_TEST_COVERAGE_STATS         UT_TEST_COVERAGE_STATS_PK*         1 utc_id
                               UT_TEST_COV_STATS_UT_T_IX1         1 uti_id
                               UT_TEST_COV_STATS_UT_T_IX2         1 utir_id
UT_TEST_IMPL                   UT_TEST_IMPL_PK*                   1 uti_id
                               UT_TEST_IMPL_UK1*                  1 ut_id
                                                                  2 name
                               UT_TEST_IMPL_UT_TEST_IX            1 ut_id
                               UT_TEST_LIB_DYN_QUERIES_IX         1 lib_dyn_query_id
UT_TEST_IMPL_ARGUMENTS         UT_TEST_IMPL_ARGUMENTS_PK*         1 uti_id
                                                                  2 arg_id
                               UT_TEST_IMPL_ARGUMENTS_UT_IX1      1 arg_id
                               UT_TEST_IMPL_ARGUMENTS_UT_IX2      1 uti_id
UT_TEST_IMPL_ARG_RESULTS       UT_TEST_IMPL_ARG_RESULTS_IX1       1 uti_id
                               UT_TEST_IMPL_ARG_RESULTS_IX2       1 arg_id
                               UT_TEST_IMPL_ARG_RESULTS_IX3       1 utir_id
                               UT_TEST_IMPL_ARG_RESULTS_PK*       1 utiar_id
UT_TEST_IMPL_RESULTS           UT_TEST_IMPL_RESULTS_PK*           1 utir_id
                               UT_TEST_IMPL_RESULTS_UT_T_IX1      1 uti_id
                               UT_TEST_IMPL_RESULTS_UT_T_IX2      1 utr_id
UT_TEST_IMPL_VAL_RESULTS       UT_TEST_IMPL_VAL_RES_IX1           1 val_id
                               UT_TEST_IMPL_VAL_RES_IX2           1 uti_id
                               UT_TEST_IMPL_VAL_RES_IX3           1 utir_id
                               UT_TEST_IMPL_VAL_RES_PK*           1 utivr_id
UT_TEST_RESULTS                UT_TEST_RESULTS_PK*                1 utr_id
                               UT_TEST_RESULTS_UT_TEST_IX1        1 ut_id
UT_VALIDATIONS                 UT_VALIDATIONS_LIB_VALIDN_IX       1 lib_validation_id
                               UT_VALIDATIONS_PK*                 1 validation_id
                               UT_VALIDATIONS_TEST_IMPL_IX        1 uti_id

72 rows selected.

SQL> 
SQL> PROMPT Tables with no Who columns / No unique indexes/ Id only unique indexes
Tables with no Who columns / No unique indexes/ Id only unique indexes
SQL> SELECT atb.table_name,  CASE WHEN atc_w.column_name IS NULL THEN 'X' END "Who?",
  2                          CASE WHEN uni.maxind IS NULL THEN 'X' END "No UID?",
  3                          CASE WHEN uni.maxind = 1 THEN 'X' END "Id UID?"
  4    FROM all_tables			atb
  5    LEFT JOIN all_tab_columns		atc_w
  6           ON atc_w.table_name		= atb.table_name
  7          AND atc_w.owner			= atb.owner
  8          AND atc_w.column_name		= 'CREATED_BY'
  9    LEFT JOIN (SELECT ind.table_name, ind.table_owner, Max(CASE WHEN Substr(aic.column_name, Length(aic.column_name)-2) IS NULL THEN 0
 10  							      WHEN Substr(aic.column_name, Length(aic.column_name)-2) = '_ID' THEN 1
 11  							      ELSE 2 END) maxind
 12                 FROM all_indexes ind
 13                 LEFT JOIN all_ind_columns aic
 14                        ON aic.index_name         = ind.index_name
 15                       AND aic.index_owner        = ind.owner
 16                       AND aic.column_position    = 1
 17                WHERE ind.uniqueness		= 'UNIQUE'
 18                GROUP BY ind.table_name, ind.table_owner) uni
 19           ON uni.table_name			= atb.table_name
 20          AND uni.table_owner			= atb.owner
 21   WHERE atb.table_name			LIKE Upper('&tab'||'%')
 22     AND atb.table_name			NOT LIKE '%$%'
 23     AND atb.table_name			NOT LIKE '%&nottab1%'
 24     AND atb.table_name			NOT LIKE '%&nottab2%'
 25     AND atb.owner			LIKE Upper('&owner')
 26     AND (atc_w.column_name		IS NULL OR uni.maxind IN (0, 1))
 27   ORDER BY 1;

TABLE_NAME                     Who?  No UID? Id UID?
------------------------------ ----- ------- -------
UT_METADATA                    X
UT_STARTUPS                                  X
UT_SUITE_ITEM_RESULTS                        X
UT_SUITE_RESULTS                             X
UT_TEARDOWNS                                 X
UT_TEST_ARGUMENTS                            X
UT_TEST_COVERAGE_STATS                       X
UT_TEST_IMPL                                 X
UT_TEST_IMPL_ARGUMENTS                       X
UT_TEST_IMPL_ARG_RESULTS                     X
UT_TEST_IMPL_RESULTS                         X
UT_TEST_IMPL_VAL_RESULTS                     X
UT_TEST_RESULTS                              X
UT_VALIDATIONS                               X

14 rows selected.

SQL> SELECT 'End: '||name "Database", '&owner' "Schema", '&tab' "Prefix", To_Char(SYSDATE,'DD-MON-YYYY HH24:MI:SS') FROM v$database;

Database             Schema          Prefix     TO_CHAR(SYSDATE,'DD-MON-YYYYH
-------------------- --------------- ---------- -----------------------------
End: XE              UT_REPOS        %          11-JUL-2015 13:21:35

HR Demo Schemas (v12)

I had to import the three schemas (HR, OE and PM) one at a time, merging with the previous one, am not sure if you can do it in one go, or if the diagram is affected by the order of import.

Data Modeler Diagram

HR

Manual Visio Diagram

For comparison, here is a manual diagram, deliberately omitting column and other detail. It was done as an illustration of the network analysis program output, and I therefore did not include useful information such as on relationship optionality.

Networks - HR, v1.0

Network Analysis Output

I copied this from my article above.

Network       #Links  #Nodes Lev  Node                                     Link
------------  ------  ------ ---  ---------------------------------------  -------------------------------
COUNTRIES|HR      21      16   0  COUNTRIES|HR                             ROOT
                               1  < LOCATIONS|HR                           loc_c_id_fk|hr
                               2    < DEPARTMENTS|HR                       dept_loc_fk|hr                                3      > EMPLOYEES|HR                       dept_mgr_fk|hr
                               4        < CUSTOMERS|OE                     customers_account_manager_fk|oe
                               5          < ORDERS|OE                      orders_customer_id_fk|oe                                6            > EMPLOYEES|HR*                orders_sales_rep_fk|oe
                               6            < ORDER_ITEMS|OE               order_items_order_id_fk|oe                                7              > PRODUCT_INFORMATION|OE     order_items_product_id_fk|oe
                               8                < INVENTORIES|OE           inventories_product_id_fk|oe                                9                  > WAREHOUSES|OE          inventories_warehouses_fk|oe
                              10                    > LOCATIONS|HR*        warehouses_location_fk|oe
                               8                < ONLINE_MEDIA|PM          loc_c_id_fk|pm
                               8                < PRINT_MEDIA|PM           printmedia_fk|pm
                               8                < PRODUCT_DESCRIPTIONS|OE  pd_product_id_fk|oe                                4        > DEPARTMENTS|HR*                  emp_dept_fk|hr
                               4        = EMPLOYEES|HR*                    emp_manager_fk|hr
                               4        > JOBS|HR                          emp_job_fk|hr
                               5          < JOB_HISTORY|HR                 jhist_job_fk|hr                                6            > DEPARTMENTS|HR*              jhist_dept_fk|hr
                               6            > EMPLOYEES|HR*                jhist_emp_fk|hr
                               1  > REGIONS|HR                             countr_reg_fk|hr

Schema Metadata Analysis Report - not included

Apex Schema - APEX_040000 (v11.22)
This imported quickly, with 425 tables. However, the diagram was not so useful. Trying to print it to .png or .jpg (via File/Print Diagram/To Image File) silently failed; printing to .pdf worked, but the reader opens at a zoom level of 1.41% and it's not practical to navigate the links. Maybe text-based analysis reports are more useful for the larger schemas.

Data Modeler Diagram

Here is a screenshot of the modeler diagram:
APEX_040000_DM-Shot
Network Analysis Output

I include my standard summary listings in this case, showing that the schema splits into 21 sub-networks, with 298 tables having foreign key links, the remaining 127 being thereby excluded from this report.

SQL> @..\sql\R_Net
Network detail

Network                                     #Links  #Nodes    Lev Node                                                                   Link
------------------------------------------ ------- ------- ------ ---------------------------------------------------------------------- ------------------------------------------
APEX$_WS_FILES|APEX_040000                       4       5      0 APEX$_WS_FILES|APEX_040000                                             ROOT
                                                                1 > APEX$_WS_ROWS|APEX_040000                                            apex$_ws_files_fk|apex_040000
                                                                2   < APEX$_WS_LINKS|APEX_040000                                         apex$_ws_links_fk|apex_040000
                                                                 2   < APEX$_WS_NOTES|APEX_040000                                         apex$_ws_notes_fk|apex_040000
                                                                 2   < APEX$_WS_TAGS|APEX_040000                                          apex$_ws_tags_fk|apex_040000
 WWV_FLOWS|APEX_040000                          286     236      0 WWV_FLOWS|APEX_040000                                                  ROOT
                                                                 1 < WWV_FLOW_ALTERNATE_CONFIG|APEX_040000                                wwv_flow_alt_cfg_fk|apex_040000
                                                                 2   < WWV_FLOW_ALT_CONFIG_DETAIL|APEX_040000                             wwv_flow_alt_cfg_d_fk|apex_040000
                                                                 1 < WWV_FLOW_APP_COMMENTS|APEX_040000                                    wwv_flow_app_comments_fk|apex_040000
                                                                 1 < WWV_FLOW_BANNER|APEX_040000                                          wwv_flow_banner_fk|apex_040000
                                                                 1 < WWV_FLOW_BUTTON_TEMPLATES|APEX_040000                                wwv_flow_buttont_fk|apex_040000
                                                                 1 < WWV_FLOW_CALS|APEX_040000                                            wwv_flow_cal_to_flow_fk|apex_040000
                                                                 2   > WWV_FLOW_PAGE_PLUGS|APEX_040000                                    wwv_flow_plug_calendar_fk|apex_040000
                                                                3     > WWV_FLOWS|APEX_040000*                                           wwv_flow_plug_to_flow_fk|apex_040000
                                                                3     < WWV_FLOW_FLASH_CHARTS_5|APEX_040000                              wwv_flow_flash_charts_5_fk2|apex_040000
                                                                 4       > WWV_FLOWS|APEX_040000*                                         wwv_flow_flash_charts_5_fk|apex_040000
                                                                4       < WWV_FLOW_FLASH_CHART5_SERIES|APEX_040000                       wwv_flow_flash_5_series_fk|apex_040000
                                                                 4       < WWV_FLOW_FLASH_CHARTS_5_DASH|APEX_040000                       wwv_flow_flash_charts5_dash_fk|apex_040000
                                                                 3     < WWV_FLOW_FLASH_CHARTS|APEX_040000                                wwv_flow_flash_charts_fk2|apex_040000
                                                                 4       > WWV_FLOWS|APEX_040000*                                         wwv_flow_flash_charts_fk|apex_040000
                                                                4       < WWV_FLOW_FLASH_CHART_SERIES|APEX_040000                        wwv_flow_flash_chart_series_fk|apex_040000
                                                                 3     < WWV_FLOW_PAGE_DA_ACTIONS|APEX_040000                             wwv_flow_page_da_a_ar_fk|apex_040000
                                                                 4       > WWV_FLOW_PAGE_DA_EVENTS|APEX_040000                            wwv_flow_page_da_a_evnt_fk|apex_040000
                                                                5         > WWV_FLOWS|APEX_040000*                                       wwv_flow_page_da_e_flow_fk|apex_040000
                                                                5         > WWV_FLOW_PAGE_PLUGS|APEX_040000*                             wwv_flow_page_da_e_tr_fk|apex_040000
                                                                5         > WWV_FLOW_STEPS|APEX_040000                                   wwv_flow_page_da_e_page_fk|apex_040000
                                                                6           > WWV_FLOWS|APEX_040000*                                     wwv_flow_steps_fk|apex_040000
                                                                6           < WWV_FLOW_PAGE_DA_ACTIONS|APEX_040000*                      wwv_flow_page_da_a_page_fk|apex_040000
                                                                 6           < WWV_FLOW_PAGE_PLUGS|APEX_040000*                           wwv_flow_plug_to_page_fk|apex_040000
                                                                 6           < WWV_FLOW_STEP_BRANCHES|APEX_040000                         wwv_flow_step_branches_fk2|apex_040000
                                                                 7             > WWV_FLOWS|APEX_040000*                                   wwv_flow_step_branches_fk|apex_040000
                                                                7             < WWV_FLOW_STEP_BRANCH_ARGS|APEX_040000                    wwv_flow_step_branch_args_fk|apex_040000
                                                                 6           < WWV_FLOW_STEP_BUTTONS|APEX_040000                          wwv_flow_step_buttons_fk2|apex_040000
                                                                 7             > WWV_FLOWS|APEX_040000*                                   wwv_flow_step_buttons_fk1|apex_040000
                                                                7             > WWV_FLOW_PAGE_PLUGS|APEX_040000*                         wwv_flow_step_buttons_plug_fk|apex_040000
                                                                6           < WWV_FLOW_STEP_COMPUTATIONS|APEX_040000                     wwv_flow_step_comp_fk2|apex_040000
                                                                 7             > WWV_FLOWS|APEX_040000*                                   wwv_flow_step_comp_fk|apex_040000
                                                                6           < WWV_FLOW_STEP_ITEMS|APEX_040000                            wwv_flow_step_items_fk2|apex_040000
                                                                 7             > WWV_FLOWS|APEX_040000*                                   wwv_flow_step_items_fk|apex_040000
                                                                7             > WWV_FLOW_PAGE_PLUGS|APEX_040000*                         wwv_flow_step_items_plug_fk|apex_040000
                                                                7             < WWV_FLOW_STEP_ITEM_HELP|APEX_040000                      wwv_flow_item_helptext_fk|apex_040000
                                                                 8               > WWV_FLOWS|APEX_040000*                                 wwv_flow_page_helptext_fk|apex_040000
                                                                6           < WWV_FLOW_STEP_PROCESSING|APEX_040000                       wwv_flow_step_proc_fk2|apex_040000
                                                                 7             > WWV_FLOWS|APEX_040000*                                   wwv_flow_step_proc_fk|apex_040000
                                                                7             < WWV_FLOW_WS_PROCESS_PARMS_MAP|APEX_040000                wwv_flow_ws_map_fk2|apex_040000
                                                                 8               > WWV_FLOW_WS_PARAMETERS|APEX_040000                     wwv_flows_ws_map_fk1|apex_040000
                                                                9                 > WWV_FLOW_WS_OPERATIONS|APEX_040000                   wwv_flow_ws_parms_fk|apex_040000
                                                               10                   > WWV_FLOW_SHARED_WEB_SERVICES|APEX_040000           wwv_flow_ws_opers_fk|apex_040000
                                                               11                     > WWV_FLOWS|APEX_040000*                           wwv_flow_ws_fk|apex_040000
                                                                6           < WWV_FLOW_STEP_VALIDATIONS|APEX_040000                      wwv_flow_step_val_fk2|apex_040000
                                                                 7             > WWV_FLOWS|APEX_040000*                                   wwv_flow_step_val_fk|apex_040000
                                                                7             > WWV_FLOW_PAGE_PLUGS|APEX_040000*                         wwv_flow_step_val_to_reg_fk|apex_040000
                                                                3     < WWV_FLOW_PAGE_GENERIC_ATTR|APEX_040000                           wwv_flow_genattr_to_region_fk|apex_040000
                                                                 3     = WWV_FLOW_PAGE_PLUGS|APEX_040000*                                 wwv_flow_plug_parent_fk|apex_040000
                                                                 3     < WWV_FLOW_QUERY_DEFINITION|APEX_040000                            query_def_to_region_fk|apex_040000
                                                                 4       < WWV_FLOW_QUERY_COLUMN|APEX_040000                              query_column_to_query_fk|apex_040000
                                                                 5         > WWV_FLOW_QUERY_OBJECT|APEX_040000                            query_column_to_qry_object_fk|apex_040000
                                                                6           > WWV_FLOW_QUERY_DEFINITION|APEX_040000*                     query_object_to_query_fk|apex_040000
                                                                4       < WWV_FLOW_QUERY_CONDITION|APEX_040000                           query_condition_to_query_fk|apex_040000
                                                                 3     < WWV_FLOW_REGION_CHART_SER_ATTR|APEX_040000                       wwv_flow_seattr_to_region_fk|apex_040000
                                                                 3     < WWV_FLOW_REGION_REPORT_COLUMN|APEX_040000                        report_column_to_region_fk|apex_040000
                                                                 3     < WWV_FLOW_REGION_REPORT_FILTER|APEX_040000                        sys_c004963|apex_040000
                                                                 3     < WWV_FLOW_REGION_UPD_RPT_COLS|APEX_040000                         wwv_flow_urc_to_plug_fk|apex_040000
                                                                 4       > WWV_FLOWS|APEX_040000*                                         wwv_flow_urc_to_flow_fk|apex_040000
                                                                3     < WWV_FLOW_TREE_REGIONS|APEX_040000                                wwv_flow_treeregion_fk2|apex_040000
                                                                 4       > WWV_FLOWS|APEX_040000*                                         wwv_flow_treeregion_fk|apex_040000
                                                                3     < WWV_FLOW_WORKSHEETS|APEX_040000                                  wwv_flow_worksheets_reg_fk|apex_040000
                                                                 4       > WWV_FLOWS|APEX_040000*                                         wwv_flow_worksheets_flow_fk|apex_040000
                                                                4       < WWV_FLOW_WORKSHEET_COLUMNS|APEX_040000                         wwv_flow_worksheet_columns_fk|apex_040000
                                                                 5         > WWV_FLOWS|APEX_040000*                                       wwv_flow_worksheet_col_fk|apex_040000
                                                                5         > WWV_FLOW_WORKSHEET_COL_GROUPS|APEX_040000                    wwv_flow_worksheet_col_grps_fk|apex_040000
                                                                6           > WWV_FLOWS|APEX_040000*                                     wwv_flow_worksheet_col_grp_fk|apex_040000
                                                                6           > WWV_FLOW_WORKSHEETS|APEX_040000*                           wwv_flow_worksheet_col_grws_fk|apex_040000
                                                                6           > WWV_FLOW_WS_WEBSHEET_ATTR|APEX_040000                      wwv_flow_worksheet_col_grp_fk2|apex_040000
                                                                7             > WWV_FLOW_WORKSHEETS|APEX_040000*                         wwwv_flow_ws_websheet_attr_fk|apex_040000
                                                                7             < WWV_FLOW_WORKSHEET_COLUMNS|APEX_040000*                  wwv_flow_worksheet_col_fk2|apex_040000
                                                                 7             < WWV_FLOW_WORKSHEET_COMPUTATION|APEX_040000               wwv_flow_ws_computation_fk|apex_040000
                                                                 8               > WWV_FLOW_WORKSHEET_RPTS|APEX_040000                    wwv_flow_ws_comp_cols_fk|apex_040000
                                                                9                 > WWV_FLOW_WORKSHEET_CATEGORIES|APEX_040000            wwv_flow_worksheet_rpts_fk|apex_040000
                                                                9                 < WWV_FLOW_WORKSHEET_CONDITIONS|APEX_040000            wwv_flow_worksheet_cond_fk|apex_040000
                                                                10                   > WWV_FLOW_WS_WEBSHEET_ATTR|APEX_040000*             wwv_flow_ws_condition_fk|apex_040000
                                                                9                 < WWV_FLOW_WORKSHEET_GROUP_BY|APEX_040000              wwv_flow_ws_groupby_fk2|apex_040000
                                                                10                   > WWV_FLOW_WS_WEBSHEET_ATTR|APEX_040000*             wwv_flow_ws_groupby_fk|apex_040000
                                                                9                 < WWV_FLOW_WORKSHEET_NOTIFY|APEX_040000                wwv_flow_worksheet_notify_fk2|apex_040000
                                                                10                   > WWV_FLOW_WORKSHEETS|APEX_040000*                   wwv_flow_worksheet_notify_fk|apex_040000
                                                               10                   > WWV_FLOW_WS_WEBSHEET_ATTR|APEX_040000*             wwv_flow_worksheet_notify_fk4|apex_040000
                                                                9                 > WWV_FLOW_WS_WEBSHEET_ATTR|APEX_040000*               wwv_flow_ws_rpt_fk|apex_040000
                                                                7             < WWV_FLOW_WORKSHEET_LOVS|APEX_040000                      wwv_flow_worksheet_lovs_fk2|apex_040000
                                                                 8               > WWV_FLOW_WORKSHEETS|APEX_040000*                       wwv_flow_worksheet_lovs_fk|apex_040000
                                                                8               < WWV_FLOW_WORKSHEET_LOV_ENTRIES|APEX_040000             wwv_flow_worksheet_lov_ent_fk2|apex_040000
                                                                 9                 > WWV_FLOW_WORKSHEETS|APEX_040000*                     wwv_flow_worksheet_lov_ent_fk|apex_040000
                                                                9                 > WWV_FLOW_WS_WEBSHEET_ATTR|APEX_040000*               wwv_flow_worksheet_lov_ent_fk3|apex_040000
                                                                7             > WWV_FLOW_WS_APPLICATIONS|APEX_040000                     wwv_flow_ws_websheet_attr_fk2|apex_040000
                                                                8               < WWV_FLOW_WS_APP_SUG_OBJECTS|APEX_040000                wwv_flow_ws_app_so_fk1|apex_040000
                                                                 8               < WWV_FLOW_WS_COL_VALIDATIONS|APEX_040000                wwv_flow_ws_col_val_fk3|apex_040000
                                                                 9                 > WWV_FLOW_WORKSHEETS|APEX_040000*                     wwv_flow_ws_col_val_fk|apex_040000
                                                                9                 > WWV_FLOW_WS_WEBSHEET_ATTR|APEX_040000*               wwv_flow_ws_col_val_fk2|apex_040000
                                                                8               < WWV_FLOW_WS_CUSTOM_AUTH_SETUPS|APEX_040000             wwv_flow_ws_auth_setups_fk|apex_040000
                                                                 8               < WWV_FLOW_WS_WEBPAGES|APEX_040000                       wwv_flow_ws_webpages_fk|apex_040000
                                                                 9                 = WWV_FLOW_WS_WEBPAGES|APEX_040000*                    wwv_flow_ws_webpages_fk2|apex_040000
                                                                 1 < WWV_FLOW_CAL_TEMPLATES|APEX_040000                                   wwv_flow_cal_templ_to_flow_fk|apex_040000
                                                                 1 < WWV_FLOW_COMPOUND_CONDITIONS|APEX_040000                             wwv_flow_comp_cond_fk|apex_040000
                                                                 1 < WWV_FLOW_COMPUTATIONS|APEX_040000                                    wwv_flow_computations_fk|apex_040000
                                                                 1 < WWV_FLOW_CUSTOM_AUTH_SETUPS|APEX_040000                              wwv_flow_auth_setups_fk|apex_040000
                                                                 1 < WWV_FLOW_ENTRY_POINTS|APEX_040000                                    wwv_flow_entry_points_fk|apex_040000
                                                                 2   < WWV_FLOW_ENTRY_POINT_ARGS|APEX_040000                              wwv_flow_entry_point_args_fk|apex_040000
                                                                 1 < WWV_FLOW_FIELD_TEMPLATES|APEX_040000                                 wwv_flow_field_temp_f_fk|apex_040000
                                                                 1 < WWV_FLOW_ICON_BAR_ATTRIBUTES|APEX_040000                             wwv_flow_iconbarattr_fk|apex_040000
                                                                 1 < WWV_FLOW_ICON_BAR|APEX_040000                                        wwv_flow_icon_bar_fk|apex_040000
                                                                 1 < WWV_FLOW_INSTALL_BUILD_OPT|APEX_040000                               wwv_flow_install_build_opt_fk|apex_040000
                                                                 2   > WWV_FLOW_INSTALL|APEX_040000                                       wwv_flow_install_build_opt_fk3|apex_040000
                                                                3     > WWV_FLOWS|APEX_040000*                                           wwv_flow_install_fk|apex_040000
                                                                3     < WWV_FLOW_INSTALL_CHECKS|APEX_040000                              wwv_flow_install_checks_fk3|apex_040000
                                                                 4       > WWV_FLOWS|APEX_040000*                                         wwv_flow_install_checks_fk|apex_040000
                                                                3     < WWV_FLOW_INSTALL_SCRIPTS|APEX_040000                             wwv_flow_install_scripts_fk3|apex_040000
                                                                 4       > WWV_FLOWS|APEX_040000*                                         wwv_flow_install_scripts_fk|apex_040000
                                                                2   > WWV_FLOW_PATCHES|APEX_040000                                       wwv_flow_install_build_opt_fk4|apex_040000
                                                                3     > WWV_FLOWS|APEX_040000*                                           wwv_flow_patches_fk|apex_040000
                                                                1 < WWV_FLOW_ITEMS|APEX_040000                                           wwv_flow_items_fk|apex_040000
                                                                 1 < WWV_FLOW_LANGUAGE_MAP|APEX_040000                                    wwv_flow_lang_flow_id_fk|apex_040000
                                                                 1 < WWV_FLOW_LISTS_OF_VALUES$|APEX_040000                                wwv_flow_lov_fk|apex_040000
                                                                 2   < WWV_FLOW_LIST_OF_VALUES_DATA|APEX_040000                           wwv_flow_lov_data_fk|apex_040000
                                                                 1 < WWV_FLOW_LISTS|APEX_040000                                           wwv_flow_lists_flow_fk|apex_040000
                                                                 2   < WWV_FLOW_LIST_ITEMS|APEX_040000                                    wwv_flow_list_items_fk|apex_040000
                                                                 3     = WWV_FLOW_LIST_ITEMS|APEX_040000*                                 parent_list_item_fk|apex_040000
                                                                 1 < WWV_FLOW_LIST_TEMPLATES|APEX_040000                                  wwv_flow_list_template_fk|apex_040000
                                                                 1 < WWV_FLOW_LOCK_PAGE|APEX_040000                                       sys_c004810|apex_040000
                                                                 1 < WWV_FLOW_MENUS|APEX_040000                                           wwv_flow_menus_flow_fk|apex_040000
                                                                 2   < WWV_FLOW_MENU_OPTIONS|APEX_040000                                  wwv_flow_opt_menus_fk|apex_040000
                                                                 1 < WWV_FLOW_MENU_TEMPLATES|APEX_040000                                  wwv_flow_menus_t_flow_fk|apex_040000
                                                                 1 < WWV_FLOW_MESSAGES$|APEX_040000                                       wwv_flow_messages_fk|apex_040000
                                                                 1 < WWV_FLOW_PAGES_RESERVED|APEX_040000                                  wwv_flow_pages_reserved_fk|apex_040000
                                                                 1 < WWV_FLOW_PAGE_CACHE|APEX_040000                                      wwv_flow_page_cache_fk|apex_040000
                                                                 2   < WWV_FLOW_PAGE_CODE_CACHE|APEX_040000                               wwv_flow_page_code_cache_fk|apex_040000
                                                                 1 < WWV_FLOW_PAGE_GROUPS|APEX_040000                                     sys_c004993|apex_040000
                                                                 1 < WWV_FLOW_PAGE_PLUG_TEMPLATES|APEX_040000                             wwv_flow_plug_temp_fk|apex_040000
                                                                 1 < WWV_FLOW_PAGE_SUBMISSIONS|APEX_040000                                wwv_flow_page_sub_fk|apex_040000
                                                                 2   > WWV_FLOW_SESSIONS$|APEX_040000                                     wwv_flow_page_sub_sess_fk|apex_040000
                                                                3     < WWV_FLOW_COLLECTIONS$|APEX_040000                                wwv_flow_collection_fk|apex_040000
                                                                 4       < WWV_FLOW_COLLECTION_MEMBERS$|APEX_040000                       wwv_flow_collection_membes_fk|apex_040000
                                                                 3     < WWV_FLOW_DATA|APEX_040000                                        wwv_flow_data_fk|apex_040000
                                                                 3     < WWV_FLOW_REQUEST_VERIFICATIONS|APEX_040000                       wwv_flow_request_verif_fk|apex_040000
                                                                 3     < WWV_FLOW_SC_TRANS|APEX_040000                                    wwv_flow_sc_trans_fk2|apex_040000
                                                                 3     < WWV_FLOW_TREE_STATE|APEX_040000                                  wwv_flow_tree_state$fk|apex_040000
                                                                 1 < WWV_FLOW_PLUGINS|APEX_040000                                         wwv_flow_plugin_flow_fk|apex_040000
                                                                 2   < WWV_FLOW_PLUGIN_ATTRIBUTES|APEX_040000                             wwv_flow_plugin_attr_parent_fk|apex_040000
                                                                 3     > WWV_FLOWS|APEX_040000*                                           wwv_flow_plugin_attr_flow_fk|apex_040000
                                                                3     = WWV_FLOW_PLUGIN_ATTRIBUTES|APEX_040000*                          wwv_flow_plugin_attr_depend_fk|apex_040000
                                                                3     < WWV_FLOW_PLUGIN_ATTR_VALUES|APEX_040000                          wwv_flow_plugin_attrv_attr_fk|apex_040000
                                                                 4       > WWV_FLOWS|APEX_040000*                                         wwv_flow_plugin_attrv_flow_fk|apex_040000
                                                                2   < WWV_FLOW_PLUGIN_EVENTS|APEX_040000                                 wwv_flow_plugin_evnt_parent_fk|apex_040000
                                                                 3     > WWV_FLOWS|APEX_040000*                                           wwv_flow_plugin_evnt_flow_fk|apex_040000
                                                                2   < WWV_FLOW_PLUGIN_FILES|APEX_040000                                  wwv_flow_plugin_file_parent_fk|apex_040000
                                                                 3     > WWV_FLOWS|APEX_040000*                                           wwv_flow_plugin_file_flow_fk|apex_040000
                                                                1 < WWV_FLOW_POPUP_LOV_TEMPLATE|APEX_040000                              wwv_flow_fk_poplov_temp|apex_040000
                                                                 1 < WWV_FLOW_PROCESSING|APEX_040000                                      wwv_flow_processing_fk|apex_040000
                                                                 1 < WWV_FLOW_REPORT_LAYOUTS|APEX_040000                                  wwv_flow_report_layoutse_fk|apex_040000
                                                                 1 < WWV_FLOW_REQUIRED_ROLES|APEX_040000                                  wwv_flow_req_roles_fk|apex_040000
                                                                 1 < WWV_FLOW_ROW_TEMPLATES|APEX_040000                                   wwv_flow_row_template_fk|apex_040000
                                                                 1 < WWV_FLOW_SECURITY_SCHEMES|APEX_040000                                wwv_flow_sec_schemes_fk|apex_040000
                                                                 1 < WWV_FLOW_SHARED_QRY_SQL_STMTS|APEX_040000                            wwv_flow_sqry_sql_flow_fk|apex_040000
                                                                 2   > WWV_FLOW_SHARED_QUERIES|APEX_040000                                wwv_flow_sqry_sql_sqry_fk|apex_040000
                                                                3     > WWV_FLOWS|APEX_040000*                                           wwv_flow_shdqry_flow_fk|apex_040000
                                                                1 < WWV_FLOW_SHORTCUTS|APEX_040000                                       wwv_flow_shortcuts_to_flow_fk|apex_040000
                                                                 1 < WWV_FLOW_TABS|APEX_040000                                            wwv_flow_tabs_fk|apex_040000
                                                                 1 < WWV_FLOW_TEMPLATES|APEX_040000                                       wwv_flow_templates_fk|apex_040000
                                                                 1 < WWV_FLOW_TEMPLATE_PREFERENCES|APEX_040000                            wwv_flow_templ_pref_fk|apex_040000
                                                                 1 < WWV_FLOW_THEMES|APEX_040000                                          wwv_flow_themes_2f_fk|apex_040000
                                                                 1 < WWV_FLOW_TOPLEVEL_TABS|APEX_040000                                   wwv_flow_toplev_tab_fk|apex_040000
                                                                 1 < WWV_FLOW_TRANSLATABLE_TEXT$|APEX_040000                              wwv_flow_trans_text_fk|apex_040000
                                                                 1 < WWV_FLOW_TREES|APEX_040000                                           wwv_flow_tree_fk|apex_040000
                                                                 1 < WWV_FLOW_VALIDATIONS|APEX_040000                                     wwv_flow_val_fk|apex_040000
                                                                 1 < WWV_MIG_GENERATED_APPLICATIONS|APEX_040000                           wwv_mig_gen_app_flow_id_fk|apex_040000
                                                                 2   > WWV_MIG_PROJECTS|APEX_040000                                       wwv_mig_gen_app_proj_id_fk|apex_040000
                                                                3     < WWV_MIG_ACCESS|APEX_040000                                       wwv_mig_acc_fk|apex_040000
                                                                 3     < WWV_MIG_FORMS|APEX_040000                                        wwv_mig_forms_project_id_fk|apex_040000
                                                                 4       < WWV_MIG_FRM_MODULES|APEX_040000                                wwv_mig_frm_modules_file_id_fk|apex_040000
                                                                 5         < WWV_MIG_FRM_FORMMODULES|APEX_040000                          wwv_mig_frm_frmmdl_mdl_id_fk|apex_040000
                                                                 6           < WWV_MIG_FRM_ALERTS|APEX_040000                             wwv_mig_frm_alrt_frmmdl_id_fk|apex_040000
                                                                 6           < WWV_MIG_FRM_ATTACHEDLIBRARY|APEX_040000                    wwv_mig_frm_atlib_frmmdl_id_fk|apex_040000
                                                                 6           < WWV_MIG_FRM_BLOCKS|APEX_040000                             wwv_mig_frm_blk_frmmdl_id_fk|apex_040000
                                                                 7             < WWV_MIG_FRM_BLK_DSA|APEX_040000                          wwv_mig_frm_blk_dsa_blk_id_fk|apex_040000
                                                                 7             < WWV_MIG_FRM_BLK_DSC|APEX_040000                          wwv_mig_frm_blk_dsc_blk_id_fk|apex_040000
                                                                 7             < WWV_MIG_FRM_BLK_ITEMS|APEX_040000                        wwv_mig_frm_bi_blk_id_fk|apex_040000
                                                                 8               < WWV_MIG_FRM_BLK_ITEM_LIE|APEX_040000                   wwv_mig_frm_bi_lie_item_id_fk|apex_040000
                                                                 8               < WWV_MIG_FRM_BLK_ITEM_RADIO|APEX_040000                 wwv_mig_frm_bir_item_id_fk|apex_040000
                                                                 8               < WWV_MIG_FRM_BLK_ITEM_TRIGGERS|APEX_040000              wwv_mig_frm_bi_trg_item_id_fk|apex_040000
                                                                 8               < WWV_MIG_FRM_REV_BLK_ITEMS|APEX_040000                  wwv_mig_frm_rev_bi_item_id_fk|apex_040000
                                                                 7             < WWV_MIG_FRM_BLK_RELATIONS|APEX_040000                    wwv_mig_frm_blk_rel_blk_id_fk|apex_040000
                                                                 7             < WWV_MIG_FRM_BLK_TRIGGERS|APEX_040000                     wwv_mig_frm_blk_trg_blk_id_fk|apex_040000
                                                                 7             < WWV_MIG_FRM_REV_BLOCKS|APEX_040000                       wwv_mig_frm_rev_blocks_id_fk|apex_040000
                                                                 6           < WWV_MIG_FRM_CANVAS|APEX_040000                             wwv_mig_frm_canvs_frmmdl_id_fk|apex_040000
                                                                 7             < WWV_MIG_FRM_CNVS_GRAPHICS|APEX_040000                    wwv_mig_frm_cg_cnvs_id_fk|apex_040000
                                                                 8               < WWV_MIG_FRM_CNVG_COMPOUNDTEXT|APEX_040000              wwv_mig_frm_cpdtxt_grphs_id_fk|apex_040000
                                                                 9                 < WWV_MIG_FRM_CPDTXT_TEXTSEGMENT|APEX_040000           wwv_mig_frm_txtsgmt_cpd_id_fk|apex_040000
                                                                 7             < WWV_MIG_FRM_CNVS_TABPAGE|APEX_040000                     wwv_mig_frm_ctp_cnvs_id_fk|apex_040000
                                                                 6           < WWV_MIG_FRM_COORDINATES|APEX_040000                        wwv_mig_frm_crdnt_frmmdl_id_fk|apex_040000
                                                                 6           < WWV_MIG_FRM_EDITOR|APEX_040000                             wwv_mig_frm_edtr_frmmdl_id_fk|apex_040000
                                                                 6           < WWV_MIG_FRM_FMB_MENU|APEX_040000                           wwv_mig_frm_menu_frmmdl_id_fk|apex_040000
                                                                 7             < WWV_MIG_FRM_FMB_MENU_MENUITEM|APEX_040000                wwv_mig_fmb_menuitem_menuid_fk|apex_040000
                                                                 8               < WWV_MIG_FRM_FMB_MENUITEM_ROLE|APEX_040000              wwv_mig_fmb_mnuitemrl_mitm_fk|apex_040000
                                                                 6           < WWV_MIG_FRM_LOV|APEX_040000                                wwv_mig_frm_lov_frmmdl_id_fk|apex_040000
                                                                 7             < WWV_MIG_FRM_LOVCOLUMNMAPPING|APEX_040000                 wwv_mig_frm_lvcm_frmmdl_id_fk|apex_040000
                                                                 8               < WWV_MIG_FRM_REV_LOVCOLMAPS|APEX_040000                 wwv_mig_frm_rev_lcm_id_fk|apex_040000
                                                                 7             < WWV_MIG_FRM_REV_LOV|APEX_040000                          wwv_mig_frm_rev_lov_id_fk|apex_040000
                                                                 6           < WWV_MIG_FRM_MODULEPARAMETER|APEX_040000                    wwv_mig_frm_mdlpr_frmmdl_id_fk|apex_040000
                                                                 6           < WWV_MIG_FRM_OBJECTGROUP|APEX_040000                        wwv_mig_frm_objgp_frmmdl_id_fk|apex_040000
                                                                 7             < WWV_MIG_FRM_OBJECTGROUPCHILD|APEX_040000                 wwv_mig_frm_objgpc_objgp_id_fk|apex_040000
                                                                 6           < WWV_MIG_FRM_PROGRAMUNIT|APEX_040000                        wwv_mig_frm_pgut_frmmdl_id_fk|apex_040000
                                                                 6           < WWV_MIG_FRM_PROPERTYCLASS|APEX_040000                      wwv_mig_frm_ppcl_frmmdl_id_fk|apex_040000
                                                                 6           < WWV_MIG_FRM_RECORDGROUPS|APEX_040000                       wwv_mig_frm_recgp_frmmdl_id_fk|apex_040000
                                                                 7             < WWV_MIG_FRM_RECORDGROUPCOLUMN|APEX_040000                wwv_mig_frm_rgc_recgp_id_fk|apex_040000
                                                                 6           < WWV_MIG_FRM_REPORT|APEX_040000                             wwv_mig_frm_rpt_frmmdl_id_fk|apex_040000
                                                                 6           < WWV_MIG_FRM_REV_FORMMODULES|APEX_040000                    wwv_mig_frm_rev_frmmdl_id_fk|apex_040000
                                                                 6           < WWV_MIG_FRM_TRIGGERS|APEX_040000                           wwv_mig_frm_trg_frmmdl_id_fk|apex_040000
                                                                 6           < WWV_MIG_FRM_VISUALATTRIBUTES|APEX_040000                   wwv_mig_frm_visat_frmmdl_id_fk|apex_040000
                                                                 6           < WWV_MIG_FRM_WINDOWS|APEX_040000                            wwv_mig_frm_wndow_frmmdl_id_fk|apex_040000
                                                                 3     < WWV_MIG_FRM_MENUS|APEX_040000                                    wwv_mig_menus_project_id_fk|apex_040000
                                                                 4       < WWV_MIG_FRM_MENUS_MODULES|APEX_040000                          wwv_mig_mnu_modules_file_id_fk|apex_040000
                                                                 5         < WWV_MIG_FRM_MENUS_MENUMODULES|APEX_040000                    wwv_mig_mnu_mnumdl_mdl_id_fk|apex_040000
                                                                 6           < WWV_MIG_FRM_MENUSMODULEROLES|APEX_040000                   wwv_mig_mmodrole_id_fk|apex_040000
                                                                 6           < WWV_MIG_FRM_MENUS_PROGRAMUNIT|APEX_040000                  wwv_mig_mnu_progunit_id_fk|apex_040000
                                                                 6           < WWV_MIG_FRM_MENU|APEX_040000                               wwv_mig_mnu_id_fk|apex_040000
                                                                 7             < WWV_MIG_FRM_MENU_MENUITEM|APEX_040000                    wwv_mig_mnuitem_id_fk|apex_040000
                                                                 8               < WWV_MIG_FRM_MENUITEM_ROLE|APEX_040000                  wwv_mig_mnuitemrole_id_fk|apex_040000
                                                                 3     < WWV_MIG_FRM_REV_APEX_APP|APEX_040000                             wwv_mig_frm_rev_apex_app_fk|apex_040000
                                                                 3     < WWV_MIG_OLB|APEX_040000                                          wwv_mig_olb_project_id_fk|apex_040000
                                                                 4       < WWV_MIG_OLB_MODULES|APEX_040000                                wwv_mig_olb_modules_file_id_fk|apex_040000
                                                                 5         < WWV_MIG_OLB_OBJECTLIBRARY|APEX_040000                        wwv_mig_olb_objlib_mdl_id_fk|apex_040000
                                                                 6           < WWV_MIG_OLB_BLOCK|APEX_040000                              wwv_mig_olb_block_objlib_id_fk|apex_040000
                                                                 7             < WWV_MIG_OLB_BLK_DATASOURCECOL|APEX_040000                wwv_mig_olb_blk_dsc_blk_id_fk|apex_040000
                                                                 7             < WWV_MIG_OLB_BLK_ITEM|APEX_040000                         wwv_mig_olb_blk_item_blk_id_fk|apex_040000
                                                                 8               < WWV_MIG_OLB_BLK_ITEM_LIE|APEX_040000                   wwv_mig_olb_bil_item_id_fk|apex_040000
                                                                 8               < WWV_MIG_OLB_BLK_ITEM_TRIGGER|APEX_040000               wwv_mig_olb_bit_item_id_fk|apex_040000
                                                                 7             < WWV_MIG_OLB_BLK_TRIGGER|APEX_040000                      wwv_mig_olb_blk_trgr_blk_id_fk|apex_040000
                                                                 6           < WWV_MIG_OLB_CANVAS|APEX_040000                             wwv_mig_olb_canvs_objlib_id_fk|apex_040000
                                                                 7             < WWV_MIG_OLB_CNVS_GRAPHICS|APEX_040000                    wwv_mig_olb_cg_cnvs_id_fk|apex_040000
                                                                 8               < WWV_MIG_OLB_CG_COMPOUNDTEXT|APEX_040000                wwv_mig_olb_cg_ct_grphs_id_fk|apex_040000
                                                                 9                 < WWV_MIG_OLB_CG_CT_TEXTSEGMENT|APEX_040000            wwv_mig_olb_cg_ct_ts_ct_id_fk|apex_040000
                                                                 6           < WWV_MIG_OLB_OBJECTLIBRARYTAB|APEX_040000                   wwv_mig_olb_olt_objlib_id_fk|apex_040000
                                                                 7             < WWV_MIG_OLB_OLT_ALERT|APEX_040000                        wwv_mig_olb_olt_alrt_olt_id_fk|apex_040000
                                                                 7             < WWV_MIG_OLB_OLT_BLOCK|APEX_040000                        wwv_mig_olb_t_block_olt_id_fk|apex_040000
                                                                 8               < WWV_MIG_OLB_OLT_BLK_ITEM|APEX_040000                   wwv_mig_olb_olt_bi_blk_id_fk|apex_040000
                                                                 9                 < WWV_MIG_OLB_OLT_BLK_ITEM_TRIGR|APEX_040000           wwv_mig_olb_olt_bit_item_id_fk|apex_040000
                                                                 7             < WWV_MIG_OLB_OLT_CANVAS|APEX_040000                       wwv_mig_olb_t_canvas_olt_id_fk|apex_040000
                                                                 8               < WWV_MIG_OLB_OLT_CNVS_GRAPHICS|APEX_040000              wwv_mig_olb_olt_cg_cnvs_id_fk|apex_040000
                                                                 7             < WWV_MIG_OLB_OLT_GRAPHICS|APEX_040000                     wwv_mig_olb_t_grphcs_olt_id_fk|apex_040000
                                                                 7             < WWV_MIG_OLB_OLT_ITEM|APEX_040000                         wwv_mig_olb_olt_item_olt_id_fk|apex_040000
                                                                 7             < WWV_MIG_OLB_OLT_MENU|APEX_040000                         wwv_mig_olb_olt_menu_olt_id_fk|apex_040000
                                                                 8               < WWV_MIG_OLB_OLT_MENU_MENUITEM|APEX_040000              wwv_mig_olb_olt_mmi_menu_id_fk|apex_040000
                                                                 7             < WWV_MIG_OLB_OLT_OBJECTGROUP|APEX_040000                  wwv_mig_olb_t_objgrp_olt_id_fk|apex_040000
                                                                 8               < WWV_MIG_OLB_OLT_OB_OBJGRPCHILD|APEX_040000             wwv_mig_olb_olt_ob_ogc_obid_fk|apex_040000
                                                                 7             < WWV_MIG_OLB_OLT_REPORT|APEX_040000                       wwv_mig_olb_t_report_olt_id_fk|apex_040000
                                                                 7             < WWV_MIG_OLB_OLT_TABPAGE|APEX_040000                      wwv_mig_olb_t_tabpage_oltid_fk|apex_040000
                                                                 8               < WWV_MIG_OLB_OLT_TABPG_GRAPHICS|APEX_040000             wwv_mig_olb_olt_tpg_tp_id_fk|apex_040000
                                                                 9                 < WWV_MIG_OLB_T_TP_G_GRAPHICS|APEX_040000              wwv_mig_olb_t_tp_gg_g_id_fk|apex_040000
                                                                10                   < WWV_MIG_OLB_T_TP_GG_CPDTXT|APEX_040000             wwv_mig_olb_t_tp_gg_ct_g_id_fk|apex_040000
                                                                11                     < WWV_MIG_OLB_T_TP_GG_CT_TXTSGT|APEX_040000        wwv_mig_olb_ttpggctts_ctid_fk|apex_040000
                                                                10                   < WWV_MIG_OLB_T_TP_GG_GRAPHICS|APEX_040000           wwv_mig_olb_t_tp_ggg_g_id_fk|apex_040000
                                                                11                     < WWV_MIG_OLB_T_TP_GGG_CPDTXT|APEX_040000          wwv_mig_olb_ttp_ggg_ct_gid_fk|apex_040000
                                                                12                       < WWV_MIG_OLB_T_TP_GGG_CT_TXTSGT|APEX_040000     wwv_mig_olb_ttpgggctts_ctid_fk|apex_040000
                                                                11                     < WWV_MIG_OLB_T_TP_GGG_GRAPHICS|APEX_040000        wwv_mig_olb_t_tp_gggg_g_id_fk|apex_040000
                                                                12                       < WWV_MIG_OLB_T_TP_GGGG_CPDTXT|APEX_040000       wwv_mig_olb_ttpggggct_g_id_fk|apex_040000
                                                                13                         < WWV_MIG_OLB_T_TP_GGGG_CT_TXSGT|APEX_040000   wwv_mig_olb_ttpggggcts_ctid_fk|apex_040000
                                                                12                       < WWV_MIG_OLB_T_TP_GGGG_GRAPHICS|APEX_040000     wwv_mig_olb_ttpggggg_g_id_fk|apex_040000
                                                                13                         < WWV_MIG_OLB_T_TP_GGGGG_CPDTXT|APEX_040000    wwv_mig_olb_ttpgggggct_g_id_fk|apex_040000
                                                                14                           < WWV_MIG_OLB_T_TP_GGGGG_CT_TXST|APEX_040000 wwv_mig_olb_ttp5gcts_ct_id_fk|apex_040000
                                                                 7             < WWV_MIG_OLB_OLT_VISUALATTRBUTE|APEX_040000               wwv_mig_olb_olt_va_olt_id_fk|apex_040000
                                                                 7             < WWV_MIG_OLB_OLT_WINDOW|APEX_040000                       wwv_mig_olb_olt_wndow_oltid_fk|apex_040000
                                                                 6           < WWV_MIG_OLB_PROGRAMUNIT|APEX_040000                        wwv_mig_olb_pu_objlib_id_fk|apex_040000
                                                                 6           < WWV_MIG_OLB_PROPERTYCLASS|APEX_040000                      wwv_mig_olb_pc_objlib_id_fk|apex_040000
                                                                 6           < WWV_MIG_OLB_VISUALATTRIBUTE|APEX_040000                    wwv_mig_olb_va_objlib_id_fk|apex_040000
                                                                 6           < WWV_MIG_OLB_WINDOW|APEX_040000                             wwv_mig_olb_wndow_objlib_id_fk|apex_040000
                                                                 3     < WWV_MIG_PLSQL_LIBS|APEX_040000                                   wwv_mig_plls_project_id_fk|apex_040000
                                                                 3     < WWV_MIG_PROJECT_COMPONENTS|APEX_040000                           wwv_mig_proj_comp_fk|apex_040000
                                                                 3     < WWV_MIG_PROJECT_TRIGGERS|APEX_040000                             wwv_mig_proj_trig_fk|apex_040000
                                                                 3     < WWV_MIG_RPTS|APEX_040000                                         wwv_mig_rpts_project_id_fk|apex_040000
                                                                 4       < WWV_MIG_REPORT|APEX_040000                                     wwv_mig_rep_file_id_fk|apex_040000
                                                                 5         < WWV_MIG_RPT_DATA|APEX_040000                                 wwv_mig_repdata_id_fk|apex_040000
                                                                 6           < WWV_MIG_RPT_DATASRC|APEX_040000                            wwv_mig_repsrc_id_fk|apex_040000
                                                                 7             < WWV_MIG_RPT_DATASRC_GRP|APEX_040000                      wwv_mig_grp_id_fk|apex_040000
                                                                 8               < WWV_MIG_RPT_GRP_DATAITEM|APEX_040000                   wwv_mig_grp_dataitem_id_fk|apex_040000
                                                                 9                 < WWV_MIG_RPT_GRP_DATAITEM_DESC|APEX_040000            wwv_mig_grp_itemdesc_id_fk|apex_040000
                                                                 9                 < WWV_MIG_RPT_GRP_DATAITEM_PRIV|APEX_040000            wwv_mig_grp_itempriv_id_fk|apex_040000
                                                                 8               < WWV_MIG_RPT_GRP_FIELD|APEX_040000                      wwv_mig_grp_fld_id_fk|apex_040000
                                                                 8               < WWV_MIG_RPT_GRP_FILTER|APEX_040000                     wwv_mig_grp_fltr_id_fk|apex_040000
                                                                 8               < WWV_MIG_RPT_GRP_FORMULA|APEX_040000                    wwv_mig_grp_form_id_fk|apex_040000
                                                                 8               < WWV_MIG_RPT_GRP_ROWDELIM|APEX_040000                   wwv_mig_grp_row_id_fk|apex_040000
                                                                 8               < WWV_MIG_RPT_GRP_SUMMARY|APEX_040000                    wwv_mig_grp_sum_id_fk|apex_040000
                                                                 7             < WWV_MIG_RPT_DATASRC_SELECT|APEX_040000                   wwv_mig_select_id_fk|apex_040000
                                                                 6           < WWV_MIG_RPT_DATA_SUMMARY|APEX_040000                       wwv_mig_repsum_id_fk|apex_040000
                                                                 5         < WWV_MIG_RPT_REPORTPRIVATE|APEX_040000                        wwv_mig_rptpriv_id_fk|apex_040000
 WWV_FLOW_ADVISOR_CATEGORIES|APEX_040000          2       3      0 WWV_FLOW_ADVISOR_CATEGORIES|APEX_040000                                ROOT
                                                                 1 < WWV_FLOW_ADVISOR_CHECKS|APEX_040000                                  wwv_flow_adv_chk_cat_fk|apex_040000
                                                                 2   < WWV_FLOW_ADVISOR_CHECK_MSGS|APEX_040000                            wwv_flow_adv_chk_msg_check_fk|apex_040000
 WWV_FLOW_BUGS|APEX_040000                       13      11      0 WWV_FLOW_BUGS|APEX_040000                                              ROOT
                                                                 1 < WWV_FLOW_TEAMDEV_TAG_CLOUD|APEX_040000                               wwv_flow_teamdev_tc_b|apex_040000
                                                                 2   > WWV_FLOW_FEATURES|APEX_040000                                      wwv_flow_teamdev_tc_f|apex_040000
                                                                3     = WWV_FLOW_FEATURES|APEX_040000*                                   wwv_flow_features_par_feat_fk|apex_040000
                                                                3     < WWV_FLOW_FEATURE_HISTORY|APEX_040000                             wwv_flow_feature_hist_fk|apex_040000
                                                                 3     < WWV_FLOW_FEATURE_PROGRESS|APEX_040000                            wwv_flow_feature_prog_fk|apex_040000
                                                                 3     < WWV_FLOW_TEAM_FILES|APEX_040000                                  wwv_flow_team_files_fk1|apex_040000
                                                                 4       > WWV_FLOW_EVENTS|APEX_040000                                    wwv_flow_team_files_fk3|apex_040000
                                                                4       > WWV_FLOW_FEEDBACK|APEX_040000                                  wwv_flow_team_files_fk4|apex_040000
                                                                5         < WWV_FLOW_FEEDBACK_FOLLOWUP|APEX_040000                       wwv_flow_feedback_fup_fk|apex_040000
                                                                 5         < WWV_FLOW_TEAM_FILES|APEX_040000*                             wwv_flow_team_files_fk5|apex_040000
                                                                 4       > WWV_FLOW_TASKS|APEX_040000                                     wwv_flow_team_files_fk2|apex_040000
                                                                5         < WWV_FLOW_TASK_PROGRESS|APEX_040000                           wwv_flow_task_prog_fk|apex_040000
                                                                 5         < WWV_FLOW_TEAMDEV_TAG_CLOUD|APEX_040000*                      wwv_flow_teamdev_tc_t|apex_040000
 WWV_FLOW_DATA_LOAD_BAD_LOG|APEX_040000           1       2      0 WWV_FLOW_DATA_LOAD_BAD_LOG|APEX_040000                                 ROOT
                                                                 1 > WWV_FLOW_DATA_LOAD_UNLOAD|APEX_040000                                wwv_flow_data_load_bad_log_fk1|apex_040000
WWV_FLOW_DICTIONARY_VIEWS|APEX_040000            1       1      0 WWV_FLOW_DICTIONARY_VIEWS|APEX_040000                                  ROOT
                                                                1 = WWV_FLOW_DICTIONARY_VIEWS|APEX_040000*                               wwv_flow_dict_view_parent_fk|apex_040000
WWV_FLOW_FILE_OBJECTS$|FLOWS_FILES               5       6      0 WWV_FLOW_FILE_OBJECTS$|FLOWS_FILES                                     ROOT
                                                                1 < WWV_FLOW_IMPORT_EXPORT|APEX_040000                                   wwv_flow_import_export_fk|apex_040000
                                                                 1 < WWV_FLOW_SW_BINDS|APEX_040000                                        wwv_flow_sw_bind_fk|apex_040000
                                                                 1 < WWV_FLOW_SW_RESULTS|APEX_040000                                      wwv_flow_sw_result_fk|apex_040000
                                                                 2   < WWV_FLOW_SW_DETAIL_RESULTS|APEX_040000                             wwv_flow_sw_d_result_fk|apex_040000
                                                                 1 < WWV_FLOW_SW_STMTS|APEX_040000                                        wwv_flow_sw_stmts_fk|apex_040000
 WWV_FLOW_FLASH_MAP_FILES|APEX_040000             2       3      0 WWV_FLOW_FLASH_MAP_FILES|APEX_040000                                   ROOT
                                                                 1 > WWV_FLOW_FLASH_MAP_FOLDERS|APEX_040000                               wwv_flow_flash_map_files_fk|apex_040000
                                                                1 < WWV_FLOW_FLASH_MAP_REGIONS|APEX_040000                               wwv_flow_flash_map_reg_fk|apex_040000
 WWV_FLOW_FND_GROUP_USERS|APEX_040000             1       2      0 WWV_FLOW_FND_GROUP_USERS|APEX_040000                                   ROOT
                                                                 1 > WWV_FLOW_FND_USER_GROUPS|APEX_040000                                 wwv_flow_fnd_gu_int_g_fk|apex_040000
WWV_FLOW_HNT_ARGUMENT_INFO|APEX_040000           1       2      0 WWV_FLOW_HNT_ARGUMENT_INFO|APEX_040000                                 ROOT
                                                                1 > WWV_FLOW_HNT_PROCEDURE_INFO|APEX_040000                              wwv_flow_hnt_arg_info_proc_fk|apex_040000
WWV_FLOW_HNT_COLUMN_DICT|APEX_040000             1       2      0 WWV_FLOW_HNT_COLUMN_DICT|APEX_040000                                   ROOT
                                                                1 < WWV_FLOW_HNT_COL_DICT_SYN|APEX_040000                                wwv_flow_hnt_col_dict_syn_fk|apex_040000
 WWV_FLOW_HNT_COLUMN_INFO|APEX_040000             4       4      0 WWV_FLOW_HNT_COLUMN_INFO|APEX_040000                                   ROOT
                                                                 1 > WWV_FLOW_HNT_GROUPS|APEX_040000                                      wwv_flow_hnt_col_info_grp_fk|apex_040000
                                                                2   > WWV_FLOW_HNT_TABLE_INFO|APEX_040000                                wwv_flow_hnt_groups_tab_fk|apex_040000
                                                                3     < WWV_FLOW_HNT_COLUMN_INFO|APEX_040000*                            wwv_flow_hnt_col_info_tab_fk|apex_040000
                                                                 1 < WWV_FLOW_HNT_LOV_DATA|APEX_040000                                    wwv_flow_hnt_lov_data_col_fk|apex_040000
 WWV_FLOW_MAIL_ATTACHMENTS|APEX_040000            1       2      0 WWV_FLOW_MAIL_ATTACHMENTS|APEX_040000                                  ROOT
                                                                 1 > WWV_FLOW_MAIL_QUEUE|APEX_040000                                      wwv_flow_mail_attachments_fk1|apex_040000
WWV_FLOW_MODELS|APEX_040000                      4       4      0 WWV_FLOW_MODELS|APEX_040000                                            ROOT
                                                                1 < WWV_FLOW_MODEL_PAGES|APEX_040000                                     wwv_flow_model_pages_fk|apex_040000
                                                                 2   = WWV_FLOW_MODEL_PAGES|APEX_040000*                                  wwv_flow_model_pages_fk2|apex_040000
                                                                 2   < WWV_FLOW_MODEL_PAGE_REGIONS|APEX_040000                            wwv_flow_mpr_fk|apex_040000
                                                                 3     < WWV_FLOW_MODEL_PAGE_COLS|APEX_040000                             wwv_flow_model_page_cols_fk|apex_040000
 WWV_FLOW_QB_SAVED_COND|APEX_040000               3       4      0 WWV_FLOW_QB_SAVED_COND|APEX_040000                                     ROOT
                                                                 1 > WWV_FLOW_QB_SAVED_QUERY|APEX_040000                                  sys_c005031|apex_040000
                                                                2   < WWV_FLOW_QB_SAVED_JOIN|APEX_040000                                 sys_c005038|apex_040000
                                                                 2   < WWV_FLOW_QB_SAVED_TABS|APEX_040000                                 sys_c005045|apex_040000
 WWV_FLOW_RESTRICTED_SCHEMAS|APEX_040000          1       2      0 WWV_FLOW_RESTRICTED_SCHEMAS|APEX_040000                                ROOT
                                                                 1 < WWV_FLOW_RSCHEMA_EXCEPTIONS|APEX_040000                              wwv_flow_rschema_exceptions_fk|apex_040000
 WWV_MIG_FRM_OLB_XMLTAGTABLEMAP|APEX_040000       1       1      0 WWV_MIG_FRM_OLB_XMLTAGTABLEMAP|APEX_040000                             ROOT
                                                                 1 = WWV_MIG_FRM_OLB_XMLTAGTABLEMAP|APEX_040000*                          wwv_mig_olb_xmltagtablemap_fk|apex_040000
 WWV_MIG_FRM_XMLTAGTABLEMAP|APEX_040000           1       1      0 WWV_MIG_FRM_XMLTAGTABLEMAP|APEX_040000                                 ROOT
                                                                 1 = WWV_MIG_FRM_XMLTAGTABLEMAP|APEX_040000*                              wwv_mig_frm_xmltagtablemap_fk|apex_040000
 WWV_MIG_MENU_XMLTAGTABLEMAP|APEX_040000          1       1      0 WWV_MIG_MENU_XMLTAGTABLEMAP|APEX_040000                                ROOT
                                                                 1 = WWV_MIG_MENU_XMLTAGTABLEMAP|APEX_040000*                             wwv_mig_mnu_xmltagtablemap_fk|apex_040000
 WWV_MIG_RPT_XMLTAGTABLEMAP|APEX_040000           1       1      0 WWV_MIG_RPT_XMLTAGTABLEMAP|APEX_040000                                 ROOT
                                                                 1 = WWV_MIG_RPT_XMLTAGTABLEMAP|APEX_040000*                              wwv_mig_rpt_xmltagtablemap_fk|apex_040000
 WWV_PURGE_DATAFILES|APEX_040000                  4       5      0 WWV_PURGE_DATAFILES|APEX_040000                                        ROOT
                                                                 1 > WWV_PURGE_WORKSPACES|APEX_040000                                     wwv_purge_datafiles_fk1|apex_040000
                                                                2   < WWV_PURGE_EMAILS|APEX_040000                                       wwv_purge_emails_fk1|apex_040000
                                                                 3     < WWV_PURGE_WORKSPACE_RESPONSES|APEX_040000                        wwv_purge_workspace_resp_fk1|apex_040000
                                                                 2   < WWV_PURGE_SCHEMAS|APEX_040000                                      wwv_purge_schemas_fk1|apex_040000
 
 359 rows selected.
 
 Elapsed: 00:00:01.81
 Network summary 1 - by network
 
 Network                                     #Links  #Nodes    Max Lev
 ------------------------------------------ ------- ------- ----------
 WWV_FLOW_HNT_COLUMN_DICT|APEX_040000             2       2          1
 WWV_MIG_RPT_XMLTAGTABLEMAP|APEX_040000           2       1          1
 WWV_MIG_MENU_XMLTAGTABLEMAP|APEX_040000          2       1          1
 WWV_MIG_FRM_XMLTAGTABLEMAP|APEX_040000           2       1          1
 WWV_MIG_FRM_OLB_XMLTAGTABLEMAP|APEX_040000       2       1          1
 WWV_FLOW_RESTRICTED_SCHEMAS|APEX_040000          2       2          1
 WWV_FLOW_MAIL_ATTACHMENTS|APEX_040000            2       2          1
 WWV_FLOW_HNT_ARGUMENT_INFO|APEX_040000           2       2          1
 WWV_FLOW_FND_GROUP_USERS|APEX_040000             2       2          1
 WWV_FLOW_DICTIONARY_VIEWS|APEX_040000            2       1          1
 WWV_FLOW_DATA_LOAD_BAD_LOG|APEX_040000           2       2          1
 WWV_FLOW_FLASH_MAP_FILES|APEX_040000             3       3          1
 WWV_FLOW_ADVISOR_CATEGORIES|APEX_040000          3       3          2
 WWV_FLOW_QB_SAVED_COND|APEX_040000               4       4          2
 WWV_PURGE_DATAFILES|APEX_040000                  5       5          3
 APEX$_WS_FILES|APEX_040000                       5       5          2
 WWV_FLOW_MODELS|APEX_040000                      5       4          3
 WWV_FLOW_HNT_COLUMN_INFO|APEX_040000             5       4          3
 WWV_FLOW_FILE_OBJECTS$|FLOWS_FILES               6       6          2
 WWV_FLOW_BUGS|APEX_040000                       14      11          5
 WWV_FLOWS|APEX_040000                          287     236         14
 
 21 rows selected.
 
 Elapsed: 00:00:00.01
 Network summary 2 - grouped by numbers of nodes
 
  #Nodes  #Networks
 ------- ----------
       1          5
       2          6
       3          2
       4          3
       5          2
       6          1
      11          1
     236          1
 
 8 rows selected.
 
 Elapsed: 00:00:00.01
 

Schema Metadata Analysis Report

This is too long to embed so is included as an attachment.
L_APEX_040000






PL/SQL Pipelined Function for Network Analysis

In March 2013 I wrote this SQL for Network Grouping, describing some options in SQL for solving a general class of network problems, while noting that these would have serious performance issues, and that the most efficient approach would involve PL/SQL. I had already published a Scribd article, in June 20101, on using PL/SQL to traverse a single connected network, An Oracle Network Traversal PL SQL Program, but had not at that time extended the approach to cover all networks.

Last weekend, I posted an article, SQL for Shortest Path Problems 2: A Branch and Bound Approach, that included results from my more general package for network analysis, so I thought it was time to post an article on that package, and this is it.

PL/SQL Package
Code

CREATE OR REPLACE PACKAGE Net_Pipe AS
/**************************************************************************************************

Author:         Brendan Furey
Date:           10 May 2015
Description:    Brendan's network analysis PL/SQL package, (http://aprogrammerwrites.eu/?p=1426).
                Pipelined function returns a record for each link in all connected subnetworks 
		specified by the view links_v. The root_node_id field identifies the subnetwork that
		a link belongs to. Use SQL to list the network in detail, or at any desired level of
		aggregation. Here is an example call:

SQL
===
SELECT root_node_id             "Network",
       Count (DISTINCT link_id) OVER (PARTITION BY root_node_id) - 1 "#Links",
       Count (DISTINCT node_id) OVER (PARTITION BY root_node_id) "#Nodes",
       node_level "Lev",
       LPad (dirn || ' ', Least (2*node_level, 60), ' ') || node_id || loop_flag "Node",
       link_id                  "Link"
  FROM TABLE (Net_Pipe.All_Nets)
 ORDER BY line_no

Output sample for an Oracle v12.1 foreign key network
=====================================================
Network       #Links  #Nodes Lev  Node                                     Link
------------  ------  ------ ---  ---------------------------------------  -------------------------------
COUNTRIES|HR      21      16   0  COUNTRIES|HR                             ROOT
                               1  < LOCATIONS|HR                           loc_c_id_fk|hr
                               2    < DEPARTMENTS|HR                       dept_loc_fk|hr                                3      > EMPLOYEES|HR                       dept_mgr_fk|hr
                               4        < CUSTOMERS|OE                     customers_account_manager_fk|oe
                               5          < ORDERS|OE                      orders_customer_id_fk|oe                                6            > EMPLOYEES|HR*                orders_sales_rep_fk|oe
                               6            < ORDER_ITEMS|OE               order_items_order_id_fk|oe                                7              > PRODUCT_INFORMATION|OE     order_items_product_id_fk|oe
                               8                < INVENTORIES|OE           inventories_product_id_fk|oe                                9                  > WAREHOUSES|OE          inventories_warehouses_fk|oe
                              10                    > LOCATIONS|HR*        warehouses_location_fk|oe
                               8                < ONLINE_MEDIA|PM          loc_c_id_fk|pm
                               8                < PRINT_MEDIA|PM           printmedia_fk|pm
                               8                < PRODUCT_DESCRIPTIONS|OE  pd_product_id_fk|oe                                4        > DEPARTMENTS|HR*                  emp_dept_fk|hr
                               4        = EMPLOYEES|HR*                    emp_manager_fk|hr
                               4        > JOBS|HR                          emp_job_fk|hr
                               5          < JOB_HISTORY|HR                 jhist_job_fk|hr                                6            > DEPARTMENTS|HR*              jhist_dept_fk|hr
                               6            > EMPLOYEES|HR*                jhist_emp_fk|hr
                               1  > REGIONS|HR                             countr_reg_fk|hr

1 of 69 subnetworks is shown above
***************************************************************************************************/

TYPE net_rec_type IS RECORD (
		root_node_id				VARCHAR2(100),
		dirn					VARCHAR2(1),
		node_id					VARCHAR2(100),
		link_id					VARCHAR2(100),
                node_level                              NUMBER,
		loop_flag				VARCHAR2(1),
		line_no 				NUMBER
);
TYPE net_tab_type IS TABLE OF net_rec_type;

FUNCTION All_Nets RETURN net_tab_type PIPELINED;

END Net_Pipe;
/
SHO ERR
CREATE OR REPLACE PACKAGE BODY Net_Pipe AS
/**************************************************************************************************

Author:         Brendan Furey
Date:           10 May 2015
Description:    Brendan's network analysis PL/SQL package, (http://aprogrammerwrites.eu/?p=1426).
                Pipelined function returns a record for each link in all connected subnetworks 
		specified by the view links_v. The root_node_id field identifies the subnetwork that
		a link belongs to. Use SQL to list the network in detail, or at any desired level of
		aggregation. See spec for an example call.

***************************************************************************************************/

c_root_link_id          CONSTANT VARCHAR2(100) := 'ROOT';
c_loop_flag             CONSTANT VARCHAR2(1) := '*';
c_dirn_fr               CONSTANT VARCHAR2(1) := '<'; c_dirn_to               CONSTANT VARCHAR2(1) := '>';
c_dirn_sj               CONSTANT VARCHAR2(1) := '=';

g_root_node_id                   VARCHAR2(100);
g_line_no                        NUMBER;

PROCEDURE Write_Log (p_line VARCHAR2) IS
BEGIN

  DBMS_Output.Put_Line (p_line);

END Write_Log;

FUNCTION All_Nets RETURN net_tab_type PIPELINED IS
  g_net_tab				net_tab_type;
  TYPE id_hash_type IS                  TABLE OF PLS_INTEGER INDEX BY VARCHAR2(61);
  g_node_hash                           id_hash_type;
  g_link_hash                           id_hash_type;

  l_is_loop                             BOOLEAN;

  PROCEDURE Init_Net IS
  BEGIN

    g_net_tab := net_tab_type ();
    g_link_hash.DELETE;

  END Init_net;

  PROCEDURE Add_Net (p_root_node_id     VARCHAR2,
                     p_dirn             VARCHAR2,
                     p_node_id          VARCHAR2,
                     p_link_id          VARCHAR2,
                     p_node_level       PLS_INTEGER,
                     x_is_loop          OUT BOOLEAN) IS

    l_net_rec				net_rec_type;

  BEGIN

--    IF p_link_id != c_root_link_id AND g_link_hash.EXISTS (p_link_id) THEN
    IF g_link_hash.EXISTS (p_link_id) THEN
      x_is_loop := TRUE;
      RETURN;
    ELSE
      g_link_hash (p_link_id) := 1;
    END IF;

    g_line_no                   := g_line_no + 1;
    l_net_rec.line_no           := g_line_no;
    l_net_rec.root_node_id      := p_root_node_id;
    l_net_rec.dirn              := p_dirn;
    l_net_rec.node_id           := p_node_id;
    l_net_rec.link_id           := p_link_id;
    l_net_rec.node_level        := p_node_level;

    x_is_loop := g_node_hash.EXISTS (p_node_id);
    IF x_is_loop THEN

      l_net_rec.loop_flag := c_loop_flag;

    ELSE

      g_node_hash (p_node_id) := 1;

    END IF;
    g_net_tab.EXTEND;
    g_net_tab (g_net_tab.COUNT)  := l_net_rec;

  END Add_Net;

  PROCEDURE Expand_Node (p_node_id VARCHAR2, p_link_id_prior VARCHAR2, p_node_level PLS_INTEGER) IS

    CURSOR lin_csr IS
    SELECT link_id, node_id_fr node_id, c_dirn_fr dirn
      FROM links_v
     WHERE node_id_to   = p_node_id
       AND node_id_to  != node_id_fr
       AND link_id     != p_link_id_prior
     UNION
    SELECT link_id, node_id_to, c_dirn_to
      FROM links_v
     WHERE node_id_fr   = p_node_id
       AND node_id_to  != node_id_fr
       AND link_id     != p_link_id_prior
     UNION
    SELECT link_id, node_id_to, c_dirn_sj
      FROM links_v
     WHERE node_id_fr   = p_node_id
       AND node_id_to   = node_id_fr
       AND link_id     != p_link_id_prior
     ORDER BY 2, 1;
    TYPE lin_tab_type IS TABLE OF lin_csr%ROWTYPE;
    l_lin_tab		lin_tab_type;

  BEGIN

    OPEN lin_csr;
    FETCH lin_csr BULK COLLECT -- avoids too many open cursors
     INTO l_lin_tab;
    CLOSE lin_csr;

    FOR i IN 1..l_lin_tab.COUNT LOOP

      Add_Net (g_root_node_id, l_lin_tab(i).dirn, l_lin_tab(i).node_id, l_lin_tab(i).link_id, p_node_level + 1, l_is_loop);
      IF NOT l_is_loop THEN

        Expand_Node (l_lin_tab(i).node_id, l_lin_tab(i).link_id, p_node_level + 1);

      END IF;

    END LOOP;

  END Expand_Node;

BEGIN

  g_line_no := 0;
  FOR r_nod IN (
          SELECT node_id_fr root_node_id
            FROM links_v
           UNION
          SELECT node_id_to
            FROM links_v) LOOP

    IF g_node_hash.EXISTS (r_nod.root_node_id) THEN CONTINUE; END IF;

    g_root_node_id := r_nod.root_node_id;
    Init_Net;
    Add_Net (g_root_node_id, ' ', g_root_node_id, c_root_link_id, 0, l_is_loop);

    Expand_Node (g_root_node_id, c_root_link_id, 0);

    FOR i IN 1..g_net_tab.COUNT LOOP

      PIPE ROW (g_net_tab(i));

    END LOOP;

  END LOOP;

END All_Nets;

END Net_Pipe;
/
SHO ERR

Array Structure Diagram

Networks - PLSQL, v1.0 - Arrays

Neighbour SQL Structure Diagram

Networks - PLSQL, v1.0 - Neighbour

Pseudocode - All_Nets

  • Loop over all nodes in the input links view
    • If the node has been visited continue to the next one
    • Initialise a new subnetwork with root node
    • Delete link hash array and output array
    • Call recursive procedure. Expand_Node, to expand the whole subnetwork connected to the current root node
    • Loop over the output array
      • Pipe the record out
    • End loop
  • End Loop

Pseudocode - Expand_Node

  • Fetch all neighbours of the input node into an array, except the node from the prior link
  • Loop over neighbours array
    • Call Add_Net to possibly add new node to the output array
      • If link has been visited then
        • Return with link loop flag set
      • Else
        • Set link visited hash
      • End if
      • Set the fields of the new output record
      • If node has been visited then
        • Set the loop flag in the output record
      • Else
        • Set node visited hash
      • End if
      • Add new record to the output array
    • End call
    • If link was not a loop then
      • Call Expand_Node recursively
    • End if
  • End loop

Notes on Code

  • The arrays are a limitation on scalability
  • The size of the arrays are determined by the largest subnetwork, except for the nodes hash array which will hold all nodes at the end
  • Temporary tables could be used in place of the arrays if necessary

SQL Calling Code

PROMPT Network detail
SELECT root_node_id             "Network",
       Count (DISTINCT link_id) OVER (PARTITION BY root_node_id) - 1 "#Links",
       Count (DISTINCT node_id) OVER (PARTITION BY root_node_id) "#Nodes",
       node_level "Lev",
       LPad (dirn || ' ', Least (2*node_level, 60), ' ') || node_id || loop_flag "Node",
       link_id                  "Link"
  FROM TABLE (Net_Pipe.All_Nets)
 ORDER BY line_no
/
PROMPT Network summary 1 - by network
SELECT root_node_id             "Network",
       Count (DISTINCT link_id) "#Links",
       Count (DISTINCT node_id) "#Nodes",
       Max (node_level) "Max Lev"
  FROM TABLE (Net_Pipe.All_Nets)
 GROUP BY root_node_id
 ORDER BY 2
/
PROMPT Network summary 2 - grouped by numbers of nodes
WITH network_counts AS (
SELECT root_node_id,
       Count (DISTINCT node_id) n_nodes
  FROM TABLE (Net_Pipe.All_Nets)
 GROUP BY root_node_id
)
SELECT n_nodes "#Nodes",
       COUNT(*) "#Networks"
  FROM network_counts
 GROUP BY n_nodes
 ORDER BY 1
/

Test Network 1: Oracle v12.1 Foreign Key Network

This network comes from Oracles foreign key constraints as specified in it's ALL_CONSTRAINTS view. I copied the constraints of type foreign key from the view into my own table, and created primary key and indexes that I deemed appropriate, and gathered statistics on the table.

Output for Foreign Key Network
The detailed output with 815 records took 1.5 seconds, while the two summary outputs took a fraction of a second each.

View links_v based on fk_link

View dropped.


View created.

Network detail

Network                                     #Links  #Nodes    Lev Node                                                                   Link
------------------------------------------ ------- ------- ------ ---------------------------------------------------------------------- ------------------------------------------
APEX$ARCHIVE_CONTENTS|APEX_040200                1       2      0 APEX$ARCHIVE_CONTENTS|APEX_040200                                      ROOT
                                                                1 > APEX$ARCHIVE_HEADER|APEX_040200                                      sys_c008573|apex_040200
APEX$_WS_FILES|APEX_040200                       4       5      0 APEX$_WS_FILES|APEX_040200                                             ROOT
                                                                1 > APEX$_WS_ROWS|APEX_040200                                            apex$_ws_files_fk|apex_040200
                                                                2   < APEX$_WS_LINKS|APEX_040200                                         apex$_ws_links_fk|apex_040200
                                                                2   < APEX$_WS_NOTES|APEX_040200                                         apex$_ws_notes_fk|apex_040200
                                                                2   < APEX$_WS_TAGS|APEX_040200                                          apex$_ws_tags_fk|apex_040200
AQ$_INTERNET_AGENTS|SYSTEM                       1       2      0 AQ$_INTERNET_AGENTS|SYSTEM                                             ROOT
                                                                1 < AQ$_INTERNET_AGENT_PRIVS|SYSTEM                                      agent_must_be_created|system ARCS|TEST                                        2       2      0 ARCS|TEST                                                              ROOT                                                                 1 > NODES|TEST                                                           arcs_fk1|test
                                                                2   < ARCS|TEST*                                                         arcs_fk2|test ATTRIBUTE_TRANSFORMATIONS$|SYS                   1       2      0 ATTRIBUTE_TRANSFORMATIONS$|SYS                                         ROOT                                                                 1 > TRANSFORMATIONS$|SYS                                                 attribute_transformations_fk|sys
BENCH_RUNS|BENCH                                 9       9      0 BENCH_RUNS|BENCH                                                       ROOT
                                                                1 < BENCH_RUN_DATA_POINTS|BENCH                                          rdp_rcn_fk|bench
                                                                2   < BENCH_RUN_STATISTICS|BENCH                                         brs_rdp_fk|bench
                                                                3     < BENCH_RUN_V$SQL_PLAN_STATS_ALL|BENCH                             rps_rst_fk|bench
                                                                3     < BENCH_RUN_V$STATS|BENCH                                          rvs_rst_fk|bench                                                                 3     > QUERIES|BENCH                                                    brs_qry_fk|bench
                                                                4       > QUERY_GROUPS|BENCH                                             qry_qgp_fk|bench
                                                                5         < BENCH_RUNS|BENCH*                                            brn_qgp_fk|bench                                                                 1 > LOG_HEADERS|BRENDAN                                                  brn_log_fk|bench
                                                                2   < LOG_LINES|BRENDAN                                                  lin_hdr_fk|brendan
BSLN_BASELINES|DBSNMP                            2       3      0 BSLN_BASELINES|DBSNMP                                                  ROOT
                                                                1 < BSLN_STATISTICS|DBSNMP                                               bsln_statistics_fk|dbsnmp
                                                                1 < BSLN_THRESHOLD_PARAMS|DBSNMP                                         bsln_thresholds_fk|dbsnmp
CHANNELS|SH                                     10       8      0 CHANNELS|SH                                                            ROOT
                                                                1 < COSTS|SH                                                             costs_channel_fk|sh                                                                 2   > PRODUCTS|SH                                                        costs_product_fk|sh
                                                                3     < SALES|SH                                                         sales_product_fk|sh                                                                 4       > CHANNELS|SH*                                                   sales_channel_fk|sh
                                                                4       > CUSTOMERS|SH                                                   sales_customer_fk|sh
                                                                5         > COUNTRIES|SH                                                 customers_country_fk|sh
                                                                4       > PROMOTIONS|SH                                                  sales_promo_fk|sh
                                                                5         < COSTS|SH*                                                    costs_promo_fk|sh                                                                 4       > TIMES|SH                                                       sales_time_fk|sh
                                                                5         < COSTS|SH*                                                    costs_time_fk|sh CLOUD|GSMADMIN_INTERNAL                          1       2      0 CLOUD|GSMADMIN_INTERNAL                                                ROOT                                                                 1 > GSM|GSMADMIN_INTERNAL                                                sys_c004716|gsmadmin_internal
CODE$|DVSYS                                     25      20      0 CODE$|DVSYS                                                            ROOT
                                                                1 < COMMAND_RULE$|DVSYS                                                  command_rule$_fk1|dvsys                                                                 2   > RULE_SET$|DVSYS                                                    command_rule$_fk|dvsys
                                                                3     < FACTOR$|DVSYS                                                    factor$_fk1|dvsys
                                                                4       < FACTOR_LINK$|DVSYS                                             factor_link$_fk1|dvsys                                                                 5         > FACTOR$|DVSYS*                                               factor_link$_fk|dvsys
                                                                5         < IDENTITY_MAP$|DVSYS                                          identity_map$_fk1|dvsys                                                                 6           > CODE$|DVSYS*                                               identity_map$_fk2|dvsys
                                                                6           > IDENTITY$|DVSYS                                            identity_map$_fk|dvsys
                                                                7             > FACTOR$|DVSYS*                                           identity$_fk|dvsys
                                                                7             < POLICY_LABEL$|DVSYS                                      identity_label$_fk|dvsys
                                                                4       < FACTOR_SCOPE$|DVSYS                                            factor_scope$_fk|dvsys                                                                 4       > FACTOR_TYPE$|DVSYS                                             factor$_fk|dvsys
                                                                4       < MAC_POLICY_FACTOR$|DVSYS                                       mac_policy_factor$_fk|dvsys                                                                 5         > MAC_POLICY$|DVSYS                                            mac_policy_factor$_fk1|dvsys
                                                                6           > CODE$|DVSYS*                                               mac_policy$_fk1|dvsys
                                                                3     < MONITOR_RULE$|DVSYS                                              monitor_rule$_fk1|dvsys
                                                                3     < REALM_AUTH$|DVSYS                                                realm_auth$_fk1|dvsys                                                                 4       > REALM$|DVSYS                                                   realm_auth$_fk|dvsys
                                                                5         < REALM_COMMAND_RULE$|DVSYS                                    realm_command_rule$_fk2|dvsys                                                                 6           > CODE$|DVSYS*                                               realm_command_rule$_fk1|dvsys
                                                                6           > RULE_SET$|DVSYS*                                           realm_command_rule$_fk|dvsys
                                                                5         < REALM_OBJECT$|DVSYS                                          realm_object$_fk|dvsys
                                                                3     < ROLE$|DVSYS                                                      role$_fk|dvsys
                                                                3     < RULE_SET_RULE$|DVSYS                                             rule_set_rule$_fk|dvsys                                                                 4       > RULE$|DVSYS                                                    rule_set_rule$_fk1|dvsys
COUNTRIES|HR                                    21      16      0 COUNTRIES|HR                                                           ROOT
                                                                1 < LOCATIONS|HR                                                         loc_c_id_fk|hr
                                                                2   < DEPARTMENTS|HR                                                     dept_loc_fk|hr                                                                 3     > EMPLOYEES|HR                                                     dept_mgr_fk|hr
                                                                4       < CUSTOMERS|OE                                                   customers_account_manager_fk|oe
                                                                5         < ORDERS|OE                                                    orders_customer_id_fk|oe                                                                 6           > EMPLOYEES|HR*                                              orders_sales_rep_fk|oe
                                                                6           < ORDER_ITEMS|OE                                             order_items_order_id_fk|oe                                                                 7             > PRODUCT_INFORMATION|OE                                   order_items_product_id_fk|oe
                                                                8               < INVENTORIES|OE                                         inventories_product_id_fk|oe                                                                 9                 > WAREHOUSES|OE                                        inventories_warehouses_fk|oe
                                                               10                   > LOCATIONS|HR*                                      warehouses_location_fk|oe
                                                                8               < ONLINE_MEDIA|PM                                        loc_c_id_fk|pm
                                                                8               < PRINT_MEDIA|PM                                         printmedia_fk|pm
                                                                8               < PRODUCT_DESCRIPTIONS|OE                                pd_product_id_fk|oe                                                                 4       > DEPARTMENTS|HR*                                                emp_dept_fk|hr
                                                                4       = EMPLOYEES|HR*                                                  emp_manager_fk|hr
                                                                4       > JOBS|HR                                                        emp_job_fk|hr
                                                                5         < JOB_HISTORY|HR                                               jhist_job_fk|hr                                                                 6           > DEPARTMENTS|HR*                                            jhist_dept_fk|hr
                                                                6           > EMPLOYEES|HR*                                              jhist_emp_fk|hr
                                                                1 > REGIONS|HR                                                           countr_reg_fk|hr
CSW_DOMAININFO$|MDSYS                            1       2      0 CSW_DOMAININFO$|MDSYS                                                  ROOT
                                                                1 > CSW_RECORD_TYPES$|MDSYS                                              sys_c006217|mdsys
DAM_CONFIG_PARAM$|SYS                            1       2      0 DAM_CONFIG_PARAM$|SYS                                                  ROOT
                                                                1 > DAM_PARAM_TAB$|SYS                                                   dam_config_param_fk1|sys
DATABASE_POOL_ADMIN|GSMADMIN_INTERNAL            6       5      0 DATABASE_POOL_ADMIN|GSMADMIN_INTERNAL                                  ROOT
                                                                1 > DATABASE_POOL|GSMADMIN_INTERNAL                                      sys_c004723|gsmadmin_internal
                                                                2   < DATABASE|GSMADMIN_INTERNAL                                         sys_c004731|gsmadmin_internal
                                                                3     < SERVICE_PREFERRED_AVAILABLE|GSMADMIN_INTERNAL                    sys_c004739|gsmadmin_internal                                                                 4       > DATABASE_POOL|GSMADMIN_INTERNAL*                               sys_c004738|gsmadmin_internal
                                                                4       > SERVICE|GSMADMIN_INTERNAL                                      sys_c004740|gsmadmin_internal
                                                                5         > DATABASE_POOL|GSMADMIN_INTERNAL*                             sys_c004736|gsmadmin_internal
DBFS$_MOUNTS|SYS                                 1       2      0 DBFS$_MOUNTS|SYS                                                       ROOT
                                                                1 > DBFS$_STORES|SYS                                                     sys_c003936|sys
DBFS_SFS$_FSTP|SYS                               1       2      0 DBFS_SFS$_FSTP|SYS                                                     ROOT
                                                                1 > DBFS_SFS$_FST|SYS                                                    sys_c004004|sys
DBFS_SFS$_FS|SYS                                 3       4      0 DBFS_SFS$_FS|SYS                                                       ROOT
                                                                1 > DBFS_SFS$_VOL|SYS                                                    sys_c003978|sys
                                                                2   < DBFS_SFS$_SNAP|SYS                                                 sys_c003970|sys                                                                 2   > DBFS_SFS$_TAB|SYS                                                  sys_c003961|sys
DBMSHP_FUNCTION_INFO|BENCH                       3       3      0 DBMSHP_FUNCTION_INFO|BENCH                                             ROOT
                                                                1 < DBMSHP_PARENT_CHILD_INFO|BENCH                                       sys_c0010218|bench                                                                 2   > DBMSHP_FUNCTION_INFO|BENCH*                                        sys_c0010219|bench
                                                                1 > DBMSHP_RUNS|BENCH                                                    sys_c0010217|bench
DBMS_PARALLEL_EXECUTE_CHUNKS$|SYS                1       2      0 DBMS_PARALLEL_EXECUTE_CHUNKS$|SYS                                      ROOT
                                                                1 > DBMS_PARALLEL_EXECUTE_TASK$|SYS                                      fk_dbms_parallel_execute_1|sys
DEF$_CALLDEST|SYSTEM                            14      14      0 DEF$_CALLDEST|SYSTEM                                                   ROOT
                                                                1 > DEF$_DESTINATION|SYSTEM                                              def$_call_destination|system
                                                                2   < REPCAT$_REPSCHEMA|SYSTEM                                           repcat$_repschema_dest|system                                                                 3     > REPCAT$_REPCAT|SYSTEM                                            repcat$_repschema_prnt|system
                                                                4       < REPCAT$_FLAVORS|SYSTEM                                         repcat$_flavors_fk1|system
                                                                4       < REPCAT$_FLAVOR_OBJECTS|SYSTEM                                  repcat$_flavor_objects_fk1|system
                                                                4       < REPCAT$_REPGROUP_PRIVS|SYSTEM                                  repcat$_repgroup_privs_fk|system
                                                                4       < REPCAT$_REPOBJECT|SYSTEM                                       repcat$_repobject_prnt|system
                                                                5         < REPCAT$_GENERATED|SYSTEM                                     repcat$_repgen_prnt2|system                                                                 6           > REPCAT$_REPOBJECT|SYSTEM*                                  repcat$_repgen_prnt|system
                                                                5         < REPCAT$_KEY_COLUMNS|SYSTEM                                   repcat$_key_columns_prnt|system
                                                                5         < REPCAT$_REPCOLUMN|SYSTEM                                     repcat$_repcolumn_fk|system
                                                                5         < REPCAT$_REPPROP|SYSTEM                                       repcat$_repprop_prnt|system
                                                                4       < REPCAT$_SITES_NEW|SYSTEM                                       repcat$_sites_new_fk2|system                                                                 5         > REPCAT$_EXTENSION|SYSTEM                                     repcat$_sites_new_fk1|system
DEPT|SCOTT                                       1       2      0 DEPT|SCOTT                                                             ROOT
                                                                1 < EMP|SCOTT                                                            fk_deptno|scott DR$THS_BT|CTXSYS                                 4       4      0 DR$THS_BT|CTXSYS                                                       ROOT                                                                 1 > DR$THS_PHRASE|CTXSYS                                                 sys_c005023|ctxsys
                                                                2   < DR$THS_BT|CTXSYS*                                                  sys_c005024|ctxsys
                                                                2   < DR$THS_FPHRASE|CTXSYS                                              sys_c005021|ctxsys                                                                 2   > DR$THS|CTXSYS                                                      sys_c005017|ctxsys
FLIGHTS|TEST                                     1       2      0 FLIGHTS|TEST                                                           ROOT
                                                                1 > SECTORS|TEST                                                         fli_sec_fk|test
HS$_BASE_CAPS|SYS                               11      10      0 HS$_BASE_CAPS|SYS                                                      ROOT
                                                                1 < HS$_CLASS_CAPS|SYS                                                   hs$_class_caps_fk2|sys                                                                 2   > HS$_FDS_CLASS|SYS                                                  hs$_class_caps_fk1|sys
                                                                3     < HS$_CLASS_DD|SYS                                                 hs$_class_dd_fk1|sys                                                                 4       > HS$_BASE_DD|SYS                                                hs$_class_dd_fk2|sys
                                                                5         < HS$_INST_DD|SYS                                              hs$_inst_dd_fk2|sys                                                                 6           > HS$_FDS_INST|SYS                                           hs$_inst_dd_fk1|sys
                                                                7             > HS$_FDS_CLASS|SYS*                                       hs$_fds_inst_fk1|sys
                                                                7             < HS$_INST_CAPS|SYS                                        hs$_inst_caps_fk1|sys                                                                 8               > HS$_BASE_CAPS|SYS*                                     hs$_inst_caps_fk2|sys
                                                                7             < HS$_INST_INIT|SYS                                        hs$_inst_init_fk1|sys
                                                                3     < HS$_CLASS_INIT|SYS                                               hs$_class_init_fk1|sys HS$_PARALLEL_HISTOGRAM_DATA|SYS                  3       4      0 HS$_PARALLEL_HISTOGRAM_DATA|SYS                                        ROOT                                                                 1 > HS$_PARALLEL_METADATA|SYS                                            hs_parallel_histogram_data_fk|sys
                                                                2   < HS$_PARALLEL_PARTITION_DATA|SYS                                    hs_parallel_partition_data_fk|sys
                                                                2   < HS$_PARALLEL_SAMPLE_DATA|SYS                                       hs_parallel_sample_data_fk|sys
MVIEW$_ADV_AJG|SYSTEM                           14      13      0 MVIEW$_ADV_AJG|SYSTEM                                                  ROOT
                                                                1 < MVIEW$_ADV_FJG|SYSTEM                                                mview$_adv_fjg_fk|system
                                                                2   < MVIEW$_ADV_GC|SYSTEM                                               mview$_adv_gc_fk|system                                                                 1 > MVIEW$_ADV_LOG|SYSTEM                                                mview$_adv_ajg_fk|system
                                                                2   < MVIEW$_ADV_CLIQUE|SYSTEM                                           mview$_adv_clique_fk|system
                                                                2   < MVIEW$_ADV_ELIGIBLE|SYSTEM                                         mview$_adv_eligible_fk|system
                                                                2   < MVIEW$_ADV_EXCEPTIONS|SYSTEM                                       mview$_adv_exception_fk|system
                                                                2   < MVIEW$_ADV_FILTERINSTANCE|SYSTEM                                   mview$_adv_filterinstance_fk|system
                                                                2   < MVIEW$_ADV_INFO|SYSTEM                                             mview$_adv_info_fk|system
                                                                2   < MVIEW$_ADV_JOURNAL|SYSTEM                                          mview$_adv_journal_fk|system
                                                                2   < MVIEW$_ADV_LEVEL|SYSTEM                                            mview$_adv_level_fk|system
                                                                3     < MVIEW$_ADV_ROLLUP|SYSTEM                                         mview$_adv_rollup_cfk|system                                                                 4       > MVIEW$_ADV_LEVEL|SYSTEM*                                       mview$_adv_rollup_pfk|system
                                                                4       > MVIEW$_ADV_LOG|SYSTEM*                                         mview$_adv_rollup_fk|system
                                                                2   < MVIEW$_ADV_OUTPUT|SYSTEM                                           mview$_adv_output_fk|system MVIEW$_ADV_BASETABLE|SYSTEM                      1       2      0 MVIEW$_ADV_BASETABLE|SYSTEM                                            ROOT                                                                 1 > MVIEW$_ADV_WORKLOAD|SYSTEM                                           mview$_adv_basetable_fk|system
OGIS_GEOMETRY_COLUMNS|MDSYS                      1       2      0 OGIS_GEOMETRY_COLUMNS|MDSYS                                            ROOT
                                                                1 > OGIS_SPATIAL_REFERENCE_SYSTEMS|MDSYS                                 fk_srid|mdsys
OLS$AUDIT|LBACSYS                               21      14      0 OLS$AUDIT|LBACSYS                                                      ROOT
                                                                1 > OLS$POL|LBACSYS                                                      sys_c006346|lbacsys
                                                                2   < OLS$COMPARTMENTS|LBACSYS                                           ols_comp_pol_fk|lbacsys
                                                                3     < OLS$USER_COMPARTMENTS|LBACSYS                                    ols_user_comp_fk|lbacsys                                                                 4       > OLS$USER_LEVELS|LBACSYS                                        ols_user_comp_level_fk|lbacsys
                                                                5         > OLS$LEVELS|LBACSYS                                           ols_user_def_fk|lbacsys
                                                                6           > OLS$POL|LBACSYS*                                           ols_level_pol_fk|lbacsys
                                                                6           < OLS$USER_LEVELS|LBACSYS*                                   ols_user_max_fk|lbacsys
                                                                6           < OLS$USER_LEVELS|LBACSYS*                                   ols_user_min_fk|lbacsys
                                                                6           < OLS$USER_LEVELS|LBACSYS*                                   ols_user_row_fk|lbacsys                                                                 5         > OLS$POL|LBACSYS*                                             ols_user_level_pol_fk|lbacsys
                                                                5         < OLS$USER_GROUPS|LBACSYS                                      ols_user_grp_level_fk|lbacsys                                                                 6           > OLS$GROUPS|LBACSYS                                         ols_user_grp_fk|lbacsys
                                                                7             = OLS$GROUPS|LBACSYS*                                      ols_group_parent|lbacsys
                                                                7             > OLS$POL|LBACSYS*                                         ols_group_pol_fk|lbacsys
                                                                2   < OLS$LAB|LBACSYS                                                    ols_label_policy_fk|lbacsys
                                                                2   < OLS$POLS|LBACSYS                                                   sys_c006243|lbacsys
                                                                2   < OLS$POLT|LBACSYS                                                   sys_c006248|lbacsys
                                                                2   < OLS$PROFILE|LBACSYS                                                sys_c006251|lbacsys
                                                                3     < OLS$USER|LBACSYS                                                 sys_c006257|lbacsys                                                                 4       > OLS$POL|LBACSYS*                                               sys_c006256|lbacsys
                                                                2   < OLS$PROG|LBACSYS                                                   sys_c006262|lbacsys OLS_DIR_BUSINESSES|MDSYS                         1       2      0 OLS_DIR_BUSINESSES|MDSYS                                               ROOT                                                                 1 > OLS_DIR_BUSINESS_CHAINS|MDSYS                                        olsfk3|mdsys
OLS_DIR_CATEGORIES|MDSYS                         3       3      0 OLS_DIR_CATEGORIES|MDSYS                                               ROOT
                                                                1 = OLS_DIR_CATEGORIES|MDSYS*                                            olsfk1|mdsys
                                                                1 < OLS_DIR_CATEGORIZATIONS|MDSYS                                        olsfk5|mdsys                                                                 1 > OLS_DIR_CATEGORY_TYPES|MDSYS                                         olsfk2|mdsys
ORDDCM_ANON_ACTION_TYPES|ORDDATA                69      47      0 ORDDCM_ANON_ACTION_TYPES|ORDDATA                                       ROOT
                                                                1 < ORDDCM_ANON_ATTRS_WRK|ORDDATA                                        orddcm_anon_attrs_w_fk3|orddata                                                                 2   > ORDDCM_DOCS_WRK|ORDDATA                                            orddcm_anon_attrs_w_fk1|orddata
                                                                3     < ORDDCM_ANON_RULES_WRK|ORDDATA                                    orddcm_anon_rules_w_fk1|orddata                                                                 4       > ORDDCM_ANON_ACTION_TYPES|ORDDATA*                              orddcm_anon_rules_w_fk3|orddata
                                                                4       > ORDDCM_ANON_RULE_TYPES|ORDDATA                                 orddcm_anon_rules_w_fk2|orddata
                                                                5         < ORDDCM_ANON_RULES|ORDDATA                                    orddcm_anon_rules_fk2|orddata                                                                 6           > ORDDCM_ANON_ACTION_TYPES|ORDDATA*                          orddcm_anon_rules_fk3|orddata
                                                                6           > ORDDCM_DOCS|ORDDATA                                        orddcm_anon_rules_fk1|orddata
                                                                7             < ORDDCM_ANON_ATTRS|ORDDATA                                orddcm_anon_attrs_fk1|orddata                                                                 8               > ORDDCM_ANON_ACTION_TYPES|ORDDATA*                      orddcm_anon_attrs_fk3|orddata
                                                                7             < ORDDCM_CT_DAREFS|ORDDATA                                 orddcm_ct_darefs_fk2|orddata                                                                 8               > ORDDCM_DICT_ATTRS|ORDDATA                              orddcm_ct_darefs_fk1|orddata
                                                                9                 > ORDDCM_PRV_ATTRS|ORDDATA                             orddcm_dict_attrs_fk2|orddata
                                                               10                   > ORDDCM_DOCS|ORDDATA*                               orddcm_prv_attrs_fk1|orddata
                                                               10                   > ORDDCM_VR_DT_MAP|ORDDATA                           orddcm_prv_attrs_fk2|orddata
                                                               11                     < ORDDCM_PRV_ATTRS_WRK|ORDDATA                     orddcm_prv_attrs_w_fk2|orddata
                                                               12                       < ORDDCM_DICT_ATTRS_WRK|ORDDATA                  orddcm_dict_attrs_w_fk2|orddata
                                                               13                         < ORDDCM_CT_DAREFS_WRK|ORDDATA                 orddcm_ct_darefs_w_fk1|orddata                                                                14                           > ORDDCM_DOCS_WRK|ORDDATA*                   orddcm_ct_darefs_w_fk2|orddata
                                                               13                         > ORDDCM_STD_ATTRS_WRK|ORDDATA                 orddcm_dict_attrs_w_fk1|orddata
                                                               14                           > ORDDCM_DOCS_WRK|ORDDATA*                   orddcm_sd_attrs_w_fk2|orddata
                                                               14                           > ORDDCM_VR_DT_MAP|ORDDATA*                  orddcm_sd_attrs_w_fk1|orddata
                                                               12                       > ORDDCM_DOCS_WRK|ORDDATA*                       orddcm_prv_attrs_w_fk1|orddata
                                                               11                     < ORDDCM_STD_ATTRS|ORDDATA                         orddcm_sd_attrs_fk1|orddata
                                                               12                       < ORDDCM_DICT_ATTRS|ORDDATA*                     orddcm_dict_attrs_fk1|orddata                                                                12                       > ORDDCM_DOCS|ORDDATA*                           orddcm_sd_attrs_fk2|orddata
                                                                7             < ORDDCM_CT_LOCATORPATHS|ORDDATA                           orddcm_ct_lp_fk1|orddata                                                                 8               > ORDDCM_CT_PRED_SET|ORDDATA                             orddcm_ct_lp_fk2|orddata
                                                                9                 < ORDDCM_CT_MACRO_DEP|ORDDATA                          orddcm_ct_md_fk1|orddata                                                                10                   > ORDDCM_CT_PRED_SET|ORDDATA*                        orddcm_ct_md_fk2|orddata
                                                                9                 < ORDDCM_CT_MACRO_PAR|ORDDATA                          orddcm_ct_mp_fk|orddata                                                                 9                 = ORDDCM_CT_PRED_SET|ORDDATA*                          orddcm_ct_ps_fk2|orddata                                                                 9                 > ORDDCM_CT_PRED|ORDDATA                               orddcm_ct_ps_fk1|orddata
                                                               10                   < ORDDCM_CT_ACTION|ORDDATA                           orddcm_ct_a_fk1|orddata
                                                               10                   < ORDDCM_CT_PRED_OPRD|ORDDATA                        orddcm_ct_po_fk|orddata
                                                               10                   < ORDDCM_CT_PRED_PAR|ORDDATA                         orddcm_ct_pp_fk|orddata                                                                10                   = ORDDCM_CT_PRED|ORDDATA*                            orddcm_ct_pred_fk1|orddata                                                                10                   = ORDDCM_CT_PRED|ORDDATA*                            orddcm_ct_pred_fk2|orddata                                                                 9                 > ORDDCM_DOCS|ORDDATA*                                 orddcm_ct_ps_fk3|orddata
                                                                7             < ORDDCM_DOC_REFS|ORDDATA                                  sys_c005130|orddata                                                                 8               > ORDDCM_DOCS|ORDDATA*                                   sys_c005131|orddata
                                                                7             > ORDDCM_DOC_TYPES|ORDDATA                                 orddcm_docs_fk1|orddata
                                                                8               < ORDDCM_DOCS_WRK|ORDDATA*                               orddcm_docs_w_fk1|orddata
                                                                8               < ORDDCM_INSTALL_DOCS|ORDDATA                            orddcm_i_docs_fk1|orddata
                                                                7             < ORDDCM_MAPPING_DOCS|ORDDATA                              orddcm_mapping_docs_fk1|orddata
                                                                8               < ORDDCM_MAPPED_PATHS|ORDDATA                            orddcm_mapped_paths_fk2|orddata
                                                                7             < ORDDCM_RT_PREF_PARAMS|ORDDATA                            orddcm_pref_params_fk1|orddata
                                                                7             < ORDDCM_STORED_TAGS|ORDDATA                               orddcm_stored_tags_fk1|orddata
                                                                7             < ORDDCM_UID_DEFS|ORDDATA                                  orddcm_uid_defs_fk1|orddata
                                                                3     < ORDDCM_CT_LOCATORPATHS_WRK|ORDDATA                               orddcm_ct_lp_w_fk1|orddata                                                                 4       > ORDDCM_CT_PRED_SET_WRK|ORDDATA                                 orddcm_ct_lp_w_fk2|orddata
                                                                5         < ORDDCM_CT_MACRO_DEP_WRK|ORDDATA                              orddcm_ct_md_w_fk1|orddata                                                                 6           > ORDDCM_CT_PRED_SET_WRK|ORDDATA*                            orddcm_ct_md_w_fk2|orddata
                                                                5         < ORDDCM_CT_MACRO_PAR_WRK|ORDDATA                              orddcm_ct_mp_w_fk|orddata                                                                 5         = ORDDCM_CT_PRED_SET_WRK|ORDDATA*                              orddcm_ct_ps_w_fk2|orddata                                                                 5         > ORDDCM_CT_PRED_WRK|ORDDATA                                   orddcm_ct_ps_w_fk1|orddata
                                                                6           < ORDDCM_CT_ACTION_WRK|ORDDATA                               orddcm_ct_a_w_fk1|orddata
                                                                6           < ORDDCM_CT_PRED_OPRD_WRK|ORDDATA                            orddcm_ct_po_w_fk|orddata
                                                                6           < ORDDCM_CT_PRED_PAR_WRK|ORDDATA                             orddcm_ct_pp_w_fk|orddata                                                                 6           = ORDDCM_CT_PRED_WRK|ORDDATA*                                orddcm_ct_pred_w_fk1|orddata                                                                 6           = ORDDCM_CT_PRED_WRK|ORDDATA*                                orddcm_ct_pred_w_fk2|orddata                                                                 5         > ORDDCM_DOCS_WRK|ORDDATA*                                     orddcm_ct_ps_w_fk3|orddata
                                                                3     < ORDDCM_DOC_REFS_WRK|ORDDATA                                      sys_c005428|orddata                                                                 4       > ORDDCM_DOCS_WRK|ORDDATA*                                       sys_c005429|orddata
                                                                3     < ORDDCM_MAPPING_DOCS_WRK|ORDDATA                                  orddcm_mapping_docs_w_fk1|orddata
                                                                4       < ORDDCM_MAPPED_PATHS_WRK|ORDDATA                                orddcm_mapped_paths_w_fk2|orddata
                                                                3     < ORDDCM_RT_PREF_PARAMS_WRK|ORDDATA                                orddcm_pref_params_w_fk1|orddata
                                                                3     < ORDDCM_STORED_TAGS_WRK|ORDDATA                                   orddcm_stored_tags_w_fk1|orddata
                                                                3     < ORDDCM_UID_DEFS_WRK|ORDDATA                                      orddcm_uid_defs_w_fk1|orddata
PLANETS|TEST                                     1       2      0 PLANETS|TEST                                                           ROOT
                                                                1 < PLANET_CLIMATES|TEST                                                 plc_pla_fk|test PLSQL_PROFILER_DATA|BENCH                        2       3      0 PLSQL_PROFILER_DATA|BENCH                                              ROOT                                                                 1 > PLSQL_PROFILER_UNITS|BENCH                                           sys_c0010214|bench
                                                                2   > PLSQL_PROFILER_RUNS|BENCH                                          sys_c0010211|bench
REGISTRY$DEPENDENCIES|SYS                        5       4      0 REGISTRY$DEPENDENCIES|SYS                                              ROOT
                                                                1 > REGISTRY$|SYS                                                        dependencies_fk|sys
                                                                2   < REGISTRY$DEPENDENCIES|SYS*                                         dependencies_req_fk|sys
                                                                2   < REGISTRY$PROGRESS|SYS                                              registry_progress_fk|sys
                                                                2   < REGISTRY$SCHEMAS|SYS                                               registry_schema_fk|sys
                                                                2   = REGISTRY$|SYS*                                                     registry_parent_fk|sys
REPCAT$_AUDIT_ATTRIBUTE|SYSTEM                   5       6      0 REPCAT$_AUDIT_ATTRIBUTE|SYSTEM                                         ROOT
                                                                1 < REPCAT$_AUDIT_COLUMN|SYSTEM                                          repcat$_audit_column_f1|system                                                                 2   > REPCAT$_CONFLICT|SYSTEM                                            repcat$_audit_column_f2|system
                                                                3     < REPCAT$_RESOLUTION|SYSTEM                                        repcat$_resolution_f3|system
                                                                4       < REPCAT$_PARAMETER_COLUMN|SYSTEM                                repcat$_parameter_column_f1|system                                                                 4       > REPCAT$_RESOLUTION_METHOD|SYSTEM                               repcat$_resolution_f1|system
REPCAT$_COLUMN_GROUP|SYSTEM                      1       2      0 REPCAT$_COLUMN_GROUP|SYSTEM                                            ROOT
                                                                1 < REPCAT$_GROUPED_COLUMN|SYSTEM                                        repcat$_grouped_column_f1|system REPCAT$_DDL|SYSTEM                               1       2      0 REPCAT$_DDL|SYSTEM                                                     ROOT                                                                 1 > REPCAT$_REPCATLOG|SYSTEM                                             repcat$_ddl_prnt|system
REPCAT$_INSTANTIATION_DDL|SYSTEM                13      13      0 REPCAT$_INSTANTIATION_DDL|SYSTEM                                       ROOT
                                                                1 > REPCAT$_REFRESH_TEMPLATES|SYSTEM                                     repcat$_instantiation_ddl_fk1|system
                                                                2   < REPCAT$_TEMPLATE_OBJECTS|SYSTEM                                    repcat$_template_objects_fk1|system
                                                                3     < REPCAT$_OBJECT_PARMS|SYSTEM                                      repcat$_object_parms_fk2|system                                                                 4       > REPCAT$_TEMPLATE_PARMS|SYSTEM                                  repcat$_object_parms_fk1|system
                                                                5         > REPCAT$_REFRESH_TEMPLATES|SYSTEM*                            repcat$_template_parms_fk1|system
                                                                5         < REPCAT$_USER_PARM_VALUES|SYSTEM                              repcat$_user_parm_values_fk1|system                                                                 3     > REPCAT$_OBJECT_TYPES|SYSTEM                                      repcat$_template_objects_fk3|system
                                                                4       < REPCAT$_SITE_OBJECTS|SYSTEM                                    repcat$_site_objects_fk1|system                                                                 5         > REPCAT$_TEMPLATE_SITES|SYSTEM                                repcat$_site_object_fk2|system
                                                                2   < REPCAT$_TEMPLATE_REFGROUPS|SYSTEM                                  repcat$_template_refgroups_fk1|system                                                                 2   > REPCAT$_TEMPLATE_STATUS|SYSTEM                                     repcat$_refresh_templates_fk2|system
                                                                2   > REPCAT$_TEMPLATE_TYPES|SYSTEM                                      repcat$_refresh_templates_fk1|system
                                                                2   < REPCAT$_USER_AUTHORIZATIONS|SYSTEM                                 repcat$_user_authorization_fk2|system
REPCAT$_PRIORITY_GROUP|SYSTEM                    1       2      0 REPCAT$_PRIORITY_GROUP|SYSTEM                                          ROOT
                                                                1 < REPCAT$_PRIORITY|SYSTEM                                              repcat$_priority_f1|system
ROADS|TEST                                       1       2      0 ROADS|TEST                                                             ROOT
                                                                1 < ROAD_EVENTS|TEST                                                     rev_roa_fk|test SCHEDULER$_JOB_OUTPUT|SYS                        1       2      0 SCHEDULER$_JOB_OUTPUT|SYS                                              ROOT                                                                 1 > SCHEDULER$_JOB_RUN_DETAILS|SYS                                       scheduler$_job_output_fk|sys
SDO_COORD_AXES|MDSYS                            30      14      0 SDO_COORD_AXES|MDSYS                                                   ROOT
                                                                1 > SDO_COORD_AXIS_NAMES|MDSYS                                           coord_axis_foreign_axis|mdsys
                                                                1 > SDO_COORD_SYS|MDSYS                                                  coord_axis_foreign_cs|mdsys
                                                                2   < SDO_COORD_REF_SYS|MDSYS                                            coord_ref_sys_foreign_cs|mdsys
                                                                3     < SDO_COORD_OPS|MDSYS                                              coord_operation_foreign_source|mdsys                                                                 4       = SDO_COORD_OPS|MDSYS*                                           coord_operation_foreign_legacy|mdsys                                                                 4       > SDO_COORD_OP_METHODS|MDSYS                                     coord_operation_foreign_method|mdsys
                                                                5         < SDO_COORD_OP_PARAM_USE|MDSYS                                 coord_op_para_use_foreign_meth|mdsys                                                                 6           > SDO_COORD_OP_PARAMS|MDSYS                                  coord_op_para_use_foreign_para|mdsys
                                                                7             < SDO_COORD_OP_PARAM_VALS|MDSYS                            coord_op_para_val_foreign_para|mdsys                                                                 8               > SDO_COORD_OPS|MDSYS*                                   coord_op_para_val_foreign_op|mdsys
                                                                8               > SDO_COORD_OP_METHODS|MDSYS*                            coord_op_para_val_foreign_meth|mdsys
                                                                8               > SDO_UNITS_OF_MEASURE|MDSYS                             coord_op_para_val_foreign_uom|mdsys
                                                                9                 < SDO_COORD_AXES|MDSYS*                                coord_axis_foreign_uom|mdsys                                                                 9                 > SDO_ELLIPSOIDS|MDSYS                                 ellipsoid_foreign_legacy|mdsys
                                                               10                   < SDO_DATUMS|MDSYS                                   datum_foreign_ellipsoid|mdsys
                                                               11                     < SDO_COORD_REF_SYS|MDSYS*                         coord_ref_sys_foreign_datum|mdsys                                                                11                     = SDO_DATUMS|MDSYS*                                datum_foreign_legacy|mdsys                                                                11                     > SDO_PRIME_MERIDIANS|MDSYS                        datum_foreign_meridian|mdsys
                                                               12                       > SDO_UNITS_OF_MEASURE|MDSYS*                    prime_meridian_foreign_uom|mdsys
                                                               10                   > SDO_UNITS_OF_MEASURE|MDSYS*                        ellipsoid_foreign_uom|mdsys
                                                                9                 = SDO_UNITS_OF_MEASURE|MDSYS*                          unit_of_measure_foreign_legacy|mdsys
                                                                9                 = SDO_UNITS_OF_MEASURE|MDSYS*                          unit_of_measure_foreign_uom|mdsys
                                                                4       > SDO_COORD_REF_SYS|MDSYS*                                       coord_operation_foreign_target|mdsys
                                                                4       < SDO_COORD_REF_SYS|MDSYS*                                       coord_ref_sys_foreign_proj|mdsys
                                                                3     < SDO_COORD_OP_PATHS|MDSYS                                         coord_op_path_foreign_source|mdsys                                                                 4       > SDO_COORD_REF_SYS|MDSYS*                                       coord_op_path_foreign_target|mdsys
                                                                3     = SDO_COORD_REF_SYS|MDSYS*                                         coord_ref_sys_foreign_geog|mdsys
                                                                3     = SDO_COORD_REF_SYS|MDSYS*                                         coord_ref_sys_foreign_horiz|mdsys
                                                                3     = SDO_COORD_REF_SYS|MDSYS*                                         coord_ref_sys_foreign_legacy|mdsys
                                                                3     = SDO_COORD_REF_SYS|MDSYS*                                         coord_ref_sys_foreign_vert|mdsys
SDO_WS_CONFERENCE_PARTICIPANTS|MDSYS             1       2      0 SDO_WS_CONFERENCE_PARTICIPANTS|MDSYS                                   ROOT
                                                                1 > SDO_WS_CONFERENCE|MDSYS                                              sdo_ws_conf_part_fk|mdsys
TSDP_ASSOCIATION$|SYS                            8       9      0 TSDP_ASSOCIATION$|SYS                                                  ROOT
                                                                1 > TSDP_POLICY$|SYS                                                     tsdp_association$fkpo|sys
                                                                2   < TSDP_SUBPOL$|SYS                                                   tsdp_subpol$fk|sys
                                                                3     < TSDP_CONDITION$|SYS                                              tsdp_condition$fk|sys
                                                                3     < TSDP_PARAMETER$|SYS                                              tsdp_parameter$fk|sys
                                                                3     < TSDP_PROTECTION$|SYS                                             tsdp_protection$fkpc|sys                                                                 4       > TSDP_SENSITIVE_DATA$|SYS                                       tsdp_protection$fksd|sys
                                                                1 > TSDP_SENSITIVE_TYPE$|SYS                                             tsdp_association$fkst|sys
                                                                2   > TSDP_SOURCE$|SYS                                                   tsdp_sensitive_type$fk|sys
WFS_FEATUREINSTANCEMETADATA$|MDSYS               6       7      0 WFS_FEATUREINSTANCEMETADATA$|MDSYS                                     ROOT
                                                                1 > WFS_FEATURETYPE$|MDSYS                                               sys_c006201|mdsys
                                                                2   < WFS_FEATURETYPEATTRS$|MDSYS                                        sys_c006202|mdsys
                                                                2   < WFS_FEATURETYPENESTEDSDOS$|MDSYS                                   sys_c006206|mdsys
                                                                2   < WFS_FEATURETYPESIMPLETAGATTRS$|MDSYS                               sys_c006203|mdsys
                                                                2   < WFS_FEATURETYPETAGS$|MDSYS                                         sys_c006200|mdsys
                                                                2   < WFS_FEATURETYPEXMLCOLINFO$|MDSYS                                   sys_c006205|mdsys
WI$_CAPTURE_FILE|SYS                            10       9      0 WI$_CAPTURE_FILE|SYS                                                   ROOT
                                                                1 < WI$_EXECUTION_ORDER|SYS                                              wi$_execution_order_fk1|sys                                                                 2   > WI$_TEMPLATE|SYS                                                   wi$_execution_order_fk2|sys
                                                                3     < WI$_FREQUENT_PATTERN_ITEM|SYS                                    wi$_frequent_pattern_item_fk2|sys                                                                 4       > WI$_FREQUENT_PATTERN|SYS                                       wi$_frequent_pattern_item_fk1|sys
                                                                5         > WI$_JOB|SYS                                                  wi$_frequent_pattern_fk1|sys
                                                                6           < WI$_CAPTURE_FILE|SYS*                                      wi$_capture_file_fk1|sys
                                                                6           < WI$_FREQUENT_PATTERN_METADATA|SYS                          wi$_freq_pattern_metadata_fk1|sys
                                                                6           < WI$_TEMPLATE|SYS*                                          wi$_template_fk1|sys
                                                                3     < WI$_OBJECT|SYS                                                   wi$_object_fk1|sys
                                                                3     < WI$_STATEMENT|SYS                                                wi$_statement_fk1|sys
WRM$_DATABASE_INSTANCE|SYS                       1       2      0 WRM$_DATABASE_INSTANCE|SYS                                             ROOT
                                                                1 < WRM$_SNAPSHOT|SYS                                                    wrm$_snapshot_fk|sys
WWV_FLOWS|APEX_040200                          334     264      0 WWV_FLOWS|APEX_040200                                                  ROOT
                                                                1 < WWV_FLOW_APP_COMMENTS|APEX_040200                                    wwv_flow_app_comments_fk|apex_040200
                                                                1 < WWV_FLOW_AUTHENTICATIONS|APEX_040200                                 wwv_flow_authentications_fk|apex_040200
                                                                2   < WWV_FLOWS|APEX_040200*                                             wwv_flows_fk_authentication|apex_040200
                                                                1 < WWV_FLOW_BANNER|APEX_040200                                          wwv_flow_banner_fk|apex_040200
                                                                1 < WWV_FLOW_BUTTON_TEMPLATES|APEX_040200                                wwv_flow_buttont_fk|apex_040200
                                                                2   < WWV_FLOW_PAGE_PLUG_TEMPLATES|APEX_040200                           wwv_flow_plug_temp_button_fk|apex_040200                                                                 3     > WWV_FLOWS|APEX_040200*                                           wwv_flow_plug_temp_fk|apex_040200
                                                                3     > WWV_FLOW_FIELD_TEMPLATES|APEX_040200                             wwv_flow_plug_temp_field_fk|apex_040200
                                                                4       > WWV_FLOWS|APEX_040200*                                         wwv_flow_field_temp_f_fk|apex_040200
                                                                4       < WWV_FLOW_PAGE_PLUG_TEMPLATES|APEX_040200*                      wwv_flow_plug_temp_req_fld_fk|apex_040200
                                                                3     < WWV_FLOW_PLUG_TMPL_DISP_POINTS|APEX_040200                       wwv_plug_tmpl_dp_parent_fk|apex_040200                                                                 4       > WWV_FLOWS|APEX_040200*                                         wwv_plug_tmpl_dp_fk|apex_040200
                                                                1 < WWV_FLOW_CALS|APEX_040200                                            wwv_flow_cal_to_flow_fk|apex_040200                                                                 2   > WWV_FLOW_PAGE_PLUGS|APEX_040200                                    wwv_flow_plug_calendar_fk|apex_040200
                                                                3     > WWV_FLOWS|APEX_040200*                                           wwv_flow_plug_to_flow_fk|apex_040200
                                                                3     < WWV_FLOW_FLASH_CHARTS_5|APEX_040200                              wwv_flow_flash_charts_5_fk2|apex_040200                                                                 4       > WWV_FLOWS|APEX_040200*                                         wwv_flow_flash_charts_5_fk|apex_040200
                                                                4       < WWV_FLOW_FLASH_CHART5_SERIES|APEX_040200                       wwv_flow_flash_5_series_fk|apex_040200
                                                                4       < WWV_FLOW_FLASH_CHARTS_5_DASH|APEX_040200                       wwv_flow_flash_charts5_dash_fk|apex_040200
                                                                3     < WWV_FLOW_FLASH_CHARTS|APEX_040200                                wwv_flow_flash_charts_fk2|apex_040200                                                                 4       > WWV_FLOWS|APEX_040200*                                         wwv_flow_flash_charts_fk|apex_040200
                                                                4       < WWV_FLOW_FLASH_CHART_SERIES|APEX_040200                        wwv_flow_flash_chart_series_fk|apex_040200
                                                                3     < WWV_FLOW_PAGE_DA_ACTIONS|APEX_040200                             wwv_flow_page_da_a_ar_fk|apex_040200                                                                 4       > WWV_FLOW_PAGE_DA_EVENTS|APEX_040200                            wwv_flow_page_da_a_evnt_fk|apex_040200
                                                                5         > WWV_FLOWS|APEX_040200*                                       wwv_flow_page_da_e_flow_fk|apex_040200
                                                                5         > WWV_FLOW_PAGE_PLUGS|APEX_040200*                             wwv_flow_page_da_e_tr_fk|apex_040200
                                                                5         > WWV_FLOW_STEPS|APEX_040200                                   wwv_flow_page_da_e_page_fk|apex_040200
                                                                6           > WWV_FLOWS|APEX_040200*                                     wwv_flow_step_flow_fk|apex_040200
                                                                6           < WWV_FLOW_PAGE_DA_ACTIONS|APEX_040200*                      wwv_flow_page_da_a_page_fk|apex_040200
                                                                6           < WWV_FLOW_PAGE_PLUGS|APEX_040200*                           wwv_flow_plug_to_page_fk|apex_040200
                                                                6           < WWV_FLOW_STEP_BRANCHES|APEX_040200                         wwv_flow_step_branches_fk2|apex_040200                                                                 7             > WWV_FLOWS|APEX_040200*                                   wwv_flow_step_branches_fk|apex_040200
                                                                7             < WWV_FLOW_STEP_BRANCH_ARGS|APEX_040200                    wwv_flow_step_branch_args_fk|apex_040200
                                                                6           < WWV_FLOW_STEP_BUTTONS|APEX_040200                          wwv_flow_step_buttons_fk2|apex_040200                                                                 7             > WWV_FLOWS|APEX_040200*                                   wwv_flow_step_buttons_fk1|apex_040200
                                                                7             > WWV_FLOW_PAGE_PLUGS|APEX_040200*                         wwv_flow_step_buttons_plug_fk|apex_040200
                                                                6           < WWV_FLOW_STEP_COMPUTATIONS|APEX_040200                     wwv_flow_step_comp_fk2|apex_040200                                                                 7             > WWV_FLOWS|APEX_040200*                                   wwv_flow_step_comp_fk|apex_040200
                                                                6           < WWV_FLOW_STEP_ITEMS|APEX_040200                            wwv_flow_step_items_fk2|apex_040200                                                                 7             > WWV_FLOWS|APEX_040200*                                   wwv_flow_step_items_fk|apex_040200
                                                                7             > WWV_FLOW_PAGE_PLUGS|APEX_040200*                         wwv_flow_step_items_plug_fk|apex_040200
                                                                7             < WWV_FLOW_STEP_ITEM_HELP|APEX_040200                      wwv_flow_item_helptext_fk|apex_040200                                                                 8               > WWV_FLOWS|APEX_040200*                                 wwv_flow_page_helptext_fk|apex_040200
                                                                6           < WWV_FLOW_STEP_PROCESSING|APEX_040200                       wwv_flow_step_proc_fk2|apex_040200                                                                 7             > WWV_FLOWS|APEX_040200*                                   wwv_flow_step_proc_fk|apex_040200
                                                                7             < WWV_FLOW_CALS|APEX_040200*                               wwv_flow_step_process_fk|apex_040200                                                                 7             > WWV_FLOW_PAGE_PLUGS|APEX_040200*                         wwv_flow_step_proc_reg_fk|apex_040200
                                                                7             < WWV_FLOW_WS_PROCESS_PARMS_MAP|APEX_040200                wwv_flow_ws_map_fk2|apex_040200                                                                 8               > WWV_FLOW_WS_PARAMETERS|APEX_040200                     wwv_flows_ws_map_fk1|apex_040200
                                                                9                 > WWV_FLOW_WS_OPERATIONS|APEX_040200                   wwv_flow_ws_parms_fk|apex_040200
                                                               10                   > WWV_FLOW_SHARED_WEB_SERVICES|APEX_040200           wwv_flow_ws_opers_fk|apex_040200
                                                               11                     > WWV_FLOWS|APEX_040200*                           wwv_flow_ws_fk|apex_040200
                                                                6           < WWV_FLOW_STEP_VALIDATIONS|APEX_040200                      wwv_flow_step_val_fk2|apex_040200                                                                 7             > WWV_FLOWS|APEX_040200*                                   wwv_flow_step_val_fk|apex_040200
                                                                7             > WWV_FLOW_PAGE_PLUGS|APEX_040200*                         wwv_flow_step_val_to_reg_fk|apex_040200
                                                                6           > WWV_FLOW_USER_INTERFACES|APEX_040200                       wwv_flow_step_ui_fk|apex_040200
                                                                7             > WWV_FLOWS|APEX_040200*                                   wwv_flow_ui_flow_fk|apex_040200
                                                                7             > WWV_FLOW_STEPS|APEX_040200*                              wwv_flow_user_int_page_fk|apex_040200
                                                                7             > WWV_FLOW_UI_TYPES|APEX_040200                            wwv_flow_ui_type_fk|apex_040200
                                                                8               < WWV_FLOW_THEMES|APEX_040200                            wwv_flow_theme_ui_type_fk|apex_040200                                                                 9                 > WWV_FLOWS|APEX_040200*                               wwv_flow_themes_2f_fk|apex_040200
                                                                8               = WWV_FLOW_UI_TYPES|APEX_040200*                         wwv_flow_ui_type_based_on_fk|apex_040200
                                                                8               < WWV_FLOW_UI_TYPE_FEATURES|APEX_040200                  wwv_flow_ui_type_feature_fk1|apex_040200                                                                 9                 > WWV_FLOW_BUILDER_FEATURES|APEX_040200                wwv_flow_ui_type_feature_fk2|apex_040200
                                                                3     < WWV_FLOW_PAGE_GENERIC_ATTR|APEX_040200                           wwv_flow_genattr_to_region_fk|apex_040200
                                                                3     = WWV_FLOW_PAGE_PLUGS|APEX_040200*                                 wwv_flow_plug_parent_fk|apex_040200
                                                                3     < WWV_FLOW_QUERY_DEFINITION|APEX_040200                            query_def_to_region_fk|apex_040200
                                                                4       < WWV_FLOW_QUERY_COLUMN|APEX_040200                              query_column_to_query_fk|apex_040200                                                                 5         > WWV_FLOW_QUERY_OBJECT|APEX_040200                            query_column_to_qry_object_fk|apex_040200
                                                                6           > WWV_FLOW_QUERY_DEFINITION|APEX_040200*                     query_object_to_query_fk|apex_040200
                                                                4       < WWV_FLOW_QUERY_CONDITION|APEX_040200                           query_condition_to_query_fk|apex_040200
                                                                3     < WWV_FLOW_REGION_CHART_SER_ATTR|APEX_040200                       wwv_flow_seattr_to_region_fk|apex_040200
                                                                3     < WWV_FLOW_REGION_REPORT_COLUMN|APEX_040200                        report_column_to_region_fk|apex_040200
                                                                3     < WWV_FLOW_REGION_REPORT_FILTER|APEX_040200                        sys_c007367|apex_040200
                                                                3     < WWV_FLOW_REGION_UPD_RPT_COLS|APEX_040200                         wwv_flow_urc_to_plug_fk|apex_040200                                                                 4       > WWV_FLOWS|APEX_040200*                                         wwv_flow_urc_to_flow_fk|apex_040200
                                                                3     < WWV_FLOW_TREE_REGIONS|APEX_040200                                wwv_flow_treeregion_fk2|apex_040200                                                                 4       > WWV_FLOWS|APEX_040200*                                         wwv_flow_treeregion_fk|apex_040200
                                                                3     < WWV_FLOW_WORKSHEETS|APEX_040200                                  wwv_flow_worksheets_reg_fk|apex_040200                                                                 4       > WWV_FLOWS|APEX_040200*                                         wwv_flow_worksheets_flow_fk|apex_040200
                                                                4       < WWV_FLOW_WORKSHEET_COLUMNS|APEX_040200                         wwv_flow_worksheet_columns_fk|apex_040200                                                                 5         > WWV_FLOWS|APEX_040200*                                       wwv_flow_worksheet_col_fk|apex_040200
                                                                5         > WWV_FLOW_WORKSHEET_COL_GROUPS|APEX_040200                    wwv_flow_worksheet_col_grps_fk|apex_040200
                                                                6           > WWV_FLOWS|APEX_040200*                                     wwv_flow_worksheet_col_grp_fk|apex_040200
                                                                6           > WWV_FLOW_WORKSHEETS|APEX_040200*                           wwv_flow_worksheet_col_grws_fk|apex_040200
                                                                6           > WWV_FLOW_WS_WEBSHEET_ATTR|APEX_040200                      wwv_flow_worksheet_col_grp_fk2|apex_040200
                                                                7             > WWV_FLOW_WORKSHEETS|APEX_040200*                         wwwv_flow_ws_websheet_attr_fk|apex_040200
                                                                7             < WWV_FLOW_WORKSHEET_COLUMNS|APEX_040200*                  wwv_flow_worksheet_col_fk2|apex_040200
                                                                7             < WWV_FLOW_WORKSHEET_COMPUTATION|APEX_040200               wwv_flow_ws_computation_fk|apex_040200                                                                 8               > WWV_FLOW_WORKSHEET_RPTS|APEX_040200                    wwv_flow_ws_comp_cols_fk|apex_040200
                                                                9                 > WWV_FLOW_WORKSHEET_CATEGORIES|APEX_040200            wwv_flow_worksheet_rpts_fk|apex_040200
                                                               10                   > WWV_FLOWS|APEX_040200*                             wwv_flow_worksheet_cat_fk2|apex_040200
                                                                9                 < WWV_FLOW_WORKSHEET_CONDITIONS|APEX_040200            wwv_flow_worksheet_cond_fk|apex_040200                                                                10                   > WWV_FLOW_WS_WEBSHEET_ATTR|APEX_040200*             wwv_flow_ws_condition_fk|apex_040200
                                                                9                 < WWV_FLOW_WORKSHEET_GROUP_BY|APEX_040200              wwv_flow_ws_groupby_fk2|apex_040200                                                                10                   > WWV_FLOW_WS_WEBSHEET_ATTR|APEX_040200*             wwv_flow_ws_groupby_fk|apex_040200
                                                                9                 < WWV_FLOW_WORKSHEET_NOTIFY|APEX_040200                wwv_flow_worksheet_notify_fk2|apex_040200                                                                10                   > WWV_FLOW_WS_WEBSHEET_ATTR|APEX_040200*             wwv_flow_worksheet_notify_fk4|apex_040200
                                                                9                 > WWV_FLOW_WS_WEBSHEET_ATTR|APEX_040200*               wwv_flow_ws_rpt_fk|apex_040200
                                                                7             < WWV_FLOW_WORKSHEET_LOVS|APEX_040200                      wwv_flow_worksheet_lovs_fk2|apex_040200                                                                 8               > WWV_FLOW_WORKSHEETS|APEX_040200*                       wwv_flow_worksheet_lovs_fk|apex_040200
                                                                8               < WWV_FLOW_WORKSHEET_LOV_ENTRIES|APEX_040200             wwv_flow_worksheet_lov_ent_fk2|apex_040200                                                                 9                 > WWV_FLOW_WORKSHEETS|APEX_040200*                     wwv_flow_worksheet_lov_ent_fk|apex_040200
                                                                9                 > WWV_FLOW_WS_WEBSHEET_ATTR|APEX_040200*               wwv_flow_worksheet_lov_ent_fk3|apex_040200
                                                                7             > WWV_FLOW_WS_APPLICATIONS|APEX_040200                     wwv_flow_ws_websheet_attr_fk2|apex_040200
                                                                8               < WWV_FLOW_PKG_APP_MAP|APEX_040200                       wwv_flow_pkg_app_map_fk2|apex_040200                                                                 9                 > WWV_FLOWS|APEX_040200*                               wwv_flow_pkg_app_map_fk|apex_040200
                                                                8               < WWV_FLOW_WS_APP_SUG_OBJECTS|APEX_040200                wwv_flow_ws_app_so_fk1|apex_040200
                                                                8               < WWV_FLOW_WS_COL_VALIDATIONS|APEX_040200                wwv_flow_ws_col_val_fk3|apex_040200                                                                 9                 > WWV_FLOW_WORKSHEETS|APEX_040200*                     wwv_flow_ws_col_val_fk|apex_040200
                                                                9                 > WWV_FLOW_WS_WEBSHEET_ATTR|APEX_040200*               wwv_flow_ws_col_val_fk2|apex_040200
                                                                8               < WWV_FLOW_WS_CUSTOM_AUTH_SETUPS|APEX_040200             wwv_flow_ws_auth_setups_fk|apex_040200
                                                                8               < WWV_FLOW_WS_DATA_GRID_Q|APEX_040200                    wwv_flow_ws_data_grid_q_fk|apex_040200                                                                 9                 > WWV_FLOW_WS_WEBPAGES|APEX_040200                     wwv_flow_ws_data_grid_q_fk2|apex_040200
                                                               10                   > WWV_FLOW_WS_APPLICATIONS|APEX_040200*              wwv_flow_ws_webpages_fk|apex_040200
                                                               10                   = WWV_FLOW_WS_WEBPAGES|APEX_040200*                  wwv_flow_ws_webpages_fk2|apex_040200
                                                                1 < WWV_FLOW_CAL_TEMPLATES|APEX_040200                                   wwv_flow_cal_templ_to_flow_fk|apex_040200
                                                                1 < WWV_FLOW_COMPUTATIONS|APEX_040200                                    wwv_flow_computations_fk|apex_040200
                                                                1 < WWV_FLOW_CUSTOM_AUTH_SETUPS|APEX_040200                              wwv_flow_auth_setups_fk|apex_040200
                                                                1 < WWV_FLOW_DYNAMIC_TRANSLATIONS$|APEX_040200                           wwv_flow_dynamic_trans_fk1|apex_040200
                                                                1 < WWV_FLOW_ENTRY_POINTS|APEX_040200                                    wwv_flow_entry_points_fk|apex_040200
                                                                2   < WWV_FLOW_ENTRY_POINT_ARGS|APEX_040200                              wwv_flow_entry_point_args_fk|apex_040200
                                                                1 < WWV_FLOW_ICON_BAR_ATTRIBUTES|APEX_040200                             wwv_flow_iconbarattr_fk|apex_040200
                                                                1 < WWV_FLOW_ICON_BAR|APEX_040200                                        wwv_flow_icon_bar_fk|apex_040200
                                                                1 < WWV_FLOW_INSTALL_BUILD_OPT|APEX_040200                               wwv_flow_install_build_opt_fk|apex_040200                                                                 2   > WWV_FLOW_INSTALL|APEX_040200                                       wwv_flow_install_build_opt_fk3|apex_040200
                                                                3     > WWV_FLOWS|APEX_040200*                                           wwv_flow_install_fk|apex_040200
                                                                3     < WWV_FLOW_INSTALL_CHECKS|APEX_040200                              wwv_flow_install_checks_fk3|apex_040200                                                                 4       > WWV_FLOWS|APEX_040200*                                         wwv_flow_install_checks_fk|apex_040200
                                                                3     < WWV_FLOW_INSTALL_SCRIPTS|APEX_040200                             wwv_flow_install_scripts_fk3|apex_040200                                                                 4       > WWV_FLOWS|APEX_040200*                                         wwv_flow_install_scripts_fk|apex_040200
                                                                2   > WWV_FLOW_PATCHES|APEX_040200                                       wwv_flow_install_build_opt_fk4|apex_040200
                                                                3     > WWV_FLOWS|APEX_040200*                                           wwv_flow_patches_fk|apex_040200
                                                                1 < WWV_FLOW_ITEMS|APEX_040200                                           wwv_flow_items_fk|apex_040200
                                                                1 < WWV_FLOW_LANGUAGE_MAP|APEX_040200                                    wwv_flow_lang_flow_id_fk|apex_040200
                                                                1 < WWV_FLOW_LISTS_OF_VALUES$|APEX_040200                                wwv_flow_lov_fk|apex_040200
                                                                2   < WWV_FLOW_LIST_OF_VALUES_DATA|APEX_040200                           wwv_flow_lov_data_fk|apex_040200
                                                                2   < WWV_FLOW_LOAD_TABLES|APEX_040200                                   wwv_flow_load_tab_fk2|apex_040200                                                                 3     > WWV_FLOWS|APEX_040200*                                           wwv_flow_load_tab_fk1|apex_040200
                                                                3     < WWV_FLOW_LOAD_TABLE_LOOKUPS|APEX_040200                          wwv_flow_load_tab_lk_fk2|apex_040200                                                                 4       > WWV_FLOWS|APEX_040200*                                         wwv_flow_load_tab_lk_fk1|apex_040200
                                                                3     < WWV_FLOW_LOAD_TABLE_RULES|APEX_040200                            wwv_flow_load_tab_rule_fk2|apex_040200                                                                 4       > WWV_FLOWS|APEX_040200*                                         wwv_flow_load_tab_rule_fk1|apex_040200
                                                                1 < WWV_FLOW_LISTS|APEX_040200                                           wwv_flow_lists_flow_fk|apex_040200
                                                                2   < WWV_FLOW_LIST_ITEMS|APEX_040200                                    wwv_flow_list_items_fk|apex_040200
                                                                3     = WWV_FLOW_LIST_ITEMS|APEX_040200*                                 parent_list_item_fk|apex_040200
                                                                1 < WWV_FLOW_LIST_TEMPLATES|APEX_040200                                  wwv_flow_list_template_fk|apex_040200
                                                                1 < WWV_FLOW_LOCK_PAGE|APEX_040200                                       sys_c007221|apex_040200
                                                                1 < WWV_FLOW_MENUS|APEX_040200                                           wwv_flow_menus_flow_fk|apex_040200
                                                                2   < WWV_FLOW_MENU_OPTIONS|APEX_040200                                  wwv_flow_opt_menus_fk|apex_040200
                                                                1 < WWV_FLOW_MENU_TEMPLATES|APEX_040200                                  wwv_flow_menus_t_flow_fk|apex_040200
                                                                1 < WWV_FLOW_MESSAGES$|APEX_040200                                       wwv_flow_messages_fk|apex_040200
                                                                1 < WWV_FLOW_PAGES_RESERVED|APEX_040200                                  wwv_flow_pages_reserved_fk|apex_040200
                                                                1 < WWV_FLOW_PAGE_CACHE|APEX_040200                                      wwv_flow_page_cache_fk|apex_040200
                                                                2   < WWV_FLOW_PAGE_CODE_CACHE|APEX_040200                               wwv_flow_page_code_cache_fk|apex_040200
                                                                1 < WWV_FLOW_PAGE_GROUPS|APEX_040200                                     sys_c007397|apex_040200
                                                                1 < WWV_FLOW_PAGE_SUBMISSIONS|APEX_040200                                wwv_flow_page_sub_fk|apex_040200                                                                 2   > WWV_FLOW_SESSIONS$|APEX_040200                                     wwv_flow_page_sub_sess_fk|apex_040200
                                                                3     < WWV_FLOW_COLLECTIONS$|APEX_040200                                wwv_flow_collection_fk|apex_040200
                                                                4       < WWV_FLOW_COLLECTION_MEMBERS$|APEX_040200                       wwv_flow_collection_membes_fk|apex_040200
                                                                3     < WWV_FLOW_DATA|APEX_040200                                        wwv_flow_data_session_fk|apex_040200
                                                                3     < WWV_FLOW_REQUEST_VERIFICATIONS|APEX_040200                       wwv_flow_request_verif_fk|apex_040200
                                                                3     < WWV_FLOW_RT$USER_SESSIONS|APEX_040200                            wwv_flow_rt$user_sess_fk1|apex_040200                                                                 4       > WWV_FLOW_RT$APPROVALS|APEX_040200                              wwv_flow_rt$user_sess_fk|apex_040200
                                                                5         < WWV_FLOW_RT$APPROVAL_PRIVS|APEX_040200                       wwv_flow_rt$app_privs_fk|apex_040200                                                                 6           > WWV_FLOW_RT$PRIVILEGES|APEX_040200                         wwv_flow_rt$app_privs_fk2|apex_040200
                                                                7             < WWV_FLOW_RT$CLIENT_PRIVILEGES|APEX_040200                wwv_flow_rt$client_privs_fk2|apex_040200                                                                 8               > WWV_FLOW_RT$CLIENTS|APEX_040200                        wwv_flow_rt$client_privs_fk|apex_040200
                                                                9                 > WWV_FLOWS|APEX_040200*                               wwv_flow_rt$clients_appid_fk|apex_040200
                                                                9                 < WWV_FLOW_RT$APPROVALS|APEX_040200*                   wwv_flow_rt$approvals_fk|apex_040200
                                                                7             < WWV_FLOW_RT$HANDLERS|APEX_040200                         wwv_flow_rt$handlers_priv_fk|apex_040200
                                                                8               < WWV_FLOW_RT$ERRORS|APEX_040200                         wwv_flow_rt$errors_handler_fk|apex_040200
                                                                8               < WWV_FLOW_RT$PARAMETERS|APEX_040200                     wwv_flow_rt$params_handler_fk|apex_040200                                                                 8               > WWV_FLOW_RT$TEMPLATES|APEX_040200                      wwv_flow_rt$handlers_temps_fk|apex_040200
                                                                9                 > WWV_FLOW_RT$MODULES|APEX_040200                      wwv_flow_rt$temps_mod_fk|apex_040200
                                                               10                   > WWV_FLOW_RT$PRIVILEGES|APEX_040200*                wwv_flow_rt$modules_priv_fk|apex_040200
                                                                7             < WWV_FLOW_RT$PRIVILEGE_GROUPS|APEX_040200                 wwv_flow_rt$priv_groups_fk|apex_040200                                                                 8               > WWV_FLOW_FND_USER_GROUPS|APEX_040200                   wwv_flow_rt$priv_groups_fk2|apex_040200
                                                                9                 < WWV_FLOW_FND_GROUP_USERS|APEX_040200                 wwv_flow_fnd_gu_int_g_fk|apex_040200
                                                                5         < WWV_FLOW_RT$PENDING_APPROVALS|APEX_040200                    wwv_flow_rt$pend_apprv_fk|apex_040200
                                                                3     < WWV_FLOW_SC_TRANS|APEX_040200                                    wwv_flow_sc_trans_fk2|apex_040200
                                                                3     < WWV_FLOW_TREE_STATE|APEX_040200                                  wwv_flow_tree_state$fk|apex_040200
                                                                1 < WWV_FLOW_PAGE_TMPL_DISP_POINTS|APEX_040200                           wwv_page_tmpl_dp_fk|apex_040200                                                                 2   > WWV_FLOW_TEMPLATES|APEX_040200                                     wwv_page_tmpl_dp_parent_fk|apex_040200
                                                                3     > WWV_FLOWS|APEX_040200*                                           wwv_flow_templates_fk|apex_040200
                                                                1 < WWV_FLOW_PLUGINS|APEX_040200                                         wwv_flow_plugin_flow_fk|apex_040200
                                                                2   < WWV_FLOW_PLUGIN_ATTRIBUTES|APEX_040200                             wwv_flow_plugin_attr_parent_fk|apex_040200                                                                 3     > WWV_FLOWS|APEX_040200*                                           wwv_flow_plugin_attr_flow_fk|apex_040200
                                                                3     = WWV_FLOW_PLUGIN_ATTRIBUTES|APEX_040200*                          wwv_flow_plugin_attr_depend_fk|apex_040200
                                                                3     < WWV_FLOW_PLUGIN_ATTR_VALUES|APEX_040200                          wwv_flow_plugin_attrv_attr_fk|apex_040200                                                                 4       > WWV_FLOWS|APEX_040200*                                         wwv_flow_plugin_attrv_flow_fk|apex_040200
                                                                2   < WWV_FLOW_PLUGIN_EVENTS|APEX_040200                                 wwv_flow_plugin_evnt_parent_fk|apex_040200                                                                 3     > WWV_FLOWS|APEX_040200*                                           wwv_flow_plugin_evnt_flow_fk|apex_040200
                                                                2   < WWV_FLOW_PLUGIN_FILES|APEX_040200                                  wwv_flow_plugin_file_parent_fk|apex_040200                                                                 3     > WWV_FLOWS|APEX_040200*                                           wwv_flow_plugin_file_flow_fk|apex_040200
                                                                1 < WWV_FLOW_PLUGIN_SETTINGS|APEX_040200                                 wwv_flow_plugin_set_flow_fk|apex_040200
                                                                1 < WWV_FLOW_POPUP_LOV_TEMPLATE|APEX_040200                              wwv_flow_fk_poplov_temp|apex_040200
                                                                1 < WWV_FLOW_PROCESSING|APEX_040200                                      wwv_flow_processing_fk|apex_040200
                                                                1 < WWV_FLOW_REPORT_LAYOUTS|APEX_040200                                  wwv_flow_report_layoutse_fk|apex_040200
                                                                1 < WWV_FLOW_REQUIRED_ROLES|APEX_040200                                  wwv_flow_req_roles_fk|apex_040200
                                                                1 < WWV_FLOW_ROW_TEMPLATES|APEX_040200                                   wwv_flow_row_template_fk|apex_040200
                                                                1 < WWV_FLOW_SECURITY_SCHEMES|APEX_040200                                wwv_flow_sec_schemes_fk|apex_040200
                                                                1 < WWV_FLOW_SHARED_QRY_SQL_STMTS|APEX_040200                            wwv_flow_sqry_sql_flow_fk|apex_040200                                                                 2   > WWV_FLOW_SHARED_QUERIES|APEX_040200                                wwv_flow_sqry_sql_sqry_fk|apex_040200
                                                                3     > WWV_FLOWS|APEX_040200*                                           wwv_flow_shdqry_flow_fk|apex_040200
                                                                1 < WWV_FLOW_SHORTCUTS|APEX_040200                                       wwv_flow_shortcuts_to_flow_fk|apex_040200
                                                                1 < WWV_FLOW_TABS|APEX_040200                                            wwv_flow_tabs_fk|apex_040200
                                                                1 < WWV_FLOW_TEMPLATE_PREFERENCES|APEX_040200                            wwv_flow_templ_pref_fk|apex_040200
                                                                1 < WWV_FLOW_THEME_DISPLAY_POINTS|APEX_040200                            wwv_theme_disp_point_fk|apex_040200
                                                                1 < WWV_FLOW_THEME_STYLES|APEX_040200                                    wwv_flow_theme_style_flow_fk|apex_040200
                                                                1 < WWV_FLOW_TOPLEVEL_TABS|APEX_040200                                   wwv_flow_toplev_tab_fk|apex_040200
                                                                1 < WWV_FLOW_TRANSLATABLE_TEXT$|APEX_040200                              wwv_flow_trans_text_fk|apex_040200
                                                                1 < WWV_FLOW_TREES|APEX_040200                                           wwv_flow_tree_fk|apex_040200
                                                                1 < WWV_FLOW_VALIDATIONS|APEX_040200                                     wwv_flow_val_fk|apex_040200
                                                                1 < WWV_MIG_GENERATED_APPLICATIONS|APEX_040200                           wwv_mig_gen_app_flow_id_fk|apex_040200                                                                 2   > WWV_MIG_PROJECTS|APEX_040200                                       wwv_mig_gen_app_proj_id_fk|apex_040200
                                                                3     < WWV_MIG_ACCESS|APEX_040200                                       wwv_mig_acc_fk|apex_040200
                                                                3     < WWV_MIG_FORMS|APEX_040200                                        wwv_mig_forms_project_id_fk|apex_040200
                                                                4       < WWV_MIG_FRM_MODULES|APEX_040200                                wwv_mig_frm_modules_file_id_fk|apex_040200
                                                                5         < WWV_MIG_FRM_FORMMODULES|APEX_040200                          wwv_mig_frm_frmmdl_mdl_id_fk|apex_040200
                                                                6           < WWV_MIG_FRM_ALERTS|APEX_040200                             wwv_mig_frm_alrt_frmmdl_id_fk|apex_040200
                                                                6           < WWV_MIG_FRM_ATTACHEDLIBRARY|APEX_040200                    wwv_mig_frm_atlib_frmmdl_id_fk|apex_040200
                                                                6           < WWV_MIG_FRM_BLOCKS|APEX_040200                             wwv_mig_frm_blk_frmmdl_id_fk|apex_040200
                                                                7             < WWV_MIG_FRM_BLK_DSA|APEX_040200                          wwv_mig_frm_blk_dsa_blk_id_fk|apex_040200
                                                                7             < WWV_MIG_FRM_BLK_DSC|APEX_040200                          wwv_mig_frm_blk_dsc_blk_id_fk|apex_040200
                                                                7             < WWV_MIG_FRM_BLK_ITEMS|APEX_040200                        wwv_mig_frm_bi_blk_id_fk|apex_040200
                                                                8               < WWV_MIG_FRM_BLK_ITEM_LIE|APEX_040200                   wwv_mig_frm_bi_lie_item_id_fk|apex_040200
                                                                8               < WWV_MIG_FRM_BLK_ITEM_RADIO|APEX_040200                 wwv_mig_frm_bir_item_id_fk|apex_040200
                                                                8               < WWV_MIG_FRM_BLK_ITEM_TRIGGERS|APEX_040200              wwv_mig_frm_bi_trg_item_id_fk|apex_040200
                                                                8               < WWV_MIG_FRM_REV_BLK_ITEMS|APEX_040200                  wwv_mig_frm_rev_bi_item_id_fk|apex_040200
                                                                7             < WWV_MIG_FRM_BLK_RELATIONS|APEX_040200                    wwv_mig_frm_blk_rel_blk_id_fk|apex_040200
                                                                7             < WWV_MIG_FRM_BLK_TRIGGERS|APEX_040200                     wwv_mig_frm_blk_trg_blk_id_fk|apex_040200
                                                                7             < WWV_MIG_FRM_REV_BLOCKS|APEX_040200                       wwv_mig_frm_rev_blocks_id_fk|apex_040200
                                                                6           < WWV_MIG_FRM_CANVAS|APEX_040200                             wwv_mig_frm_canvs_frmmdl_id_fk|apex_040200
                                                                7             < WWV_MIG_FRM_CNVS_GRAPHICS|APEX_040200                    wwv_mig_frm_cg_cnvs_id_fk|apex_040200
                                                                8               < WWV_MIG_FRM_CNVG_COMPOUNDTEXT|APEX_040200              wwv_mig_frm_cpdtxt_grphs_id_fk|apex_040200
                                                                9                 < WWV_MIG_FRM_CPDTXT_TEXTSEGMENT|APEX_040200           wwv_mig_frm_txtsgmt_cpd_id_fk|apex_040200
                                                                7             < WWV_MIG_FRM_CNVS_TABPAGE|APEX_040200                     wwv_mig_frm_ctp_cnvs_id_fk|apex_040200
                                                                6           < WWV_MIG_FRM_COORDINATES|APEX_040200                        wwv_mig_frm_crdnt_frmmdl_id_fk|apex_040200
                                                                6           < WWV_MIG_FRM_EDITOR|APEX_040200                             wwv_mig_frm_edtr_frmmdl_id_fk|apex_040200
                                                                6           < WWV_MIG_FRM_FMB_MENU|APEX_040200                           wwv_mig_frm_menu_frmmdl_id_fk|apex_040200
                                                                7             < WWV_MIG_FRM_FMB_MENU_MENUITEM|APEX_040200                wwv_mig_fmb_menuitem_menuid_fk|apex_040200
                                                                8               < WWV_MIG_FRM_FMB_MENUITEM_ROLE|APEX_040200              wwv_mig_fmb_mnuitemrl_mitm_fk|apex_040200
                                                                6           < WWV_MIG_FRM_LOV|APEX_040200                                wwv_mig_frm_lov_frmmdl_id_fk|apex_040200
                                                                7             < WWV_MIG_FRM_LOVCOLUMNMAPPING|APEX_040200                 wwv_mig_frm_lvcm_frmmdl_id_fk|apex_040200
                                                                8               < WWV_MIG_FRM_REV_LOVCOLMAPS|APEX_040200                 wwv_mig_frm_rev_lcm_id_fk|apex_040200
                                                                7             < WWV_MIG_FRM_REV_LOV|APEX_040200                          wwv_mig_frm_rev_lov_id_fk|apex_040200
                                                                6           < WWV_MIG_FRM_MODULEPARAMETER|APEX_040200                    wwv_mig_frm_mdlpr_frmmdl_id_fk|apex_040200
                                                                6           < WWV_MIG_FRM_OBJECTGROUP|APEX_040200                        wwv_mig_frm_objgp_frmmdl_id_fk|apex_040200
                                                                7             < WWV_MIG_FRM_OBJECTGROUPCHILD|APEX_040200                 wwv_mig_frm_objgpc_objgp_id_fk|apex_040200
                                                                6           < WWV_MIG_FRM_PROGRAMUNIT|APEX_040200                        wwv_mig_frm_pgut_frmmdl_id_fk|apex_040200
                                                                6           < WWV_MIG_FRM_PROPERTYCLASS|APEX_040200                      wwv_mig_frm_ppcl_frmmdl_id_fk|apex_040200
                                                                6           < WWV_MIG_FRM_RECORDGROUPS|APEX_040200                       wwv_mig_frm_recgp_frmmdl_id_fk|apex_040200
                                                                7             < WWV_MIG_FRM_RECORDGROUPCOLUMN|APEX_040200                wwv_mig_frm_rgc_recgp_id_fk|apex_040200
                                                                6           < WWV_MIG_FRM_REPORT|APEX_040200                             wwv_mig_frm_rpt_frmmdl_id_fk|apex_040200
                                                                6           < WWV_MIG_FRM_REV_FORMMODULES|APEX_040200                    wwv_mig_frm_rev_frmmdl_id_fk|apex_040200
                                                                6           < WWV_MIG_FRM_TRIGGERS|APEX_040200                           wwv_mig_frm_trg_frmmdl_id_fk|apex_040200
                                                                6           < WWV_MIG_FRM_VISUALATTRIBUTES|APEX_040200                   wwv_mig_frm_visat_frmmdl_id_fk|apex_040200
                                                                6           < WWV_MIG_FRM_WINDOWS|APEX_040200                            wwv_mig_frm_wndow_frmmdl_id_fk|apex_040200
                                                                3     < WWV_MIG_FRM_MENUS|APEX_040200                                    wwv_mig_menus_project_id_fk|apex_040200
                                                                4       < WWV_MIG_FRM_MENUS_MODULES|APEX_040200                          wwv_mig_mnu_modules_file_id_fk|apex_040200
                                                                5         < WWV_MIG_FRM_MENUS_MENUMODULES|APEX_040200                    wwv_mig_mnu_mnumdl_mdl_id_fk|apex_040200
                                                                6           < WWV_MIG_FRM_MENUSMODULEROLES|APEX_040200                   wwv_mig_mmodrole_id_fk|apex_040200
                                                                6           < WWV_MIG_FRM_MENUS_PROGRAMUNIT|APEX_040200                  wwv_mig_mnu_progunit_id_fk|apex_040200
                                                                6           < WWV_MIG_FRM_MENU|APEX_040200                               wwv_mig_mnu_id_fk|apex_040200
                                                                7             < WWV_MIG_FRM_MENU_MENUITEM|APEX_040200                    wwv_mig_mnuitem_id_fk|apex_040200
                                                                8               < WWV_MIG_FRM_MENUITEM_ROLE|APEX_040200                  wwv_mig_mnuitemrole_id_fk|apex_040200
                                                                3     < WWV_MIG_FRM_REV_APEX_APP|APEX_040200                             wwv_mig_frm_rev_apex_app_fk|apex_040200
                                                                3     < WWV_MIG_OLB|APEX_040200                                          wwv_mig_olb_project_id_fk|apex_040200
                                                                4       < WWV_MIG_OLB_MODULES|APEX_040200                                wwv_mig_olb_modules_file_id_fk|apex_040200
                                                                5         < WWV_MIG_OLB_OBJECTLIBRARY|APEX_040200                        wwv_mig_olb_objlib_mdl_id_fk|apex_040200
                                                                6           < WWV_MIG_OLB_BLOCK|APEX_040200                              wwv_mig_olb_block_objlib_id_fk|apex_040200
                                                                7             < WWV_MIG_OLB_BLK_DATASOURCECOL|APEX_040200                wwv_mig_olb_blk_dsc_blk_id_fk|apex_040200
                                                                7             < WWV_MIG_OLB_BLK_ITEM|APEX_040200                         wwv_mig_olb_blk_item_blk_id_fk|apex_040200
                                                                8               < WWV_MIG_OLB_BLK_ITEM_LIE|APEX_040200                   wwv_mig_olb_bil_item_id_fk|apex_040200
                                                                8               < WWV_MIG_OLB_BLK_ITEM_TRIGGER|APEX_040200               wwv_mig_olb_bit_item_id_fk|apex_040200
                                                                7             < WWV_MIG_OLB_BLK_TRIGGER|APEX_040200                      wwv_mig_olb_blk_trgr_blk_id_fk|apex_040200
                                                                6           < WWV_MIG_OLB_CANVAS|APEX_040200                             wwv_mig_olb_canvs_objlib_id_fk|apex_040200
                                                                7             < WWV_MIG_OLB_CNVS_GRAPHICS|APEX_040200                    wwv_mig_olb_cg_cnvs_id_fk|apex_040200
                                                                8               < WWV_MIG_OLB_CG_COMPOUNDTEXT|APEX_040200                wwv_mig_olb_cg_ct_grphs_id_fk|apex_040200
                                                                9                 < WWV_MIG_OLB_CG_CT_TEXTSEGMENT|APEX_040200            wwv_mig_olb_cg_ct_ts_ct_id_fk|apex_040200
                                                                6           < WWV_MIG_OLB_OBJECTLIBRARYTAB|APEX_040200                   wwv_mig_olb_olt_objlib_id_fk|apex_040200
                                                                7             < WWV_MIG_OLB_OLT_ALERT|APEX_040200                        wwv_mig_olb_olt_alrt_olt_id_fk|apex_040200
                                                                7             < WWV_MIG_OLB_OLT_BLOCK|APEX_040200                        wwv_mig_olb_t_block_olt_id_fk|apex_040200
                                                                8               < WWV_MIG_OLB_OLT_BLK_ITEM|APEX_040200                   wwv_mig_olb_olt_bi_blk_id_fk|apex_040200
                                                                9                 < WWV_MIG_OLB_OLT_BLK_ITEM_TRIGR|APEX_040200           wwv_mig_olb_olt_bit_item_id_fk|apex_040200
                                                                7             < WWV_MIG_OLB_OLT_CANVAS|APEX_040200                       wwv_mig_olb_t_canvas_olt_id_fk|apex_040200
                                                                8               < WWV_MIG_OLB_OLT_CNVS_GRAPHICS|APEX_040200              wwv_mig_olb_olt_cg_cnvs_id_fk|apex_040200
                                                                7             < WWV_MIG_OLB_OLT_GRAPHICS|APEX_040200                     wwv_mig_olb_t_grphcs_olt_id_fk|apex_040200
                                                                7             < WWV_MIG_OLB_OLT_ITEM|APEX_040200                         wwv_mig_olb_olt_item_olt_id_fk|apex_040200
                                                                7             < WWV_MIG_OLB_OLT_MENU|APEX_040200                         wwv_mig_olb_olt_menu_olt_id_fk|apex_040200
                                                                8               < WWV_MIG_OLB_OLT_MENU_MENUITEM|APEX_040200              wwv_mig_olb_olt_mmi_menu_id_fk|apex_040200
                                                                7             < WWV_MIG_OLB_OLT_OBJECTGROUP|APEX_040200                  wwv_mig_olb_t_objgrp_olt_id_fk|apex_040200
                                                                8               < WWV_MIG_OLB_OLT_OB_OBJGRPCHILD|APEX_040200             wwv_mig_olb_olt_ob_ogc_obid_fk|apex_040200
                                                                7             < WWV_MIG_OLB_OLT_REPORT|APEX_040200                       wwv_mig_olb_t_report_olt_id_fk|apex_040200
                                                                7             < WWV_MIG_OLB_OLT_TABPAGE|APEX_040200                      wwv_mig_olb_t_tabpage_oltid_fk|apex_040200
                                                                8               < WWV_MIG_OLB_OLT_TABPG_GRAPHICS|APEX_040200             wwv_mig_olb_olt_tpg_tp_id_fk|apex_040200
                                                                9                 < WWV_MIG_OLB_T_TP_G_GRAPHICS|APEX_040200              wwv_mig_olb_t_tp_gg_g_id_fk|apex_040200
                                                               10                   < WWV_MIG_OLB_T_TP_GG_CPDTXT|APEX_040200             wwv_mig_olb_t_tp_gg_ct_g_id_fk|apex_040200
                                                               11                     < WWV_MIG_OLB_T_TP_GG_CT_TXTSGT|APEX_040200        wwv_mig_olb_ttpggctts_ctid_fk|apex_040200
                                                               10                   < WWV_MIG_OLB_T_TP_GG_GRAPHICS|APEX_040200           wwv_mig_olb_t_tp_ggg_g_id_fk|apex_040200
                                                               11                     < WWV_MIG_OLB_T_TP_GGG_CPDTXT|APEX_040200          wwv_mig_olb_ttp_ggg_ct_gid_fk|apex_040200
                                                               12                       < WWV_MIG_OLB_T_TP_GGG_CT_TXTSGT|APEX_040200     wwv_mig_olb_ttpgggctts_ctid_fk|apex_040200
                                                               11                     < WWV_MIG_OLB_T_TP_GGG_GRAPHICS|APEX_040200        wwv_mig_olb_t_tp_gggg_g_id_fk|apex_040200
                                                               12                       < WWV_MIG_OLB_T_TP_GGGG_CPDTXT|APEX_040200       wwv_mig_olb_ttpggggct_g_id_fk|apex_040200
                                                               13                         < WWV_MIG_OLB_T_TP_GGGG_CT_TXSGT|APEX_040200   wwv_mig_olb_ttpggggcts_ctid_fk|apex_040200
                                                               12                       < WWV_MIG_OLB_T_TP_GGGG_GRAPHICS|APEX_040200     wwv_mig_olb_ttpggggg_g_id_fk|apex_040200
                                                               13                         < WWV_MIG_OLB_T_TP_GGGGG_CPDTXT|APEX_040200    wwv_mig_olb_ttpgggggct_g_id_fk|apex_040200
                                                               14                           < WWV_MIG_OLB_T_TP_GGGGG_CT_TXST|APEX_040200 wwv_mig_olb_ttp5gcts_ct_id_fk|apex_040200
                                                                7             < WWV_MIG_OLB_OLT_VISUALATTRBUTE|APEX_040200               wwv_mig_olb_olt_va_olt_id_fk|apex_040200
                                                                7             < WWV_MIG_OLB_OLT_WINDOW|APEX_040200                       wwv_mig_olb_olt_wndow_oltid_fk|apex_040200
                                                                6           < WWV_MIG_OLB_PROGRAMUNIT|APEX_040200                        wwv_mig_olb_pu_objlib_id_fk|apex_040200
                                                                6           < WWV_MIG_OLB_PROPERTYCLASS|APEX_040200                      wwv_mig_olb_pc_objlib_id_fk|apex_040200
                                                                6           < WWV_MIG_OLB_VISUALATTRIBUTE|APEX_040200                    wwv_mig_olb_va_objlib_id_fk|apex_040200
                                                                6           < WWV_MIG_OLB_WINDOW|APEX_040200                             wwv_mig_olb_wndow_objlib_id_fk|apex_040200
                                                                3     < WWV_MIG_PLSQL_LIBS|APEX_040200                                   wwv_mig_plls_project_id_fk|apex_040200
                                                                3     < WWV_MIG_PROJECT_COMPONENTS|APEX_040200                           wwv_mig_proj_comp_fk|apex_040200
                                                                3     < WWV_MIG_PROJECT_TRIGGERS|APEX_040200                             wwv_mig_proj_trig_fk|apex_040200
                                                                3     < WWV_MIG_RPTS|APEX_040200                                         wwv_mig_rpts_project_id_fk|apex_040200
                                                                4       < WWV_MIG_REPORT|APEX_040200                                     wwv_mig_rep_file_id_fk|apex_040200
                                                                5         < WWV_MIG_RPT_DATA|APEX_040200                                 wwv_mig_repdata_id_fk|apex_040200
                                                                6           < WWV_MIG_RPT_DATASRC|APEX_040200                            wwv_mig_repsrc_id_fk|apex_040200
                                                                7             < WWV_MIG_RPT_DATASRC_GRP|APEX_040200                      wwv_mig_grp_id_fk|apex_040200
                                                                8               < WWV_MIG_RPT_GRP_DATAITEM|APEX_040200                   wwv_mig_grp_dataitem_id_fk|apex_040200
                                                                9                 < WWV_MIG_RPT_GRP_DATAITEM_DESC|APEX_040200            wwv_mig_grp_itemdesc_id_fk|apex_040200
                                                                9                 < WWV_MIG_RPT_GRP_DATAITEM_PRIV|APEX_040200            wwv_mig_grp_itempriv_id_fk|apex_040200
                                                                8               < WWV_MIG_RPT_GRP_FIELD|APEX_040200                      wwv_mig_grp_fld_id_fk|apex_040200
                                                                8               < WWV_MIG_RPT_GRP_FILTER|APEX_040200                     wwv_mig_grp_fltr_id_fk|apex_040200
                                                                8               < WWV_MIG_RPT_GRP_FORMULA|APEX_040200                    wwv_mig_grp_form_id_fk|apex_040200
                                                                8               < WWV_MIG_RPT_GRP_ROWDELIM|APEX_040200                   wwv_mig_grp_row_id_fk|apex_040200
                                                                8               < WWV_MIG_RPT_GRP_SUMMARY|APEX_040200                    wwv_mig_grp_sum_id_fk|apex_040200
                                                                7             < WWV_MIG_RPT_DATASRC_SELECT|APEX_040200                   wwv_mig_select_id_fk|apex_040200
                                                                6           < WWV_MIG_RPT_DATA_SUMMARY|APEX_040200                       wwv_mig_repsum_id_fk|apex_040200
                                                                5         < WWV_MIG_RPT_REPORTPRIVATE|APEX_040200                        wwv_mig_rptpriv_id_fk|apex_040200
WWV_FLOW_ADVISOR_CATEGORIES|APEX_040200          2       3      0 WWV_FLOW_ADVISOR_CATEGORIES|APEX_040200                                ROOT
                                                                1 < WWV_FLOW_ADVISOR_CHECKS|APEX_040200                                  wwv_flow_adv_chk_cat_fk|apex_040200
                                                                2   < WWV_FLOW_ADVISOR_CHECK_MSGS|APEX_040200                            wwv_flow_adv_chk_msg_check_fk|apex_040200
WWV_FLOW_BUGS|APEX_040200                       13      11      0 WWV_FLOW_BUGS|APEX_040200                                              ROOT
                                                                1 < WWV_FLOW_TEAMDEV_TAG_CLOUD|APEX_040200                               wwv_flow_teamdev_tc_b|apex_040200                                                                 2   > WWV_FLOW_FEATURES|APEX_040200                                      wwv_flow_teamdev_tc_f|apex_040200
                                                                3     = WWV_FLOW_FEATURES|APEX_040200*                                   wwv_flow_features_par_feat_fk|apex_040200
                                                                3     < WWV_FLOW_FEATURE_HISTORY|APEX_040200                             wwv_flow_feature_hist_fk|apex_040200
                                                                3     < WWV_FLOW_FEATURE_PROGRESS|APEX_040200                            wwv_flow_feature_prog_fk|apex_040200
                                                                3     < WWV_FLOW_TEAM_FILES|APEX_040200                                  wwv_flow_team_files_fk1|apex_040200                                                                 4       > WWV_FLOW_EVENTS|APEX_040200                                    wwv_flow_team_files_fk3|apex_040200
                                                                4       > WWV_FLOW_FEEDBACK|APEX_040200                                  wwv_flow_team_files_fk4|apex_040200
                                                                5         < WWV_FLOW_FEEDBACK_FOLLOWUP|APEX_040200                       wwv_flow_feedback_fup_fk|apex_040200
                                                                5         < WWV_FLOW_TEAM_FILES|APEX_040200*                             wwv_flow_team_files_fk5|apex_040200                                                                 4       > WWV_FLOW_TASKS|APEX_040200                                     wwv_flow_team_files_fk2|apex_040200
                                                                5         < WWV_FLOW_TASK_PROGRESS|APEX_040200                           wwv_flow_task_prog_fk|apex_040200
                                                                5         < WWV_FLOW_TEAMDEV_TAG_CLOUD|APEX_040200*                      wwv_flow_teamdev_tc_t|apex_040200 WWV_FLOW_DATA_LOAD_BAD_LOG|APEX_040200           1       2      0 WWV_FLOW_DATA_LOAD_BAD_LOG|APEX_040200                                 ROOT                                                                 1 > WWV_FLOW_DATA_LOAD_UNLOAD|APEX_040200                                wwv_flow_data_load_bad_log_fk1|apex_040200
WWV_FLOW_DICTIONARY_VIEWS|APEX_040200            1       1      0 WWV_FLOW_DICTIONARY_VIEWS|APEX_040200                                  ROOT
                                                                1 = WWV_FLOW_DICTIONARY_VIEWS|APEX_040200*                               wwv_flow_dict_view_parent_fk|apex_040200
WWV_FLOW_FILE_OBJECTS$|FLOWS_FILES               5       6      0 WWV_FLOW_FILE_OBJECTS$|FLOWS_FILES                                     ROOT
                                                                1 < WWV_FLOW_IMPORT_EXPORT|APEX_040200                                   wwv_flow_import_export_fk|apex_040200
                                                                1 < WWV_FLOW_SW_BINDS|APEX_040200                                        wwv_flow_sw_bind_fk|apex_040200
                                                                1 < WWV_FLOW_SW_RESULTS|APEX_040200                                      wwv_flow_sw_result_fk|apex_040200
                                                                2   < WWV_FLOW_SW_DETAIL_RESULTS|APEX_040200                             wwv_flow_sw_d_result_fk|apex_040200
                                                                1 < WWV_FLOW_SW_STMTS|APEX_040200                                        wwv_flow_sw_stmts_fk|apex_040200 WWV_FLOW_FLASH_MAP_FILES|APEX_040200             2       3      0 WWV_FLOW_FLASH_MAP_FILES|APEX_040200                                   ROOT                                                                 1 > WWV_FLOW_FLASH_MAP_FOLDERS|APEX_040200                               wwv_flow_flash_map_files_fk|apex_040200
                                                                1 < WWV_FLOW_FLASH_MAP_REGIONS|APEX_040200                               wwv_flow_flash_map_reg_fk|apex_040200 WWV_FLOW_HNT_ARGUMENT_INFO|APEX_040200           1       2      0 WWV_FLOW_HNT_ARGUMENT_INFO|APEX_040200                                 ROOT                                                                 1 > WWV_FLOW_HNT_PROCEDURE_INFO|APEX_040200                              wwv_flow_hnt_arg_info_proc_fk|apex_040200
WWV_FLOW_HNT_COLUMN_DICT|APEX_040200             1       2      0 WWV_FLOW_HNT_COLUMN_DICT|APEX_040200                                   ROOT
                                                                1 < WWV_FLOW_HNT_COL_DICT_SYN|APEX_040200                                wwv_flow_hnt_col_dict_syn_fk|apex_040200 WWV_FLOW_HNT_COLUMN_INFO|APEX_040200             4       4      0 WWV_FLOW_HNT_COLUMN_INFO|APEX_040200                                   ROOT                                                                 1 > WWV_FLOW_HNT_GROUPS|APEX_040200                                      wwv_flow_hnt_col_info_grp_fk|apex_040200
                                                                2   > WWV_FLOW_HNT_TABLE_INFO|APEX_040200                                wwv_flow_hnt_groups_tab_fk|apex_040200
                                                                3     < WWV_FLOW_HNT_COLUMN_INFO|APEX_040200*                            wwv_flow_hnt_col_info_tab_fk|apex_040200
                                                                1 < WWV_FLOW_HNT_LOV_DATA|APEX_040200                                    wwv_flow_hnt_lov_data_col_fk|apex_040200 WWV_FLOW_MAIL_ATTACHMENTS|APEX_040200            1       2      0 WWV_FLOW_MAIL_ATTACHMENTS|APEX_040200                                  ROOT                                                                 1 > WWV_FLOW_MAIL_QUEUE|APEX_040200                                      wwv_flow_mail_attachments_fk1|apex_040200
WWV_FLOW_MODELS|APEX_040200                      4       4      0 WWV_FLOW_MODELS|APEX_040200                                            ROOT
                                                                1 < WWV_FLOW_MODEL_PAGES|APEX_040200                                     wwv_flow_model_pages_fk|apex_040200
                                                                2   = WWV_FLOW_MODEL_PAGES|APEX_040200*                                  wwv_flow_model_pages_fk2|apex_040200
                                                                2   < WWV_FLOW_MODEL_PAGE_REGIONS|APEX_040200                            wwv_flow_mpr_fk|apex_040200
                                                                3     < WWV_FLOW_MODEL_PAGE_COLS|APEX_040200                             wwv_flow_model_page_cols_fk|apex_040200 WWV_FLOW_PKG_APPLICATIONS|APEX_040200            4       3      0 WWV_FLOW_PKG_APPLICATIONS|APEX_040200                                  ROOT                                                                 1 > WWV_FLOW_PKG_APP_CATEGORIES|APEX_040200                              wwv_flow_pkg_app_fk1|apex_040200
                                                                2   < WWV_FLOW_PKG_APPLICATIONS|APEX_040200*                             wwv_flow_pkg_app_fk2|apex_040200
                                                                2   < WWV_FLOW_PKG_APPLICATIONS|APEX_040200*                             wwv_flow_pkg_app_fk3|apex_040200
                                                                1 < WWV_FLOW_PKG_APP_IMAGES|APEX_040200                                  wwv_flow_pkg_app_images_fk1|apex_040200 WWV_FLOW_QB_SAVED_COND|APEX_040200               3       4      0 WWV_FLOW_QB_SAVED_COND|APEX_040200                                     ROOT                                                                 1 > WWV_FLOW_QB_SAVED_QUERY|APEX_040200                                  sys_c007435|apex_040200
                                                                2   < WWV_FLOW_QB_SAVED_JOIN|APEX_040200                                 sys_c007442|apex_040200
                                                                2   < WWV_FLOW_QB_SAVED_TABS|APEX_040200                                 sys_c007449|apex_040200
WWV_FLOW_RESTRICTED_SCHEMAS|APEX_040200          1       2      0 WWV_FLOW_RESTRICTED_SCHEMAS|APEX_040200                                ROOT
                                                                1 < WWV_FLOW_RSCHEMA_EXCEPTIONS|APEX_040200                              wwv_flow_rschema_exceptions_fk|apex_040200 WWV_MIG_FRM_OLB_XMLTAGTABLEMAP|APEX_040200       1       1      0 WWV_MIG_FRM_OLB_XMLTAGTABLEMAP|APEX_040200                             ROOT                                                                 1 = WWV_MIG_FRM_OLB_XMLTAGTABLEMAP|APEX_040200*                          wwv_mig_olb_xmltagtablemap_fk|apex_040200 WWV_MIG_FRM_XMLTAGTABLEMAP|APEX_040200           1       1      0 WWV_MIG_FRM_XMLTAGTABLEMAP|APEX_040200                                 ROOT                                                                 1 = WWV_MIG_FRM_XMLTAGTABLEMAP|APEX_040200*                              wwv_mig_frm_xmltagtablemap_fk|apex_040200 WWV_MIG_MENU_XMLTAGTABLEMAP|APEX_040200          1       1      0 WWV_MIG_MENU_XMLTAGTABLEMAP|APEX_040200                                ROOT                                                                 1 = WWV_MIG_MENU_XMLTAGTABLEMAP|APEX_040200*                             wwv_mig_mnu_xmltagtablemap_fk|apex_040200 WWV_MIG_RPT_XMLTAGTABLEMAP|APEX_040200           1       1      0 WWV_MIG_RPT_XMLTAGTABLEMAP|APEX_040200                                 ROOT                                                                 1 = WWV_MIG_RPT_XMLTAGTABLEMAP|APEX_040200*                              wwv_mig_rpt_xmltagtablemap_fk|apex_040200 WWV_PURGE_DATAFILES|APEX_040200                  4       5      0 WWV_PURGE_DATAFILES|APEX_040200                                        ROOT                                                                 1 > WWV_PURGE_WORKSPACES|APEX_040200                                     wwv_purge_datafiles_fk1|apex_040200
                                                                2   < WWV_PURGE_EMAILS|APEX_040200                                       wwv_purge_emails_fk1|apex_040200
                                                                3     < WWV_PURGE_WORKSPACE_RESPONSES|APEX_040200                        wwv_purge_workspace_resp_fk1|apex_040200
                                                                2   < WWV_PURGE_SCHEMAS|APEX_040200                                      wwv_purge_schemas_fk1|apex_040200 XS$ACE_PRIV|SYS                                 36      25      0 XS$ACE_PRIV|SYS                                                        ROOT                                                                 1 > XS$ACE|SYS                                                           xs$ace_priv_fk1|sys
                                                                2   > XS$ACL|SYS                                                         xs$ace_fk1|sys
                                                                3     < XS$ACL_PARAM|SYS                                                 xs$acl_param_fk2|sys                                                                 4       > XS$POLICY_PARAM|SYS                                            xs$acl_param_fk1|sys
                                                                5         > XS$DSEC|SYS                                                  xs$policy_param_fk1|sys
                                                                6           < XS$ATTR_SEC|SYS                                            xs$attr_sec_fk1|sys                                                                 7             > XS$OBJ|SYS                                               xs$attr_sec_fk2|sys
                                                                8               < XS$ACE_PRIV|SYS*                                       xs$ace_priv_fk2|sys
                                                                8               < XS$ACL|SYS*                                            xs$acl_fk1|sys
                                                                8               < XS$ACL|SYS*                                            xs$acl_fk2|sys
                                                                8               < XS$ACL|SYS*                                            xs$acl_fk3|sys
                                                                8               < XS$AGGR_PRIV|SYS                                       xs$aggr_priv_fk2|sys
                                                                8               < XS$DSEC|SYS*                                           xs$dsec_fk|sys
                                                                8               < XS$INSTSET_ACL|SYS                                     xs$instset_acl_fk2|sys                                                                 9                 > XS$INSTSET_RULE|SYS                                  xs$instset_acl_fk1|sys
                                                               10                   > XS$INSTSET_LIST|SYS                                xs$instset_rule_fk|sys
                                                               11                     > XS$DSEC|SYS*                                     xs$dsec_instset_fk|sys
                                                               11                     < XS$INSTSET_INH|SYS                               xs$instset_inh_fk|sys
                                                               12                       < XS$INSTSET_INH_KEY|SYS                         xs$instset_inh_key_fk|sys
                                                                8               < XS$NSTMPL|SYS                                          xs$nstmpl_fk1|sys                                                                 9                 > XS$ACL|SYS*                                          xs$nstmp1_fk2|sys
                                                                9                 < XS$NSTMPL_ATTR|SYS                                   xs$nstmpl_attr_fk|sys
                                                                8               < XS$PRIN|SYS                                            xs$prin_fk1|sys
                                                                9                 < XS$PROXY_ROLE|SYS                                    xs$proxy_role_fk2|sys                                                                10                   > XS$OBJ|SYS*                                        xs$proxy_role_fk1|sys
                                                                9                 < XS$ROLE_GRANT|SYS                                    xs$role_grant_fk1|sys                                                                10                   > XS$PRIN|SYS*                                       xs$role_grant_fk2|sys
                                                                8               < XS$PRIV|SYS                                            xs$priv_fk1|sys                                                                 9                 > XS$SECCLS|SYS                                        xs$priv_fk2|sys
                                                               10                   > XS$OBJ|SYS*                                        xs$seccls_fk1|sys
                                                               10                   < XS$SECCLS_H|SYS                                    xs$seccls_h_fk1|sys                                                                11                     > XS$OBJ|SYS*                                      xs$seccls_h_fk2|sys
                                                                8               < XS$ROLESET_ROLES|SYS                                   xs$roleset_roles_fk2|sys                                                                 9                 > XS$ROLESET|SYS                                       xs$roleset_roles_fk1|sys
                                                               10                   > XS$OBJ|SYS*                                        xs$roleset_fk|sys
                                                                8               > XS$TENANT|SYS                                          xs$obj_fk|sys

815 rows selected.

Elapsed: 00:00:01.45
Network summary 1 - by network

Network                                     #Links  #Nodes    Max Lev
------------------------------------------ ------- ------- ----------
WWV_FLOW_HNT_ARGUMENT_INFO|APEX_040200           2       2          1
AQ$_INTERNET_AGENTS|SYSTEM                       2       2          1
WWV_FLOW_DICTIONARY_VIEWS|APEX_040200            2       1          1
WWV_FLOW_DATA_LOAD_BAD_LOG|APEX_040200           2       2          1
ATTRIBUTE_TRANSFORMATIONS$|SYS                   2       2          1
WWV_MIG_RPT_XMLTAGTABLEMAP|APEX_040200           2       1          1
CLOUD|GSMADMIN_INTERNAL                          2       2          1
CSW_DOMAININFO$|MDSYS                            2       2          1
DAM_CONFIG_PARAM$|SYS                            2       2          1
DBFS$_MOUNTS|SYS                                 2       2          1
DBFS_SFS$_FSTP|SYS                               2       2          1
WWV_MIG_MENU_XMLTAGTABLEMAP|APEX_040200          2       1          1
WWV_MIG_FRM_XMLTAGTABLEMAP|APEX_040200           2       1          1
DBMS_PARALLEL_EXECUTE_CHUNKS$|SYS                2       2          1
DEPT|SCOTT                                       2       2          1
WWV_MIG_FRM_OLB_XMLTAGTABLEMAP|APEX_040200       2       1          1
FLIGHTS|TEST                                     2       2          1
WWV_FLOW_RESTRICTED_SCHEMAS|APEX_040200          2       2          1
MVIEW$_ADV_BASETABLE|SYSTEM                      2       2          1
OGIS_GEOMETRY_COLUMNS|MDSYS                      2       2          1
OLS_DIR_BUSINESSES|MDSYS                         2       2          1
WWV_FLOW_MAIL_ATTACHMENTS|APEX_040200            2       2          1
PLANETS|TEST                                     2       2          1
WWV_FLOW_HNT_COLUMN_DICT|APEX_040200             2       2          1
REPCAT$_COLUMN_GROUP|SYSTEM                      2       2          1
REPCAT$_DDL|SYSTEM                               2       2          1
REPCAT$_PRIORITY_GROUP|SYSTEM                    2       2          1
ROADS|TEST                                       2       2          1
SCHEDULER$_JOB_OUTPUT|SYS                        2       2          1
SDO_WS_CONFERENCE_PARTICIPANTS|MDSYS             2       2          1
WRM$_DATABASE_INSTANCE|SYS                       2       2          1
APEX$ARCHIVE_CONTENTS|APEX_040200                2       2          1
WWV_FLOW_FLASH_MAP_FILES|APEX_040200             3       3          1
WWV_FLOW_ADVISOR_CATEGORIES|APEX_040200          3       3          2
BSLN_BASELINES|DBSNMP                            3       3          1
ARCS|TEST                                        3       2          2
PLSQL_PROFILER_DATA|BENCH                        3       3          2
HS$_PARALLEL_HISTOGRAM_DATA|SYS                  4       4          2
DBFS_SFS$_FS|SYS                                 4       4          2
DBMSHP_FUNCTION_INFO|BENCH                       4       3          2
WWV_FLOW_QB_SAVED_COND|APEX_040200               4       4          2
OLS_DIR_CATEGORIES|MDSYS                         4       3          1
WWV_PURGE_DATAFILES|APEX_040200                  5       5          3
APEX$_WS_FILES|APEX_040200                       5       5          2
WWV_FLOW_PKG_APPLICATIONS|APEX_040200            5       3          2
WWV_FLOW_MODELS|APEX_040200                      5       4          3
DR$THS_BT|CTXSYS                                 5       4          2
WWV_FLOW_HNT_COLUMN_INFO|APEX_040200             5       4          3
REGISTRY$DEPENDENCIES|SYS                        6       4          2
REPCAT$_AUDIT_ATTRIBUTE|SYSTEM                   6       6          4
WWV_FLOW_FILE_OBJECTS$|FLOWS_FILES               6       6          2
WFS_FEATUREINSTANCEMETADATA$|MDSYS               7       7          2
DATABASE_POOL_ADMIN|GSMADMIN_INTERNAL            7       5          5
TSDP_ASSOCIATION$|SYS                            9       9          4
BENCH_RUNS|BENCH                                10       9          5
CHANNELS|SH                                     11       8          5
WI$_CAPTURE_FILE|SYS                            11       9          6
HS$_BASE_CAPS|SYS                               12      10          8
WWV_FLOW_BUGS|APEX_040200                       14      11          5
REPCAT$_INSTANTIATION_DDL|SYSTEM                14      13          5
MVIEW$_ADV_AJG|SYSTEM                           15      13          4
DEF$_CALLDEST|SYSTEM                            15      14          6
COUNTRIES|HR                                    22      16         10
OLS$AUDIT|LBACSYS                               22      14          7
CODE$|DVSYS                                     26      20          7
SDO_COORD_AXES|MDSYS                            31      14         12
XS$ACE_PRIV|SYS                                 37      25         12
ORDDCM_ANON_ACTION_TYPES|ORDDATA                70      47         14
WWV_FLOWS|APEX_040200                          335     264         14

69 rows selected.

Elapsed: 00:00:00.20
Network summary 2 - grouped by numbers of nodes

 #Nodes  #Networks
------- ----------
      1          5
      2         28
      3          7
      4          7
      5          3
      6          2
      7          1
      8          1
      9          3
     10          1
     11          1
     13          2
     14          3
     16          1
     20          1
     25          1
     47          1
    264          1

18 rows selected.

Elapsed: 00:00:00.17

Diagram of a Foreign Key Subnetwork
This diagram shows the trajectory that the algorithm took through the subnetwork of HR tables that includes the COUNTRIES table, with tree links in red, and loop closing links in blue. It may help to understand the working of the algorithm.
Networks - PLSQL, v1.0 - HR

Test Network 2: Friendship network of Brightkite users

I took my second, much larger test network from this site:
Friendship network of Brightkite users

The page describes the network as having 58,228 nodes and 214,078 links, but the data set has 428,156 links, with each pair of nodes that is linked having links provided in both directions. My package traverses links in either direction so I did not require the second link, and copied only one of the links into a table for the network analysis. I created primary key and indexes that I deemed appropriate and gathered statistics on the table.

Output for Brightkite Network
The detailed output with 214,625 records took 103 seconds, while the two summary outputs took 27 and 23 seconds. Most of the detailed execution time is of course due to the writing of the records to file. The output is too large to embed in full, so I cut out most of the detailed output.

links_v based on Net_Brightkite

View dropped.


View created.

Network detail

Network     #Links  #Nodes    Lev Node                                                                   Link
---------- ------- ------- ------ ---------------------------------------------------------------------- ----------
0           212945   56739      0 0                                                                      ROOT
                                1 > 1                                                                    135
                                2   > 123                                                                955
                                3     < 11                                                               961
                                4       < 0*                                                             15                                 4       > 124                                                            974
                                5         < 1*                                                           969
                                5         < 123*                                                         982                                 5         > 125                                                          988
                                6           < 1*                                                         983
                                6           < 11*                                                        986                                 6           > 127                                                        993
                                7             < 1*                                                       990
                                7             < 11*                                                      992
                                7             < 5                                                        991
                                8               < 0*                                                     142
                                8               < 1*                                                     143                                 8               > 11*                                                    18
                                8               > 123*                                                   958
                                8               > 124*                                                   972
                                8               > 125*                                                   984
                                8               > 129                                                    996
                                9                 < 1*                                                   995
                                9                 < 125*                                                 999                                 9                 > 131                                                  1010
                               10                   < 1*                                                 1007                                10                   > 133                                                1024
                               11                     < 1*                                               1018
                               11                     < 129*                                             1023                                11                     > 2915                                             15317
                               12                       > 10857                                          77629
                               13                         < 1446                                         77626                                14                           > 10334                                      92481
                               15                             < 10198                                    92510                                16                               > 10332                                  91634
                               17                                 > 10333                                92473
                               18                                   > 10336                              92550
                               19                                     < 10331                            92548                                20                                       > 10338                          92638
                               21                                         < 10332*                       92639                                21                                         > 10342                        93374
                               22                                           < 10336*                     93373                                22                                           > 10344                      93470
                               23                                             < 10331*                   93469                                23                                             > 10345                    93502
                               24                                               < 10331*                 93499
                               24                                               < 10338*                 93500
                               24                                               < 10342*                 93501                                24                                               > 10349                  95200
                               25                                                 < 10331*               95191
                               25                                                 < 10332*               95192
                               25                                                 < 10333*               95193
                               25                                                 < 10334*               95194
                               25                                                 < 10336*               95195
                               25                                                 < 10337                95196
                               26                                                   < 10336*             92600                                26                                                   > 10340              93311
                               27                                                     < 10336*           93310                                27                                                     > 10346            94326
                               28                                                       < 10200          94320
                               29                                                         < 2812         89521                                30                                                           > 10198*     89503
                               30                                                           > 10332*     91600
                               30                                                           > 10333*     91656
.
. (extracted for brevity)
.
				
				7             > 871                                                      5496
                                8               < 11*                                                    5495                                 7             > 873                                                      5499
                                8               < 11*                                                    5498                                 6           > 6553                                                       54725
                                5         > 6548                                                         54712
                                5         > 6550                                                         54718
                                4       > 859                                                            5471
                                4       > 862                                                            5477
                                4       > 869                                                            5493
                                4       > 870                                                            5494
                                4       > 872                                                            5497
                                3     > 6535                                                             53954
                                4       > 34947                                                          140148
                                3     > 6536                                                             53955
                                3     > 6537                                                             54701
                                3     > 6538                                                             54702
                                3     > 6539                                                             54703
                                3     > 6540                                                             54704
                                3     > 6541                                                             54705
                                3     > 6543                                                             54706
                                3     > 6545                                                             54708
                                3     > 6546                                                             54709
                                2   > 126                                                                989
                                3     > 141                                                              1100
                                4       < 1*                                                             1099                                 2   > 128                                                                994
                                1 > 107                                                                  673
                                1 > 73                                                                   432
10020            1       2      0 10020                                                                  ROOT
                                1 > 40400                                                                206894
10061            3       4      0 10061                                                                  ROOT
                                1 > 40442                                                                207014
                                1 > 40443                                                                207015
                                2   > 54793                                                              197339
10454            1       2      0 10454                                                                  ROOT
                                1 > 40962                                                                211394
10541            1       2      0 10541                                                                  ROOT
                                1 > 41084                                                                211598
10569            1       2      0 10569                                                                  ROOT
                                1 > 41147                                                                211688
10572            1       2      0 10572                                                                  ROOT
                                1 > 41148                                                                211689
11030            2       3      0 11030                                                                  ROOT
                                1 > 41526                                                                189843
                                1 > 41527                                                                189844
11053            2       3      0 11053                                                                  ROOT
                                1 > 17537                                                                124571
                                1 > 41557                                                                189900
11136            1       2      0 11136                                                                  ROOT
                                1 > 27830                                                                172081
11615            3       3      0 11615                                                                  ROOT
                                1 > 42164                                                                194725
                                2   > 42165                                                              194727
                                3     < 11615*                                                           194726 11628           13      10      0 11628                                                                  ROOT                                 1 > 26719                                                                182224
                                2   > 42195                                                              194766
                                3     < 11628*                                                           194765
                                3     < 42193                                                            194767
                                4       < 11628*                                                         194762                                 4       > 42194                                                          194764
                                5         < 11628*                                                       194763                                 5         > 42195*                                                       194768
                                1 > 42188                                                                194757
                                1 > 42189                                                                194758
                                1 > 42190                                                                194759
                                1 > 42191                                                                194760
                                1 > 42192                                                                194761
11686            1       2      0 11686                                                                  ROOT
                                1 > 42284                                                                196157
11687            5       5      0 11687                                                                  ROOT
                                1 > 13207                                                                79434
                                2   > 43916                                                              210413
                                3     > 43917                                                            210415
                                4       < 13207*                                                         210414
                                2   < 7637                                                               79433 11713            1       2      0 11713                                                                  ROOT                                 1 > 40482                                                                208266
11770            1       2      0 11770                                                                  ROOT
                                1 > 13304                                                                80582
11778            2       3      0 11778                                                                  ROOT
                                1 > 40832                                                                210039
                                1 > 42426                                                                197700
11802            1       2      0 11802                                                                  ROOT
                                1 > 27316                                                                165028
11831            1       2      0 11831                                                                  ROOT
                                1 > 26846                                                                182516
11945            4       4      0 11945                                                                  ROOT
                                1 > 13842                                                                134375
                                2   > 42671                                                              199448
                                3     < 11945*                                                           199447                                 2   > 42672                                                              199449
11982            3       4      0 11982                                                                  ROOT
                                1 > 42736                                                                200800
                                2   > 55250                                                              199061
                                2   > 55251                                                              199062
12004            1       2      0 12004                                                                  ROOT
                                1 > 42778                                                                200897
12063            4       4      0 12063                                                                  ROOT
                                1 > 42874                                                                202418
                                2   > 42876                                                              202421
                                3     < 12063*                                                           202420                                 1 > 42875                                                                202419
12095            1       2      0 12095                                                                  ROOT
                                1 > 42933                                                                202516
12115            2       3      0 12115                                                                  ROOT
                                1 > 42964                                                                202586
                                2   > 53624                                                              191170
12145            2       3      0 12145                                                                  ROOT
                                1 > 42999                                                                203879
                                1 > 43000                                                                203880
12592            1       2      0 12592                                                                  ROOT
                                1 > 17004                                                                135534
12593            1       2      0 12593                                                                  ROOT
                                1 > 43361                                                                205795
12601            1       2      0 12601                                                                  ROOT
                                1 > 43367                                                                205802
12709            1       2      0 12709                                                                  ROOT
                                1 > 43438                                                                207113
12780            1       2      0 12780                                                                  ROOT
                                1 < 361                                                                  70125 12781            7       5      0 12781                                                                  ROOT                                 1 > 43503                                                                207232
                                2   > 43504                                                              207234
                                3     < 12781*                                                           207233                                 3     > 55481                                                            185736
                                4       < 43503*                                                         185735                                 3     > 55482                                                            185738
                                4       < 43503*                                                         185737 13125            2       3      0 13125                                                                  ROOT                                 1 > 41059                                                                211552
                                2   > 54899                                                              197454
13150            1       2      0 13150                                                                  ROOT
                                1 > 43850                                                                210327
13152            2       3      0 13152                                                                  ROOT
                                1 > 13412                                                                65309
                                1 > 43851                                                                210328
13188            3       4      0 13188                                                                  ROOT
                                1 > 13197                                                                79386
                                1 > 43895                                                                210381
                                2   > 55583                                                              185879
13237            1       2      0 13237                                                                  ROOT
                                1 > 43973                                                                210493
13277            1       2      0 13277                                                                  ROOT
                                1 > 13284                                                                80519
13321            5       6      0 13321                                                                  ROOT
                                1 > 13563                                                                68463
                                2   > 44299                                                              213314
                                2   > 44300                                                              213315
                                2   > 44301                                                              213316
                                1 > 41602                                                                189980
13409            1       2      0 13409                                                                  ROOT
                                1 > 36374                                                                151029
13423            1       2      0 13423                                                                  ROOT
                                1 > 44127                                                                211897
13441            3       4      0 13441                                                                  ROOT
                                1 > 44159                                                                211938
                                1 > 44160                                                                211939
                                1 > 44161                                                                211940
13496           10       8      0 13496                                                                  ROOT
                                1 > 44228                                                                212038
                                2   > 55671                                                              185988
                                3     > 55672                                                            185990
                                4       < 44228*                                                         185989                                 2   > 55673                                                              185991
                                2   > 55674                                                              185992
                                3     > 55675                                                            185994
                                4       < 44228*                                                         185993                                 4       > 55676                                                          185996
                                5         < 44228*                                                       185995 13508            1       2      0 13508                                                                  ROOT                                 1 > 44235                                                                212045
13516            1       2      0 13516                                                                  ROOT
                                1 > 44241                                                                212052
13519            1       2      0 13519                                                                  ROOT
                                1 > 44247                                                                212058
13521            1       2      0 13521                                                                  ROOT
                                1 > 44248                                                                212059
13542            3       4      0 13542                                                                  ROOT
                                1 > 44268                                                                212093
                                2   > 55684                                                              186004
                                2   > 55685                                                              186005
13544            2       3      0 13544                                                                  ROOT
                                1 > 44275                                                                212105
                                2   > 55687                                                              186007
13608            2       3      0 13608                                                                  ROOT
                                1 > 44352                                                                213393
                                1 > 44353                                                                213394
13708            2       3      0 13708                                                                  ROOT
                                1 > 35547                                                                144721
                                2   > 53642                                                              191189
13813            5       4      0 13813                                                                  ROOT
                                1 > 44466                                                                213572
                                2   > 44467                                                              213574
                                3     < 13813*                                                           213573                                 3     > 44468                                                            213576
                                4       < 44466*                                                         213575 13846            3       3      0 13846                                                                  ROOT                                 1 > 44528                                                                213677
                                2   > 44529                                                              213679
                                3     < 13846*                                                           213678 1469             2       3      0 1469                                                                   ROOT                                 1 > 20244                                                                110822
                                2   > 48178                                                              213748
14692            1       2      0 14692                                                                  ROOT
                                1 > 45193                                                                194940
15577            1       2      0 15577                                                                  ROOT
                                1 > 45714                                                                198098
15579            3       3      0 15579                                                                  ROOT
                                1 > 45717                                                                198103
                                2   > 45718                                                              198105
                                3     < 15579*                                                           198104 15636            1       2      0 15636                                                                  ROOT                                 1 > 45766                                                                198188
15658            2       3      0 15658                                                                  ROOT
                                1 > 45775                                                                198198
                                2   > 56016                                                              186375
15663            2       3      0 15663                                                                  ROOT
                                1 > 28650                                                                181215
                                1 > 45779                                                                198205
15670            1       2      0 15670                                                                  ROOT
                                1 > 45785                                                                198213
15675            6       6      0 15675                                                                  ROOT
                                1 > 15678                                                                136346
                                2   > 37514                                                              158682
                                2   > 45788                                                              198217
                                3     < 15675*                                                           198216                                 1 > 45787                                                                198215
                                1 > 45789                                                                198218
15689            1       2      0 15689                                                                  ROOT
                                1 > 45800                                                                198234
16399            2       3      0 16399                                                                  ROOT
                                1 > 46195                                                                201208
                                1 > 46196                                                                201209
16525            2       3      0 16525                                                                  ROOT
                                1 > 46293                                                                201380
                                1 > 46294                                                                201381
16526            2       3      0 16526                                                                  ROOT
                                1 > 46295                                                                201382
                                1 > 46296                                                                201383
16794            1       2      0 16794                                                                  ROOT
                                1 > 46442                                                                202723
16825            2       3      0 16825                                                                  ROOT
                                1 > 16826                                                                134322
                                2   > 46457                                                              202742
16827            1       2      0 16827                                                                  ROOT
                                1 > 46458                                                                202743
17012            1       2      0 17012                                                                  ROOT
                                1 > 46469                                                                202756
1704             1       2      0 1704                                                                   ROOT
                                1 > 21114                                                                102970
17047            1       2      0 17047                                                                  ROOT
                                1 > 36999                                                                155474
17062            1       2      0 17062                                                                  ROOT
                                1 > 17065                                                                135663
17074            1       2      0 17074                                                                  ROOT
                                1 > 46518                                                                202834
17084            3       4      0 17084                                                                  ROOT
                                1 > 46523                                                                202843
                                2   > 56157                                                              186530
                                2   > 56158                                                              186531
17256            2       3      0 17256                                                                  ROOT
                                1 > 46647                                                                204245
                                1 < 813                                                                  120656 17287            1       2      0 17287                                                                  ROOT                                 1 > 26319                                                                177029
1731             1       2      0 1731                                                                   ROOT
                                1 > 21183                                                                103185
17401            2       3      0 17401                                                                  ROOT
                                1 > 46765                                                                204433
                                1 < 850                                                                  123169 17459            2       3      0 17459                                                                  ROOT                                 1 > 46784                                                                204462
                                1 > 46785                                                                204463
18379            1       2      0 18379                                                                  ROOT
                                1 > 47262                                                                207545
18420            6       6      0 18420                                                                  ROOT
                                1 > 47291                                                                207578
                                2   < 47290                                                              207579                                 2   > 56269                                                              186649
                                1 > 47292                                                                207580
                                2   > 47293                                                              207582
                                3     < 18420*                                                           207581 18476            3       3      0 18476                                                                  ROOT                                 1 > 47311                                                                207604
                                2   > 47312                                                              207606
                                3     < 18476*                                                           207605 18776            1       2      0 18776                                                                  ROOT                                 1 > 47479                                                                209033
19029            1       2      0 19029                                                                  ROOT
                                1 > 47589                                                                209189
19907            2       3      0 19907                                                                  ROOT
                                1 > 47951                                                                210876
                                2   > 56377                                                              186770
19925            1       2      0 19925                                                                  ROOT
                                1 > 47953                                                                210878
20119            5       6      0 20119                                                                  ROOT
                                1 > 48086                                                                212360
                                2   > 56414                                                              186815
                                2   > 56415                                                              186816
                                2   > 56416                                                              186817
                                1 > 48087                                                                212361
20137            1       2      0 20137                                                                  ROOT
                                1 > 48100                                                                212382
20143            2       3      0 20143                                                                  ROOT
                                1 > 48108                                                                212391
                                1 > 48109                                                                212392
20149            1       2      0 20149                                                                  ROOT
                                1 > 48120                                                                212404
20150            1       2      0 20150                                                                  ROOT
                                1 > 48121                                                                212405
21785            1       2      0 21785                                                                  ROOT
                                1 > 48786                                                                190587
21795            1       2      0 21795                                                                  ROOT
                                1 > 48787                                                                190588
21823            5       4      0 21823                                                                  ROOT
                                1 > 48792                                                                190594
                                2   > 48793                                                              190596
                                3     < 21823*                                                           190595                                 3     > 56528                                                            186954
                                4       < 48792*                                                         186953 22211            1       2      0 22211                                                                  ROOT                                 1 > 48904                                                                190750
22386            3       4      0 22386                                                                  ROOT
                                1 > 48959                                                                190818
                                1 > 48960                                                                190819
                                1 > 48961                                                                190820
22850            1       2      0 22850                                                                  ROOT
                                1 > 49168                                                                192303
22949            4       4      0 22949                                                                  ROOT
                                1 > 49200                                                                192352
                                2   > 49201                                                              192354
                                3     < 22949*                                                           192353                                 2   > 56579                                                              187007
24435            1       2      0 24435                                                                  ROOT
                                1 > 49761                                                                195562
24477            1       2      0 24477                                                                  ROOT
                                1 > 49778                                                                195580
24642            1       2      0 24642                                                                  ROOT
                                1 > 49852                                                                196899
24937            5       5      0 24937                                                                  ROOT
                                1 > 50011                                                                197113
                                1 > 50012                                                                197114
                                2   > 50014                                                              197117
                                3     < 24937*                                                           197116                                 1 > 50013                                                                197115
26072            1       2      0 26072                                                                  ROOT
                                1 > 50470                                                                200114
26403            1       2      0 26403                                                                  ROOT
                                1 > 50578                                                                200255
26418            1       2      0 26418                                                                  ROOT
                                1 > 50583                                                                200262
26460            9       7      0 26460                                                                  ROOT
                                1 > 27747                                                                170819
                                1 > 50605                                                                200286
                                2   > 50609                                                              200292
                                3     < 26460*                                                           200291
                                3     < 50607                                                            200293
                                4       < 26460*                                                         200288                                 4       > 50608                                                          200290
                                5         < 26460*                                                       200289                                 1 > 50606                                                                200287
26630            3       4      0 26630                                                                  ROOT
                                1 > 50671                                                                201521
                                2   > 56815                                                              187279
                                2   > 56816                                                              187280
26641            1       2      0 26641                                                                  ROOT
                                1 > 50678                                                                201530
26744            1       2      0 26744                                                                  ROOT
                                1 > 50724                                                                201604
26766            1       2      0 26766                                                                  ROOT
                                1 > 50730                                                                201609
26803            1       2      0 26803                                                                  ROOT
                                1 > 50743                                                                201625
26977            1       2      0 26977                                                                  ROOT
                                1 > 50775                                                                201661
26979            1       2      0 26979                                                                  ROOT
                                1 > 50776                                                                201662
27113            1       2      0 27113                                                                  ROOT
                                1 > 50817                                                                201717
27134            1       2      0 27134                                                                  ROOT
                                1 > 50824                                                                201725
27187            4       5      0 27187                                                                  ROOT
                                1 > 36938                                                                154207
                                2   < 7559                                                               154206                                 3     > 36936                                                            154204
                                3     > 36937                                                            154205
27336            2       3      0 27336                                                                  ROOT
                                1 > 50892                                                                201822
                                2   > 56861                                                              187325
27342            1       2      0 27342                                                                  ROOT
                                1 > 50899                                                                201832
27442            1       2      0 27442                                                                  ROOT
                                1 > 50940                                                                201889
27481            1       2      0 27481                                                                  ROOT
                                1 > 50947                                                                203034
27487            1       2      0 27487                                                                  ROOT
                                1 > 50949                                                                203036
27490            5       5      0 27490                                                                  ROOT
                                1 > 50951                                                                203038
                                2   > 56878                                                              187346
                                3     > 56880                                                            187349
                                4       < 50951*                                                         187348                                 2   > 56879                                                              187347
27542            4       4      0 27542                                                                  ROOT
                                1 > 50980                                                                203083
                                2   > 50981                                                              203085
                                3     < 27542*                                                           203084                                 2   > 56893                                                              187362
27545            1       2      0 27545                                                                  ROOT
                                1 > 50982                                                                203086
27548            1       2      0 27548                                                                  ROOT
                                1 > 50987                                                                203094
27572            6       7      0 27572                                                                  ROOT
                                1 > 51006                                                                203118
                                1 > 51007                                                                203119
                                1 > 51008                                                                203120
                                1 > 51009                                                                203121
                                2   > 56898                                                              187367
                                1 > 51010                                                                203122
27621           25      10      0 27621                                                                  ROOT
                                1 > 51047                                                                203177
                                2   > 56915                                                              187385
                                3     > 56917                                                            187388
                                4       < 51047*                                                         187387
                                4       < 56916                                                          187389
                                5         < 51047*                                                       187386                                 5         > 56918                                                        187392
                                6           < 51047*                                                     187390
                                6           < 56915*                                                     187391
                                6           < 56917*                                                     187393                                 6           > 56919                                                      187397
                                7             < 51047*                                                   187394
                                7             < 56915*                                                   187395
                                7             < 56917*                                                   187396                                 7             > 56920                                                    187402
                                8               < 51047*                                                 187398
                                8               < 56915*                                                 187399
                                8               < 56917*                                                 187400
                                8               < 56918*                                                 187401                                 8               > 56921                                                  187407
                                9                 < 51047*                                               187403
                                9                 < 56915*                                               187404
                                9                 < 56917*                                               187405
                                9                 < 56918*                                               187406                                 2   > 56922                                                              187408
27737            1       2      0 27737                                                                  ROOT
                                1 > 51091                                                                203240
27761            3       3      0 27761                                                                  ROOT
                                1 > 51107                                                                203257
                                2   > 51108                                                              203259
                                3     < 27761*                                                           203258 27763            1       2      0 27763                                                                  ROOT                                 1 > 51109                                                                203260
27765            1       2      0 27765                                                                  ROOT
                                1 > 51110                                                                203261
27771            2       3      0 27771                                                                  ROOT
                                1 > 51111                                                                203262
                                1 < 9603                                                                 171954 27788            1       2      0 27788                                                                  ROOT                                 1 > 51119                                                                203271
27789            1       2      0 27789                                                                  ROOT
                                1 > 51120                                                                203272
27790            1       2      0 27790                                                                  ROOT
                                1 > 51121                                                                203273
27831            1       2      0 27831                                                                  ROOT
                                1 > 27926                                                                173361
27838            1       2      0 27838                                                                  ROOT
                                1 > 51143                                                                203302
27844            2       3      0 27844                                                                  ROOT
                                1 > 51147                                                                203315
                                1 > 51148                                                                203316
27880            1       2      0 27880                                                                  ROOT
                                1 > 51152                                                                203320
27882            1       2      0 27882                                                                  ROOT
                                1 > 51153                                                                203321
27888            1       2      0 27888                                                                  ROOT
                                1 > 51155                                                                203323
27894            1       2      0 27894                                                                  ROOT
                                1 > 51156                                                                203324
27897            1       2      0 27897                                                                  ROOT
                                1 > 51158                                                                203327
27915            1       2      0 27915                                                                  ROOT
                                1 > 51165                                                                203337
27933            2       3      0 27933                                                                  ROOT
                                1 > 51167                                                                203339
                                1 > 51168                                                                203340
27943            1       2      0 27943                                                                  ROOT
                                1 > 51170                                                                203342
27960            1       2      0 27960                                                                  ROOT
                                1 > 51178                                                                203355
27988            6       7      0 27988                                                                  ROOT
                                1 < 3107                                                                 173478                                 2   > 27989                                                              173479
                                2   > 9506                                                               90402
                                1 > 51194                                                                203374
                                2   > 56955                                                              187443
                                2   > 56956                                                              187444
28061            1       2      0 28061                                                                  ROOT
                                1 > 51236                                                                204652
28073            1       2      0 28073                                                                  ROOT
                                1 > 51238                                                                204654
28125            1       2      0 28125                                                                  ROOT
                                1 > 51261                                                                204696
28145            1       2      0 28145                                                                  ROOT
                                1 > 41990                                                                193070
28192            1       2      0 28192                                                                  ROOT
                                1 > 51297                                                                204757
28211            1       2      0 28211                                                                  ROOT
                                1 > 51301                                                                204763
28297            2       3      0 28297                                                                  ROOT
                                1 > 51313                                                                204777
                                1 > 51314                                                                204778
28430            1       2      0 28430                                                                  ROOT
                                1 > 51349                                                                204819
28517            1       2      0 28517                                                                  ROOT
                                1 > 51388                                                                204865
28518            3       4      0 28518                                                                  ROOT
                                1 > 51389                                                                204866
                                1 > 51390                                                                204867
                                1 > 51391                                                                204868
28522            3       4      0 28522                                                                  ROOT
                                1 > 51394                                                                204871
                                1 > 51395                                                                204872
                                2   > 56981                                                              187470
28523            3       4      0 28523                                                                  ROOT
                                1 > 51396                                                                204873
                                2   > 56982                                                              187471
                                1 > 51397                                                                204874
28527            2       3      0 28527                                                                  ROOT
                                1 > 36758                                                                153905
                                1 > 37951                                                                162947
28531            1       2      0 28531                                                                  ROOT
                                1 > 51401                                                                204878
28547            1       2      0 28547                                                                  ROOT
                                1 > 51409                                                                204885
28548            1       2      0 28548                                                                  ROOT
                                1 > 51410                                                                204886
28551            1       2      0 28551                                                                  ROOT
                                1 > 51413                                                                204888
28557            1       2      0 28557                                                                  ROOT
                                1 > 51420                                                                204907
28560            1       2      0 28560                                                                  ROOT
                                1 > 51421                                                                204908
28607            2       3      0 28607                                                                  ROOT
                                1 > 51446                                                                204945
                                1 > 51447                                                                204946
28826            1       2      0 28826                                                                  ROOT
                                1 > 51519                                                                206265
28842            1       2      0 28842                                                                  ROOT
                                1 > 51532                                                                206279
28891            1       2      0 28891                                                                  ROOT
                                1 > 51562                                                                206318
28894            2       3      0 28894                                                                  ROOT
                                1 > 51563                                                                206319
                                1 > 51564                                                                206320
29024            5       6      0 29024                                                                  ROOT
                                1 > 37722                                                                160197
                                2   > 37909                                                              161730
                                2   > 54205                                                              194231
                                2   > 54206                                                              194232
                                2   < 8038                                                               160196 29117            1       2      0 29117                                                                  ROOT                                 1 > 51629                                                                206405
29341            3       3      0 29341                                                                  ROOT
                                1 > 29342                                                                171035
                                2   < 3403                                                               171034                                 3     > 29341*                                                           171033
29759            1       2      0 29759                                                                  ROOT
                                1 > 51871                                                                207897
29850            1       2      0 29850                                                                  ROOT
                                1 > 51905                                                                207939
29851            1       2      0 29851                                                                  ROOT
                                1 > 50614                                                                200297
29852            1       2      0 29852                                                                  ROOT
                                1 > 51906                                                                207940
29853            3       4      0 29853                                                                  ROOT
                                1 > 51907                                                                207941
                                1 > 51908                                                                207942
                                1 > 51909                                                                207943
29858            3       3      0 29858                                                                  ROOT
                                1 > 51911                                                                207947
                                2   > 51912                                                              207949
                                3     < 29858*                                                           207948 29867            1       2      0 29867                                                                  ROOT                                 1 > 51916                                                                207953
29876            1       2      0 29876                                                                  ROOT
                                1 > 51925                                                                207961
29893            1       2      0 29893                                                                  ROOT
                                1 > 51931                                                                207969
29895            1       2      0 29895                                                                  ROOT
                                1 > 51932                                                                207970
29898            5       5      0 29898                                                                  ROOT
                                1 > 51934                                                                207971
                                2   < 51933                                                              207972                                 3     > 57071                                                            187563
                                3     > 57072                                                            187564
                                4       < 51934*                                                         187565 29901            2       3      0 29901                                                                  ROOT                                 1 > 35577                                                                144761
                                1 > 51935                                                                207973
29902            4       4      0 29902                                                                  ROOT
                                1 > 51936                                                                207974
                                2   > 51937                                                              207976
                                3     < 29902*                                                           207975                                 3     > 57075                                                            187566
29916            1       2      0 29916                                                                  ROOT
                                1 > 51945                                                                207985
30075            1       2      0 30075                                                                  ROOT
                                1 > 51979                                                                208026
30473            1       2      0 30473                                                                  ROOT
                                1 > 52103                                                                208181
31960            2       3      0 31960                                                                  ROOT
                                1 > 52531                                                                211063
                                2   > 57190                                                              187690
32410            2       3      0 32410                                                                  ROOT
                                1 > 52720                                                                211344
                                2   > 57227                                                              187729
33215            2       3      0 33215                                                                  ROOT
                                1 > 52960                                                                212795
                                1 > 52961                                                                212796
34215            1       2      0 34215                                                                  ROOT
                                1 > 53231                                                                189451
34428            3       4      0 34428                                                                  ROOT
                                1 > 53291                                                                189528
                                2   > 57316                                                              187824
                                1 > 53292                                                                189529
35114            1       2      0 35114                                                                  ROOT
                                1 > 53503                                                                191044
35129            1       2      0 35129                                                                  ROOT
                                1 > 53515                                                                191053
35189            3       4      0 35189                                                                  ROOT
                                1 > 53524                                                                191064
                                2   > 57350                                                              187859
                                1 > 53525                                                                191065
35196            1       2      0 35196                                                                  ROOT
                                1 > 53527                                                                191067
35283            2       3      0 35283                                                                  ROOT
                                1 > 53549                                                                191091
                                1 > 53550                                                                191092
35299            1       2      0 35299                                                                  ROOT
                                1 > 53561                                                                191104
35302            1       2      0 35302                                                                  ROOT
                                1 > 53563                                                                191106
35326            1       2      0 35326                                                                  ROOT
                                1 > 53568                                                                191111
35378            2       3      0 35378                                                                  ROOT
                                1 > 53594                                                                191142
                                1 > 53595                                                                191143
35381            1       2      0 35381                                                                  ROOT
                                1 > 53596                                                                191144
35394            1       2      0 35394                                                                  ROOT
                                1 > 53601                                                                191149
35440            2       3      0 35440                                                                  ROOT
                                1 > 44249                                                                212060
                                2   < 37918                                                              212061 35456            1       2      0 35456                                                                  ROOT                                 1 > 53613                                                                191162
35464            1       2      0 35464                                                                  ROOT
                                1 > 53615                                                                191164
35474            1       2      0 35474                                                                  ROOT
                                1 > 53617                                                                191166
35481            1       2      0 35481                                                                  ROOT
                                1 > 38326                                                                142051
35484            2       3      0 35484                                                                  ROOT
                                1 > 53625                                                                191171
                                1 > 53626                                                                191172
35540            2       3      0 35540                                                                  ROOT
                                1 > 53639                                                                191186
                                1 > 53640                                                                191187
35558            1       2      0 35558                                                                  ROOT
                                1 > 53645                                                                191192
35581            2       3      0 35581                                                                  ROOT
                                1 > 53653                                                                191200
                                1 > 53654                                                                191201
35608            1       2      0 35608                                                                  ROOT
                                1 > 53660                                                                191208
35609            1       2      0 35609                                                                  ROOT
                                1 > 53661                                                                191209
35661            4       5      0 35661                                                                  ROOT
                                1 > 53671                                                                191220
                                2   > 57372                                                              187880
                                3     > 58030                                                            188637
                                1 > 53672                                                                191221
35748            1       2      0 35748                                                                  ROOT
                                1 > 53684                                                                191233
35751            1       2      0 35751                                                                  ROOT
                                1 > 53687                                                                191235
35755            1       2      0 35755                                                                  ROOT
                                1 > 53688                                                                191236
35759            1       2      0 35759                                                                  ROOT
                                1 > 46206                                                                201221
35763            1       2      0 35763                                                                  ROOT
                                1 > 53689                                                                191237
35766            1       2      0 35766                                                                  ROOT
                                1 > 49404                                                                193820
35767            1       2      0 35767                                                                  ROOT
                                1 > 53690                                                                191238
35769            1       2      0 35769                                                                  ROOT
                                1 > 53692                                                                191241
35772            2       3      0 35772                                                                  ROOT
                                1 > 53696                                                                191246
                                1 > 53697                                                                191247
35781            2       3      0 35781                                                                  ROOT
                                1 > 53700                                                                191250
                                2   > 57376                                                              187884
35784            1       2      0 35784                                                                  ROOT
                                1 > 53701                                                                191251
35790           10      11      0 35790                                                                  ROOT
                                1 > 35792                                                                146323
                                2   < 35791                                                              146324                                 3     > 43770                                                            208945
                                2   > 35793                                                              146325
                                3     > 43773                                                            208948
                                2   > 43772                                                              208947
                                3     > 55557                                                            185848
                                1 > 43771                                                                208946
                                1 > 53704                                                                191254
                                1 > 53705                                                                191255
35803            1       2      0 35803                                                                  ROOT
                                1 < 6945                                                                 146340 35938            2       3      0 35938                                                                  ROOT                                 1 > 53740                                                                192495
                                1 > 53741                                                                192496
35953            1       2      0 35953                                                                  ROOT
                                1 < 7020                                                                 147809 36004            1       2      0 36004                                                                  ROOT                                 1 > 53760                                                                192518
36006            4       5      0 36006                                                                  ROOT
                                1 > 53763                                                                192521
                                2   > 57387                                                              187895
                                1 > 53764                                                                192522
                                1 > 53765                                                                192523
36008            1       2      0 36008                                                                  ROOT
                                1 > 53767                                                                192526
36022            1       2      0 36022                                                                  ROOT
                                1 > 53777                                                                192538
36031            3       4      0 36031                                                                  ROOT
                                1 > 53784                                                                192545
                                2   > 57389                                                              187897
                                2   > 57390                                                              187898
36033            1       2      0 36033                                                                  ROOT
                                1 > 53787                                                                192548
36185            5       5      0 36185                                                                  ROOT
                                1 > 53833                                                                192606
                                2   > 57399                                                              187907
                                3     > 57400                                                            187909
                                4       < 53833*                                                         187908                                 3     > 58037                                                            188643
36253            3       4      0 36253                                                                  ROOT
                                1 > 53846                                                                192620
                                2   > 57404                                                              187916
                                1 > 53847                                                                192621
36272            1       2      0 36272                                                                  ROOT
                                1 > 44014                                                                210540
36328            3       4      0 36328                                                                  ROOT
                                1 > 53867                                                                192645
                                1 > 53868                                                                192646
                                1 > 53869                                                                192647
36375            1       2      0 36375                                                                  ROOT
                                1 > 53880                                                                192659
36378            1       2      0 36378                                                                  ROOT
                                1 > 53881                                                                192660
36382            2       3      0 36382                                                                  ROOT
                                1 > 53883                                                                192662
                                2   < 36383                                                              192663 36385            1       2      0 36385                                                                  ROOT                                 1 > 53884                                                                192664
36399            1       2      0 36399                                                                  ROOT
                                1 > 53487                                                                191024
36405            1       2      0 36405                                                                  ROOT
                                1 < 7264                                                                 151063 36533            1       2      0 36533                                                                  ROOT                                 1 > 53908                                                                192694
36612            1       2      0 36612                                                                  ROOT
                                1 > 53923                                                                192711
36652            2       3      0 36652                                                                  ROOT
                                1 > 53937                                                                192728
                                2   > 57419                                                              187929
36821            1       2      0 36821                                                                  ROOT
                                1 > 53975                                                                192770
36919            1       2      0 36919                                                                  ROOT
                                1 > 53988                                                                192783
36965            4       4      0 36965                                                                  ROOT
                                1 > 41327                                                                213153
                                2   < 41326                                                              213154                                 2   > 41328                                                              213156
                                3     < 36965*                                                           213155 36981            1       2      0 36981                                                                  ROOT                                 1 > 54010                                                                192809
37044            2       3      0 37044                                                                  ROOT
                                1 > 54025                                                                192829
                                2   > 57438                                                              187950
37084            1       2      0 37084                                                                  ROOT
                                1 > 54037                                                                192843
37108            1       2      0 37108                                                                  ROOT
                                1 < 7638                                                                 155669 37247            1       2      0 37247                                                                  ROOT                                 1 > 54073                                                                194065
37270            4       4      0 37270                                                                  ROOT
                                1 > 54079                                                                194071
                                2   > 54080                                                              194073
                                3     < 37270*                                                           194072                                 2   > 57445                                                              187957
37277            1       2      0 37277                                                                  ROOT
                                1 > 54081                                                                194074
37342           10       6      0 37342                                                                  ROOT
                                1 > 54091                                                                194084
                                2   > 54092                                                              194086
                                3     < 37342*                                                           194085                                 3     > 54093                                                            194089
                                4       < 37342*                                                         194087
                                4       < 54091*                                                         194088                                 2   > 54094                                                              194091
                                3     < 37342*                                                           194090                                 2   > 54095                                                              194093
                                3     < 37342*                                                           194092 37346            1       2      0 37346                                                                  ROOT                                 1 > 54097                                                                194095
37348            1       2      0 37348                                                                  ROOT
                                1 < 7775                                                                 157227
37351            1       2      0 37351                                                                  ROOT
                                1 < 7777                                                                 157234 37420            1       2      0 37420                                                                  ROOT                                 1 > 54126                                                                194139
37421            1       2      0 37421                                                                  ROOT
                                1 > 54127                                                                194140
37515            1       2      0 37515                                                                  ROOT
                                1 > 54145                                                                194159
37516            1       2      0 37516                                                                  ROOT
                                1 > 54146                                                                194160
37585            1       2      0 37585                                                                  ROOT
                                1 > 54165                                                                194185
37689            1       2      0 37689                                                                  ROOT
                                1 < 8026                                                                 160140 37715            1       2      0 37715                                                                  ROOT                                 1 > 53607                                                                191155
37916            1       2      0 37916                                                                  ROOT
                                1 > 54252                                                                194287
37953            1       2      0 37953                                                                  ROOT
                                1 > 53560                                                                191103
38033            1       2      0 38033                                                                  ROOT
                                1 < 8218                                                                 163161 38066            1       2      0 38066                                                                  ROOT                                 1 > 54301                                                                194354
38281            1       2      0 38281                                                                  ROOT
                                1 < 8404                                                                 140828 38328            1       2      0 38328                                                                  ROOT                                 1 > 43779                                                                208954
38829            1       2      0 38829                                                                  ROOT
                                1 < 8738                                                                 145346 38856            1       2      0 38856                                                                  ROOT                                 1 > 38857                                                                145386
39024            1       2      0 39024                                                                  ROOT
                                1 > 54494                                                                195793
39188            1       2      0 39188                                                                  ROOT
                                1 > 39190                                                                148484
39294            1       2      0 39294                                                                  ROOT
                                1 > 54547                                                                195855
39619            1       2      0 39619                                                                  ROOT
                                1 < 9256                                                                 202005
39628            1       2      0 39628                                                                  ROOT
                                1 < 9276                                                                 202019 39723            1       2      0 39723                                                                  ROOT                                 1 > 54633                                                                195952
39736            1       2      0 39736                                                                  ROOT
                                1 > 48737                                                                190514
39741            3       4      0 39741                                                                  ROOT
                                1 > 54636                                                                195956
                                1 > 54637                                                                195957
                                1 > 54638                                                                195958
39762            1       2      0 39762                                                                  ROOT
                                1 > 54644                                                                195965
39775            2       3      0 39775                                                                  ROOT
                                1 > 54646                                                                195967
                                2   > 57529                                                              188056
39785            1       2      0 39785                                                                  ROOT
                                1 > 54647                                                                195968
39820            1       2      0 39820                                                                  ROOT
                                1 > 53513                                                                191052
39979            1       2      0 39979                                                                  ROOT
                                1 > 54680                                                                196005
40009            3       3      0 40009                                                                  ROOT
                                1 > 54684                                                                196009
                                2   > 54685                                                              196011
                                3     < 40009*                                                           196010 40137            1       2      0 40137                                                                  ROOT                                 1 > 54730                                                                197267
40189            1       2      0 40189                                                                  ROOT
                                1 > 54735                                                                197272
40212            2       3      0 40212                                                                  ROOT
                                1 > 54741                                                                197275
                                1 > 54742                                                                197276
40325            4       5      0 40325                                                                  ROOT
                                1 > 54762                                                                197301
                                2   > 57570                                                              188126
                                2   > 57571                                                              188127
                                1 > 54763                                                                197302
40326            1       2      0 40326                                                                  ROOT
                                1 < 9963                                                                 206790 40365            1       2      0 40365                                                                  ROOT                                 1 > 54772                                                                197310
40368            1       2      0 40368                                                                  ROOT
                                1 > 54773                                                                197311
40377            1       2      0 40377                                                                  ROOT
                                1 > 54774                                                                197312
40813            1       2      0 40813                                                                  ROOT
                                1 > 54838                                                                197386
40814            1       2      0 40814                                                                  ROOT
                                1 > 54839                                                                197387
40842            1       2      0 40842                                                                  ROOT
                                1 > 54840                                                                197388
40847            1       2      0 40847                                                                  ROOT
                                1 > 54843                                                                197390
40853            1       2      0 40853                                                                  ROOT
                                1 > 54845                                                                197392
40856            3       4      0 40856                                                                  ROOT
                                1 > 54846                                                                197393
                                2   > 57593                                                              188149
                                3     > 58067                                                            188683
40859            1       2      0 40859                                                                  ROOT
                                1 > 54847                                                                197394
40879            2       3      0 40879                                                                  ROOT
                                1 > 54850                                                                197400
                                1 > 54851                                                                197401
40880            1       2      0 40880                                                                  ROOT
                                1 > 54852                                                                197402
40882            1       2      0 40882                                                                  ROOT
                                1 > 54854                                                                197404
40886            1       2      0 40886                                                                  ROOT
                                1 > 44198                                                                211997
40890            2       3      0 40890                                                                  ROOT
                                1 > 54855                                                                197405
                                2   > 57594                                                              188150
40896            4       4      0 40896                                                                  ROOT
                                1 > 54856                                                                197406
                                2   > 57595                                                              188151
                                3     > 57596                                                            188153
                                4       < 54856*                                                         188152 40898            4       4      0 40898                                                                  ROOT                                 1 > 54857                                                                197407
                                2   > 57597                                                              188154
                                3     > 57598                                                            188156
                                4       < 54857*                                                         188155 40907            1       2      0 40907                                                                  ROOT                                 1 > 54860                                                                197411
40917            9       9      0 40917                                                                  ROOT
                                1 > 54861                                                                197412
                                2   > 57599                                                              188157
                                3     > 57600                                                            188159
                                4       < 54861*                                                         188158                                 2   > 57601                                                              188160
                                2   > 57602                                                              188161
                                3     > 58068                                                            188684
                                2   > 57603                                                              188162
                                2   > 57604                                                              188163
40918            1       2      0 40918                                                                  ROOT
                                1 > 54862                                                                197413
40925            1       2      0 40925                                                                  ROOT
                                1 > 54865                                                                197415
40926            3       4      0 40926                                                                  ROOT
                                1 > 54866                                                                197416
                                1 > 54867                                                                197417
                                1 > 54868                                                                197418
40927            1       2      0 40927                                                                  ROOT
                                1 > 52038                                                                208097
41026            1       2      0 41026                                                                  ROOT
                                1 > 54893                                                                197448
41172            1       2      0 41172                                                                  ROOT
                                1 > 54922                                                                197484
41212            1       2      0 41212                                                                  ROOT
                                1 > 54837                                                                197385
41304            3       4      0 41304                                                                  ROOT
                                1 > 54935                                                                197498
                                1 > 54936                                                                197499
                                1 > 54937                                                                197500
41312            1       2      0 41312                                                                  ROOT
                                1 > 54944                                                                197507
41342            1       2      0 41342                                                                  ROOT
                                1 > 54957                                                                197524
41354            1       2      0 41354                                                                  ROOT
                                1 > 54958                                                                197525
41599            1       2      0 41599                                                                  ROOT
                                1 > 55001                                                                197568
41608            2       3      0 41608                                                                  ROOT
                                1 > 55003                                                                197570
                                2   > 55664                                                              185981
41919            1       2      0 41919                                                                  ROOT
                                1 > 55059                                                                197631
41992            1       2      0 41992                                                                  ROOT
                                1 > 55073                                                                198841
42002            1       2      0 42002                                                                  ROOT
                                1 > 55083                                                                198864
42003            1       2      0 42003                                                                  ROOT
                                1 > 55084                                                                198865
42033            1       2      0 42033                                                                  ROOT
                                1 > 42034                                                                193161
42186            1       2      0 42186                                                                  ROOT
                                1 > 55113                                                                198896
42252            1       2      0 42252                                                                  ROOT
                                1 > 55132                                                                198921
42474            2       3      0 42474                                                                  ROOT
                                1 > 55182                                                                198988
                                2   > 57645                                                              188203
42494            1       2      0 42494                                                                  ROOT
                                1 > 55188                                                                198994
42517            1       2      0 42517                                                                  ROOT
                                1 > 55197                                                                199004
43247            3       4      0 43247                                                                  ROOT
                                1 > 55401                                                                185668
                                2   > 57680                                                              188242
                                2   > 57681                                                              188243
43584            1       2      0 43584                                                                  ROOT
                                1 > 55497                                                                185755
43749            1       2      0 43749                                                                  ROOT
                                1 > 55555                                                                185846
43805            2       3      0 43805                                                                  ROOT
                                1 > 55563                                                                185854
                                1 > 55564                                                                185855
43942           27      11      0 43942                                                                  ROOT
                                1 > 54717                                                                197257
                                2   > 55599                                                              185898
                                3     < 43942*                                                           185897
                                3     < 55593                                                            185899
                                3     < 55594                                                            185900                                 4       > 55595                                                          185890
                                5         > 55597                                                        185893
                                6           < 55594*                                                     185892                                 6           > 55598                                                      185896
                                7             < 55594*                                                   185894
                                7             < 55595*                                                   185895                                 7             > 55599*                                                   185904
                                7             > 55600                                                    185908
                                8               < 55594*                                                 185905
                                8               < 55595*                                                 185906
                                8               < 55597*                                                 185907
                                8               < 55599*                                                 185909                                 8               > 57744                                                  188332
                                9                 < 55594*                                               188327
                                9                 < 55595*                                               188328
                                9                 < 55597*                                               188329
                                9                 < 55598*                                               188330
                                9                 < 55599*                                               188331                                 6           > 55599*                                                     185903
                                5         > 55599*                                                       185901
                                3     < 55596                                                            185902
                                4       < 43942*                                                         185891 43955            1       2      0 43955                                                                  ROOT                                 1 > 55602                                                                185911
43968            2       3      0 43968                                                                  ROOT
                                1 > 55606                                                                185916
                                2   > 57746                                                              188334
43977            2       3      0 43977                                                                  ROOT
                                1 > 55609                                                                185918
                                2   > 57748                                                              188336
44008            1       2      0 44008                                                                  ROOT
                                1 > 55615                                                                185927
44009            2       3      0 44009                                                                  ROOT
                                1 > 55616                                                                185928
                                2   > 57749                                                              188337
44011            1       2      0 44011                                                                  ROOT
                                1 > 55617                                                                185929
44013            3       3      0 44013                                                                  ROOT
                                1 > 55618                                                                185930
                                2   > 55619                                                              185932
                                3     < 44013*                                                           185931 44017            1       2      0 44017                                                                  ROOT                                 1 > 55620                                                                185933
44023            1       2      0 44023                                                                  ROOT
                                1 > 55624                                                                185939
44084            1       2      0 44084                                                                  ROOT
                                1 > 55644                                                                185961
44086            1       2      0 44086                                                                  ROOT
                                1 > 55645                                                                185962
44091            1       2      0 44091                                                                  ROOT
                                1 > 53610                                                                191159
44122            1       2      0 44122                                                                  ROOT
                                1 > 55652                                                                185970
44123            1       2      0 44123                                                                  ROOT
                                1 > 55653                                                                185971
44128            3       4      0 44128                                                                  ROOT
                                1 > 55655                                                                185972
                                2   > 57757                                                              188345
                                3     > 58099                                                            188718
44189            2       3      0 44189                                                                  ROOT
                                1 > 55661                                                                185978
                                2   > 57758                                                              188346
44191            1       2      0 44191                                                                  ROOT
                                1 > 55662                                                                185979
44201            1       2      0 44201                                                                  ROOT
                                1 > 55667                                                                185984
44203            2       3      0 44203                                                                  ROOT
                                1 > 55668                                                                185985
                                2   > 57759                                                              188347
44231            2       3      0 44231                                                                  ROOT
                                1 > 55677                                                                185997
                                1 > 55678                                                                185998
44250            1       2      0 44250                                                                  ROOT
                                1 > 53599                                                                191147
44251            1       2      0 44251                                                                  ROOT
                                1 > 55682                                                                186002
44274            1       2      0 44274                                                                  ROOT
                                1 > 55686                                                                186006
44308            9       5      0 44308                                                                  ROOT
                                1 > 55695                                                                186015
                                2   > 55696                                                              186017
                                3     < 44308*                                                           186016                                 3     > 55697                                                            186020
                                4       < 44308*                                                         186018
                                4       < 55695*                                                         186019                                 4       > 55698                                                          186023
                                5         < 44308*                                                       186021
                                5         < 55696*                                                       186022 45010            1       2      0 45010                                                                  ROOT                                 1 > 55865                                                                186211
45014            1       2      0 45014                                                                  ROOT
                                1 > 55866                                                                186212
45052            1       2      0 45052                                                                  ROOT
                                1 > 55878                                                                186223
45101            1       2      0 45101                                                                  ROOT
                                1 > 55891                                                                186239
45505            2       3      0 45505                                                                  ROOT
                                1 > 55979                                                                186335
                                2   > 57809                                                              188400
45690            1       2      0 45690                                                                  ROOT
                                1 > 56005                                                                186362
45913            1       2      0 45913                                                                  ROOT
                                1 > 45914                                                                199621
46025            1       2      0 46025                                                                  ROOT
                                1 > 56061                                                                186425
46127            1       2      0 46127                                                                  ROOT
                                1 > 56084                                                                186450
46455            1       2      0 46455                                                                  ROOT
                                1 > 56142                                                                186512
46639            2       3      0 46639                                                                  ROOT
                                1 > 55339                                                                185595
                                1 > 56175                                                                186548
46770            1       2      0 46770                                                                  ROOT
                                1 > 50528                                                                200191
46932            1       2      0 46932                                                                  ROOT
                                1 > 56219                                                                186594
47011            1       2      0 47011                                                                  ROOT
                                1 > 56231                                                                186606
47267            1       2      0 47267                                                                  ROOT
                                1 > 47296                                                                207585
47277            1       2      0 47277                                                                  ROOT
                                1 > 56267                                                                186647
47364            1       2      0 47364                                                                  ROOT
                                1 > 56279                                                                186659
47436            1       2      0 47436                                                                  ROOT
                                1 > 56286                                                                186666
47486            1       2      0 47486                                                                  ROOT
                                1 > 56295                                                                186675
48021            1       2      0 48021                                                                  ROOT
                                1 > 55064                                                                198833
48035            1       2      0 48035                                                                  ROOT
                                1 > 56402                                                                186801
48504            1       2      0 48504                                                                  ROOT
                                1 > 56479                                                                186903
48614            4       5      0 48614                                                                  ROOT
                                1 > 56500                                                                186924
                                2   > 57874                                                              188475
                                1 > 56501                                                                186925
                                1 > 56502                                                                186926
48664            1       2      0 48664                                                                  ROOT
                                1 > 56511                                                                186936
48913            1       2      0 48913                                                                  ROOT
                                1 > 56547                                                                186973
48980            2       3      0 48980                                                                  ROOT
                                1 > 56551                                                                186977
                                2   > 57878                                                              188479
49284            1       2      0 49284                                                                  ROOT
                                1 > 56596                                                                187026
49552            1       2      0 49552                                                                  ROOT
                                1 > 56639                                                                187072
49595            2       3      0 49595                                                                  ROOT
                                1 > 56646                                                                187079
                                2   > 57894                                                              188495
49878            1       2      0 49878                                                                  ROOT
                                1 > 56692                                                                187148
50472            3       3      0 50472                                                                  ROOT
                                1 > 56785                                                                187248
                                2   > 56786                                                              187250
                                3     < 50472*                                                           187249 50504            1       2      0 50504                                                                  ROOT                                 1 > 56790                                                                187253
50508            5       6      0 50508                                                                  ROOT
                                1 > 50509                                                                200166
                                1 > 56791                                                                187254
                                1 > 56792                                                                187255
                                1 > 56793                                                                187256
                                1 > 56794                                                                187257
50530            1       2      0 50530                                                                  ROOT
                                1 > 56797                                                                187260
50610            1       2      0 50610                                                                  ROOT
                                1 > 54722                                                                197259
50691            1       2      0 50691                                                                  ROOT
                                1 > 56820                                                                187282
50728            1       2      0 50728                                                                  ROOT
                                1 > 56826                                                                187289
50729            1       2      0 50729                                                                  ROOT
                                1 > 56827                                                                187290
50746            1       2      0 50746                                                                  ROOT
                                1 > 56829                                                                187292
50805            2       3      0 50805                                                                  ROOT
                                1 > 56838                                                                187302
                                2   > 57931                                                              188533
50806            1       2      0 50806                                                                  ROOT
                                1 > 56839                                                                187303
50885            2       3      0 50885                                                                  ROOT
                                1 > 56859                                                                187323
                                2   > 57934                                                              188536
51020            2       3      0 51020                                                                  ROOT
                                1 > 56902                                                                187371
                                2   > 57947                                                              188549
51082            1       2      0 51082                                                                  ROOT
                                1 > 56931                                                                187419
51095            1       2      0 51095                                                                  ROOT
                                1 > 56932                                                                187420
51294            1       2      0 51294                                                                  ROOT
                                1 > 56966                                                                187454
51295            1       2      0 51295                                                                  ROOT
                                1 > 56967                                                                187455
51358            1       2      0 51358                                                                  ROOT
                                1 > 56976                                                                187464
51407            1       2      0 51407                                                                  ROOT
                                1 > 56983                                                                187472
51439            2       3      0 51439                                                                  ROOT
                                1 > 56990                                                                187479
                                1 > 56991                                                                187480
51575            1       2      0 51575                                                                  ROOT
                                1 > 57002                                                                187491
51696            2       3      0 51696                                                                  ROOT
                                1 > 57027                                                                187518
                                1 > 57028                                                                187519
51697            2       3      0 51697                                                                  ROOT
                                1 > 57029                                                                187520
                                1 > 57030                                                                187521
51778            1       2      0 51778                                                                  ROOT
                                1 > 57042                                                                187533
51903            1       2      0 51903                                                                  ROOT
                                1 > 57066                                                                187559
51944           94      49      0 51944                                                                  ROOT
                                1 > 57077                                                                187568
                                2   > 57969                                                              188571
                                3     > 57970                                                            188573
                                4       < 57077*                                                         188572                                 4       > 58155                                                          188780
                                5         < 57969*                                                       188779                                 5         > 58157                                                        188785
                                6           < 57969*                                                     188783
                                6           < 57970*                                                     188784                                 4       > 58158                                                          188787
                                5         < 57969*                                                       188786
                                5         < 58154                                                        188788
                                6           < 57969*                                                     188778                                 6           > 58156                                                      188782
                                7             < 57969*                                                   188781                                 7             > 58158*                                                   188789
                                6           > 58208                                                      185385
                                6           > 58209                                                      185386
                                3     > 57971                                                            188575
                                4       < 57077*                                                         188574                                 3     > 58151                                                            188772
                                4       > 58152                                                          188774
                                5         < 57969*                                                       188773                                 5         > 58153                                                        188777
                                6           < 57969*                                                     188775
                                6           < 58151*                                                     188776                                 6           > 58159                                                      188793
                                7             < 57969*                                                   188790
                                7             < 58151*                                                   188791
                                7             < 58152*                                                   188792                                 7             > 58160                                                    188798
                                8               < 57969*                                                 188794
                                8               < 58151*                                                 188795
                                8               < 58152*                                                 188796
                                8               < 58153*                                                 188797                                 8               > 58161                                                  188804
                                9                 < 57969*                                               188799
                                9                 < 58151*                                               188800
                                9                 < 58152*                                               188801
                                9                 < 58153*                                               188802
                                9                 < 58159*                                               188803                                 9                 > 58204                                                185376
                               10                   < 58151*                                             185372
                               10                   < 58153*                                             185373
                               10                   < 58159*                                             185374
                               10                   < 58160*                                             185375                                10                   > 58206                                              185383
                               11                     < 58152*                                           185378
                               11                     < 58153*                                           185379
                               11                     < 58159*                                           185380
                               11                     < 58160*                                           185381
                               11                     < 58161*                                           185382                                 8               > 58210                                                  185387
                                9                 > 58222                                                185401
                                8               > 58211                                                  185388
                                9                 > 58212                                                185390
                               10                   < 58160*                                             185389                                10                   > 58223                                              185402
                                7             > 58200                                                    185362
                                8               < 58151*                                                 185361                                 5         > 58205                                                        185377
                                6           > 58219                                                      185398
                                7             > 58224                                                    185403
                                6           > 58220                                                      185399
                                7             > 58225                                                    185404
                                8               > 58226                                                  185406
                                9                 < 58220*                                               185405                                 8               > 58227                                                  185407
                                6           > 58221                                                      185400
                                5         > 58207                                                        185384
                                4       > 58195                                                          188837
                                5         > 58199                                                        185360
                                6           < 58151*                                                     185359                                 6           > 58202                                                      185366
                                7             < 58151*                                                   185364
                                7             < 58195*                                                   185365
                                7             < 58201                                                    185367
                                8               < 58151*                                                 185363                                 5         > 58218                                                        185397
                                4       > 58196                                                          185354
                                5         > 58197                                                        185356
                                6           < 58151*                                                     185355                                 6           > 58198                                                      185358
                                7             < 58151*                                                   185357                                 7             > 58203                                                    185371
                                8               < 58151*                                                 185368
                                8               < 58196*                                                 185369
                                8               < 58197*                                                 185370                                 2   > 57972                                                              188576
                                3     > 57973                                                            188578
                                4       < 57077*                                                         188577                                 3     > 58162                                                            188805
                                2   > 57974                                                              188579
                                3     > 58163                                                            188806
52712            1       2      0 52712                                                                  ROOT
                                1 > 57224                                                                187725
53283            1       2      0 53283                                                                  ROOT
                                1 > 57312                                                                187820
53490            1       2      0 53490                                                                  ROOT
                                1 > 57339                                                                187847
53510            2       3      0 53510                                                                  ROOT
                                1 > 53511                                                                191050
                                1 > 53512                                                                191051
53514            1       2      0 53514                                                                  ROOT
                                1 > 57346                                                                187855
53618            2       3      0 53618                                                                  ROOT
                                1 > 57365                                                                187873
                                2   > 58027                                                              188634
53622            1       2      0 53622                                                                  ROOT
                                1 > 57366                                                                187874
53623            1       2      0 53623                                                                  ROOT
                                1 > 57367                                                                187875
53698            1       2      0 53698                                                                  ROOT
                                1 > 57375                                                                187883
53712            1       2      0 53712                                                                  ROOT
                                1 > 57379                                                                187887
53799            4       5      0 53799                                                                  ROOT
                                1 > 56828                                                                187291
                                1 > 57392                                                                187900
                                2   > 58034                                                              188640
                                1 > 57393                                                                187901
53824            1       2      0 53824                                                                  ROOT
                                1 > 57397                                                                187905
53839            1       2      0 53839                                                                  ROOT
                                1 > 53840                                                                192614
53853            2       3      0 53853                                                                  ROOT
                                1 > 57409                                                                187920
                                1 > 57410                                                                187921
53999            1       2      0 53999                                                                  ROOT
                                1 > 57430                                                                187941
54087            2       3      0 54087                                                                  ROOT
                                1 > 57446                                                                187958
                                2   > 58049                                                              188660
54481           14       6      0 54481                                                                  ROOT
                                1 > 57502                                                                188019
                                2   > 57503                                                              188021
                                3     < 54481*                                                           188020                                 3     > 57504                                                            188024
                                4       < 54481*                                                         188022
                                4       < 57502*                                                         188023                                 4       > 57505                                                          188028
                                5         < 54481*                                                       188025
                                5         < 57502*                                                       188026
                                5         < 57503*                                                       188027                                 5         > 57506                                                        188032
                                6           < 54481*                                                     188029
                                6           < 57502*                                                     188030
                                6           < 57503*                                                     188031 54676            3       4      0 54676                                                                  ROOT                                 1 > 57531                                                                188058
                                1 > 57532                                                                188059
                                1 > 57533                                                                188060
54678            7       5      0 54678                                                                  ROOT
                                1 > 57535                                                                188062
                                2   > 57536                                                              188064
                                3     < 54678*                                                           188063                                 3     > 57537                                                            188067
                                4       < 54678*                                                         188065
                                4       < 57535*                                                         188066                                 2   > 58056                                                              188668
54711           10       5      0 54711                                                                  ROOT
                                1 > 57542                                                                188072
                                2   > 57543                                                              188074
                                3     < 54711*                                                           188073                                 3     > 57544                                                            188077
                                4       < 54711*                                                         188075
                                4       < 57542*                                                         188076                                 4       > 57545                                                          188081
                                5         < 54711*                                                       188078
                                5         < 57542*                                                       188079
                                5         < 57543*                                                       188080 54715            1       2      0 54715                                                                  ROOT                                 1 > 54716                                                                197256
54719            1       2      0 54719                                                                  ROOT
                                1 > 57548                                                                188083
54720            1       2      0 54720                                                                  ROOT
                                1 > 57549                                                                188084
54721            1       2      0 54721                                                                  ROOT
                                1 > 57550                                                                188085
54723            1       2      0 54723                                                                  ROOT
                                1 > 57552                                                                188086
54724            8       5      0 54724                                                                  ROOT
                                1 > 57553                                                                188087
                                2   > 57554                                                              188089
                                3     < 54724*                                                           188088                                 3     > 58058                                                            188671
                                4       < 57553*                                                         188670                                 4       > 58059                                                          188674
                                5         < 57553*                                                       188672
                                5         < 57554*                                                       188673 54736            4       5      0 54736                                                                  ROOT                                 1 > 57556                                                                188091
                                1 > 57557                                                                188092
                                2   > 58060                                                              188675
                                1 > 57558                                                                188093
54737            1       2      0 54737                                                                  ROOT
                                1 > 57559                                                                188094
54739            1       2      0 54739                                                                  ROOT
                                1 > 57560                                                                188095
54756           28       8      0 54756                                                                  ROOT
                                1 > 57561                                                                188096
                                2   > 57562                                                              188098
                                3     < 54756*                                                           188097                                 3     > 57563                                                            188101
                                4       < 54756*                                                         188099
                                4       < 57561*                                                         188100                                 4       > 57564                                                          188105
                                5         < 54756*                                                       188102
                                5         < 57561*                                                       188103
                                5         < 57562*                                                       188104                                 5         > 57565                                                        188110
                                6           < 54756*                                                     188106
                                6           < 57561*                                                     188107
                                6           < 57562*                                                     188108
                                6           < 57563*                                                     188109                                 6           > 57566                                                      188116
                                7             < 54756*                                                   188111
                                7             < 57561*                                                   188112
                                7             < 57562*                                                   188113
                                7             < 57563*                                                   188114
                                7             < 57564*                                                   188115                                 7             > 57567                                                    188123
                                8               < 54756*                                                 188117
                                8               < 57561*                                                 188118
                                8               < 57562*                                                 188119
                                8               < 57563*                                                 188120
                                8               < 57564*                                                 188121
                                8               < 57565*                                                 188122 54758            2       3      0 54758                                                                  ROOT                                 1 > 57568                                                                188124
                                1 > 57569                                                                188125
54765            1       2      0 54765                                                                  ROOT
                                1 > 57572                                                                188128
54841            1       2      0 54841                                                                  ROOT
                                1 > 57592                                                                188148
54864            1       2      0 54864                                                                  ROOT
                                1 > 57605                                                                188164
54871            1       2      0 54871                                                                  ROOT
                                1 > 54872                                                                197423
54896            1       2      0 54896                                                                  ROOT
                                1 > 57606                                                                188165
54897            1       2      0 54897                                                                  ROOT
                                1 > 57607                                                                188166
54974            1       2      0 54974                                                                  ROOT
                                1 > 54975                                                                197541
55071            1       2      0 55071                                                                  ROOT
                                1 > 57623                                                                188181
55081            2       3      0 55081                                                                  ROOT
                                1 > 57624                                                                188182
                                1 > 57625                                                                188183
55082            2       3      0 55082                                                                  ROOT
                                1 > 57627                                                                188184
                                1 > 57628                                                                188185
55204            1       2      0 55204                                                                  ROOT
                                1 > 57647                                                                188205
55205            1       2      0 55205                                                                  ROOT
                                1 > 55207                                                                199011
55206            6       4      0 55206                                                                  ROOT
                                1 > 57648                                                                188206
                                2   > 57649                                                              188208
                                3     < 55206*                                                           188207                                 3     > 57650                                                            188211
                                4       < 55206*                                                         188209
                                4       < 57648*                                                         188210 55410            1       2      0 55410                                                                  ROOT                                 1 > 57683                                                                188245
55411            1       2      0 55411                                                                  ROOT
                                1 > 57684                                                                188246
55412            1       2      0 55412                                                                  ROOT
                                1 > 57685                                                                188247
55415            1       2      0 55415                                                                  ROOT
                                1 > 57686                                                                188248
55416            1       2      0 55416                                                                  ROOT
                                1 > 57688                                                                188249
55417            2       3      0 55417                                                                  ROOT
                                1 > 57690                                                                188250
                                2   > 58082                                                              188700
55418            1       2      0 55418                                                                  ROOT
                                1 > 57691                                                                188251
55420            2       3      0 55420                                                                  ROOT
                                1 > 57693                                                                188252
                                2   > 58084                                                              188702
55421            1       2      0 55421                                                                  ROOT
                                1 > 57694                                                                188253
55422            1       2      0 55422                                                                  ROOT
                                1 > 57695                                                                188254
55424            5       5      0 55424                                                                  ROOT
                                1 > 55428                                                                185685
                                2   > 55429                                                              185687
                                3     < 55424*                                                           185686                                 1 > 55430                                                                185688
                                1 > 55431                                                                185689
55425            3       3      0 55425                                                                  ROOT
                                1 > 55426                                                                185682
                                2   > 55427                                                              185684
                                3     < 55425*                                                           185683 55432            1       2      0 55432                                                                  ROOT                                 1 > 57697                                                                188255
55434            2       3      0 55434                                                                  ROOT
                                1 > 57699                                                                188256
                                1 > 57700                                                                188257
55436            1       2      0 55436                                                                  ROOT
                                1 > 57701                                                                188258
55437            1       2      0 55437                                                                  ROOT
                                1 > 57702                                                                188259
55439            2       3      0 55439                                                                  ROOT
                                1 > 57703                                                                188260
                                2   > 58087                                                              188705
55440            1       2      0 55440                                                                  ROOT
                                1 > 55441                                                                185692
55442            1       2      0 55442                                                                  ROOT
                                1 > 57704                                                                188261
55532            1       2      0 55532                                                                  ROOT
                                1 > 57728                                                                188310
55607            1       2      0 55607                                                                  ROOT
                                1 > 57747                                                                188335
55639            1       2      0 55639                                                                  ROOT
                                1 > 57754                                                                188342
55654            1       2      0 55654                                                                  ROOT
                                1 > 57756                                                                188344
55871            2       3      0 55871                                                                  ROOT
                                1 > 57790                                                                188378
                                1 > 57791                                                                188379
55942            1       2      0 55942                                                                  ROOT
                                1 > 57801                                                                188391
56020            3       3      0 56020                                                                  ROOT
                                1 > 57816                                                                188412
                                2   > 57817                                                              188414
                                3     < 56020*                                                           188413 56090            3       4      0 56090                                                                  ROOT                                 1 > 57825                                                                188422
                                2   > 58114                                                              188733
                                2   > 58115                                                              188734
56126            1       2      0 56126                                                                  ROOT
                                1 > 57828                                                                188425
56143            1       2      0 56143                                                                  ROOT
                                1 > 57831                                                                188428
56144            3       3      0 56144                                                                  ROOT
                                1 > 57832                                                                188429
                                2   > 57833                                                              188431
                                3     < 56144*                                                           188430 56150            3       4      0 56150                                                                  ROOT                                 1 > 57834                                                                188432
                                1 > 57835                                                                188433
                                1 > 57836                                                                188434
56185            1       2      0 56185                                                                  ROOT
                                1 > 57841                                                                188439
56221            1       2      0 56221                                                                  ROOT
                                1 > 57846                                                                188444
56315            1       2      0 56315                                                                  ROOT
                                1 > 57851                                                                188449
56420            1       2      0 56420                                                                  ROOT
                                1 > 56421                                                                186822
56587            6       6      0 56587                                                                  ROOT
                                1 > 57889                                                                188490
                                2   > 58126                                                              188744
                                3     > 58127                                                            188746
                                4       < 57889*                                                         188745                                 4       > 58184                                                          188826
                                1 > 57890                                                                188491
56747            4       5      0 56747                                                                  ROOT
                                1 > 57916                                                                188518
                                2   > 58136                                                              188756
                                3     > 58186                                                            188828
                                2   > 58137                                                              188757
56787            1       2      0 56787                                                                  ROOT
                                1 > 57921                                                                188523
56817            1       2      0 56817                                                                  ROOT
                                1 > 57924                                                                188526
56819            1       2      0 56819                                                                  ROOT
                                1 > 57925                                                                188527
56855            2       3      0 56855                                                                  ROOT
                                1 > 57933                                                                188535
                                2   > 58139                                                              188759
56888            1       2      0 56888                                                                  ROOT
                                1 > 56889                                                                187359
56890            1       2      0 56890                                                                  ROOT
                                1 > 57943                                                                188545
57068            1       2      0 57068                                                                  ROOT
                                1 > 57963                                                                188564
57073            2       3      0 57073                                                                  ROOT
                                1 > 57964                                                                188565
                                1 > 57965                                                                188566
57074            5       5      0 57074                                                                  ROOT
                                1 > 57966                                                                188567
                                1 > 57967                                                                188568
                                2   > 57968                                                              188570
                                3     < 57074*                                                           188569                                 2   > 58150                                                              188771
57258            1       2      0 57258                                                                  ROOT
                                1 > 58007                                                                188613
57308            1       2      0 57308                                                                  ROOT
                                1 > 58017                                                                188623
57319            2       3      0 57319                                                                  ROOT
                                1 > 58018                                                                188624
                                2   > 58171                                                              188814
57359            3       3      0 57359                                                                  ROOT
                                1 > 58024                                                                188630
                                2   > 58025                                                              188632
                                3     < 57359*                                                           188631 57364            1       2      0 57364                                                                  ROOT                                 1 > 58026                                                                188633
57406            1       2      0 57406                                                                  ROOT
                                1 > 58042                                                                188654
57412            1       2      0 57412                                                                  ROOT
                                1 > 58046                                                                188657
57413            1       2      0 57413                                                                  ROOT
                                1 > 58047                                                                188658
57458            1       2      0 57458                                                                  ROOT
                                1 > 58050                                                                188661
57546            1       2      0 57546                                                                  ROOT
                                1 > 57547                                                                188082
57551            1       2      0 57551                                                                  ROOT
                                1 > 58057                                                                188669
57582            3       3      0 57582                                                                  ROOT
                                1 > 58063                                                                188678
                                2   > 58064                                                              188680
                                3     < 57582*                                                           188679 57591            2       3      0 57591                                                                  ROOT                                 1 > 58065                                                                188681
                                1 > 58066                                                                188682
57613            1       2      0 57613                                                                  ROOT
                                1 > 58069                                                                188685
57626            4       4      0 57626                                                                  ROOT
                                1 > 58072                                                                188688
                                2   > 58073                                                              188690
                                3     < 57626*                                                           188689                                 1 > 58074                                                                188691
57687            3       4      0 57687                                                                  ROOT
                                1 > 58080                                                                188698
                                2   > 58175                                                              188818
                                3     > 58213                                                            185391
57689            2       3      0 57689                                                                  ROOT
                                1 > 58081                                                                188699
                                2   > 58176                                                              188819
57692            2       3      0 57692                                                                  ROOT
                                1 > 58083                                                                188701
                                2   > 58177                                                              188820
57696            1       2      0 57696                                                                  ROOT
                                1 > 58085                                                                188703
57698            1       2      0 57698                                                                  ROOT
                                1 > 58086                                                                188704
57824            1       2      0 57824                                                                  ROOT
                                1 > 58113                                                                188732
57953            5       5      0 57953                                                                  ROOT
                                1 > 58142                                                                188762
                                2   > 58143                                                              188764
                                3     < 57953*                                                           188763                                 2   > 58189                                                              188831
                                2   > 58190                                                              188832
58033            1       2      0 58033                                                                  ROOT
                                1 > 58172                                                                188815
58045            1       2      0 58045                                                                  ROOT
                                1 > 58174                                                                188817
58090            1       2      0 58090                                                                  ROOT
                                1 > 58178                                                                188821
58118            1       2      0 58118                                                                  ROOT
                                1 > 58119                                                                188737
58182            3       3      0 58182                                                                  ROOT
                                1 > 58183                                                                188825
                                2   > 58214                                                              185393
                                3     < 58182*                                                           185392 6542             1       2      0 6542                                                                   ROOT                                 1 > 6544                                                                 54707

214625 rows selected.

Elapsed: 00:01:42.58
Network summary 1 - by network

Network     #Links  #Nodes    Max Lev
---------- ------- ------- ----------
10020            2       2          1
10454            2       2          1
10541            2       2          1
10569            2       2          1
10572            2       2          1
11136            2       2          1
11686            2       2          1
11713            2       2          1
11770            2       2          1
11802            2       2          1
11831            2       2          1
12004            2       2          1
12095            2       2          1
12592            2       2          1
12593            2       2          1
12601            2       2          1
12709            2       2          1
12780            2       2          1
13150            2       2          1
13237            2       2          1
13277            2       2          1
13409            2       2          1
13423            2       2          1
13508            2       2          1
13516            2       2          1
13519            2       2          1
13521            2       2          1
14692            2       2          1
15577            2       2          1
15636            2       2          1
15670            2       2          1
15689            2       2          1
16794            2       2          1
16827            2       2          1
17012            2       2          1
1704             2       2          1
17047            2       2          1
17062            2       2          1
17074            2       2          1
17287            2       2          1
1731             2       2          1
18379            2       2          1
18776            2       2          1
19029            2       2          1
19925            2       2          1
20137            2       2          1
20149            2       2          1
20150            2       2          1
21785            2       2          1
21795            2       2          1
22211            2       2          1
22850            2       2          1
24435            2       2          1
24477            2       2          1
24642            2       2          1
26072            2       2          1
26403            2       2          1
26418            2       2          1
26641            2       2          1
26744            2       2          1
26766            2       2          1
26803            2       2          1
26977            2       2          1
26979            2       2          1
27113            2       2          1
27134            2       2          1
27342            2       2          1
27442            2       2          1
27481            2       2          1
27487            2       2          1
27545            2       2          1
27548            2       2          1
27737            2       2          1
27763            2       2          1
27765            2       2          1
27788            2       2          1
27789            2       2          1
27790            2       2          1
27831            2       2          1
27838            2       2          1
27880            2       2          1
27882            2       2          1
27888            2       2          1
27894            2       2          1
27897            2       2          1
27915            2       2          1
27943            2       2          1
27960            2       2          1
28061            2       2          1
28073            2       2          1
28125            2       2          1
28145            2       2          1
28192            2       2          1
28211            2       2          1
28430            2       2          1
28517            2       2          1
28531            2       2          1
28547            2       2          1
28548            2       2          1
28551            2       2          1
28557            2       2          1
28560            2       2          1
28826            2       2          1
28842            2       2          1
28891            2       2          1
29117            2       2          1
29759            2       2          1
29850            2       2          1
29851            2       2          1
29852            2       2          1
29867            2       2          1
29876            2       2          1
29893            2       2          1
29895            2       2          1
29916            2       2          1
30075            2       2          1
30473            2       2          1
34215            2       2          1
35114            2       2          1
35129            2       2          1
35196            2       2          1
35299            2       2          1
35302            2       2          1
35326            2       2          1
35381            2       2          1
35394            2       2          1
35456            2       2          1
35464            2       2          1
35474            2       2          1
35481            2       2          1
35558            2       2          1
35608            2       2          1
35609            2       2          1
35748            2       2          1
35751            2       2          1
35755            2       2          1
35759            2       2          1
35763            2       2          1
35766            2       2          1
35767            2       2          1
35769            2       2          1
35784            2       2          1
35803            2       2          1
35953            2       2          1
36004            2       2          1
36008            2       2          1
36022            2       2          1
36033            2       2          1
36272            2       2          1
36375            2       2          1
36378            2       2          1
36385            2       2          1
36399            2       2          1
36405            2       2          1
36533            2       2          1
36612            2       2          1
36821            2       2          1
36919            2       2          1
36981            2       2          1
37084            2       2          1
37108            2       2          1
37247            2       2          1
37277            2       2          1
37346            2       2          1
37348            2       2          1
37351            2       2          1
37420            2       2          1
37421            2       2          1
37515            2       2          1
37516            2       2          1
37585            2       2          1
37689            2       2          1
37715            2       2          1
37916            2       2          1
37953            2       2          1
38033            2       2          1
38066            2       2          1
38281            2       2          1
38328            2       2          1
38829            2       2          1
38856            2       2          1
39024            2       2          1
39188            2       2          1
39294            2       2          1
39619            2       2          1
39628            2       2          1
39723            2       2          1
39736            2       2          1
39762            2       2          1
39785            2       2          1
39820            2       2          1
39979            2       2          1
40137            2       2          1
40189            2       2          1
40326            2       2          1
40365            2       2          1
40368            2       2          1
40377            2       2          1
40813            2       2          1
40814            2       2          1
40842            2       2          1
40847            2       2          1
40853            2       2          1
40859            2       2          1
40880            2       2          1
40882            2       2          1
40886            2       2          1
40907            2       2          1
40918            2       2          1
40925            2       2          1
40927            2       2          1
41026            2       2          1
41172            2       2          1
41212            2       2          1
41312            2       2          1
41342            2       2          1
41354            2       2          1
41599            2       2          1
41919            2       2          1
41992            2       2          1
42002            2       2          1
42003            2       2          1
42033            2       2          1
42186            2       2          1
42252            2       2          1
42494            2       2          1
42517            2       2          1
43584            2       2          1
43749            2       2          1
43955            2       2          1
44008            2       2          1
44011            2       2          1
44017            2       2          1
44023            2       2          1
44084            2       2          1
44086            2       2          1
44091            2       2          1
44122            2       2          1
44123            2       2          1
44191            2       2          1
44201            2       2          1
44250            2       2          1
44251            2       2          1
44274            2       2          1
45010            2       2          1
45014            2       2          1
45052            2       2          1
45101            2       2          1
45690            2       2          1
45913            2       2          1
46025            2       2          1
46127            2       2          1
46455            2       2          1
46770            2       2          1
46932            2       2          1
47011            2       2          1
47267            2       2          1
47277            2       2          1
47364            2       2          1
47436            2       2          1
47486            2       2          1
48021            2       2          1
48035            2       2          1
48504            2       2          1
48664            2       2          1
48913            2       2          1
49284            2       2          1
49552            2       2          1
49878            2       2          1
50504            2       2          1
50530            2       2          1
50610            2       2          1
50691            2       2          1
50728            2       2          1
50729            2       2          1
50746            2       2          1
50806            2       2          1
51082            2       2          1
51095            2       2          1
51294            2       2          1
51295            2       2          1
51358            2       2          1
51407            2       2          1
51575            2       2          1
51778            2       2          1
51903            2       2          1
52712            2       2          1
53283            2       2          1
53490            2       2          1
53514            2       2          1
53622            2       2          1
53623            2       2          1
53698            2       2          1
53712            2       2          1
53824            2       2          1
53839            2       2          1
53999            2       2          1
54715            2       2          1
54719            2       2          1
54720            2       2          1
54721            2       2          1
54723            2       2          1
54737            2       2          1
54739            2       2          1
54765            2       2          1
54841            2       2          1
54864            2       2          1
54871            2       2          1
54896            2       2          1
54897            2       2          1
54974            2       2          1
55071            2       2          1
55204            2       2          1
55205            2       2          1
55410            2       2          1
55411            2       2          1
55412            2       2          1
55415            2       2          1
55416            2       2          1
55418            2       2          1
55421            2       2          1
55422            2       2          1
55432            2       2          1
55436            2       2          1
55437            2       2          1
55440            2       2          1
55442            2       2          1
55532            2       2          1
55607            2       2          1
55639            2       2          1
55654            2       2          1
55942            2       2          1
56126            2       2          1
56143            2       2          1
56185            2       2          1
56221            2       2          1
56315            2       2          1
56420            2       2          1
56787            2       2          1
56817            2       2          1
56819            2       2          1
56888            2       2          1
56890            2       2          1
57068            2       2          1
57258            2       2          1
57308            2       2          1
57364            2       2          1
57406            2       2          1
57412            2       2          1
57413            2       2          1
57458            2       2          1
57546            2       2          1
57551            2       2          1
57613            2       2          1
57696            2       2          1
57698            2       2          1
57824            2       2          1
58033            2       2          1
58045            2       2          1
58090            2       2          1
58118            2       2          1
6542             2       2          1
12145            3       3          1
13125            3       3          2
13152            3       3          1
13544            3       3          2
13608            3       3          1
13708            3       3          2
1469             3       3          2
15658            3       3          2
15663            3       3          1
16399            3       3          1
16525            3       3          1
16526            3       3          1
16825            3       3          2
17256            3       3          1
17401            3       3          1
17459            3       3          1
19907            3       3          2
20143            3       3          1
27336            3       3          2
27771            3       3          1
27844            3       3          1
27933            3       3          1
28297            3       3          1
45505            3       3          2
46639            3       3          1
48980            3       3          2
49595            3       3          2
50805            3       3          2
50885            3       3          2
51020            3       3          2
51439            3       3          1
51696            3       3          1
51697            3       3          1
53510            3       3          1
53618            3       3          2
53853            3       3          1
54087            3       3          2
54758            3       3          1
55081            3       3          1
55082            3       3          1
55417            3       3          2
55420            3       3          2
55434            3       3          1
55439            3       3          2
55871            3       3          1
56855            3       3          2
57073            3       3          1
57319            3       3          2
57591            3       3          1
57689            3       3          2
57692            3       3          2
28527            3       3          1
28607            3       3          1
28894            3       3          1
29901            3       3          1
31960            3       3          2
32410            3       3          2
33215            3       3          1
35283            3       3          1
35378            3       3          1
35440            3       3          2
35484            3       3          1
35540            3       3          1
35581            3       3          1
35772            3       3          1
35781            3       3          2
35938            3       3          1
36382            3       3          2
36652            3       3          2
37044            3       3          2
39775            3       3          2
40212            3       3          1
40879            3       3          1
40890            3       3          2
41608            3       3          2
42474            3       3          2
43805            3       3          1
43968            3       3          2
43977            3       3          2
44009            3       3          2
44189            3       3          2
44203            3       3          2
44231            3       3          1
11030            3       3          1
11053            3       3          1
11778            3       3          1
12115            3       3          2
50472            4       3          3
54676            4       4          1
55425            4       3          3
56020            4       3          3
56090            4       4          2
56144            4       3          3
56150            4       4          1
57359            4       3          3
57582            4       3          3
57687            4       4          3
58182            4       3          3
29341            4       3          3
29853            4       4          1
29858            4       3          3
34428            4       4          2
35189            4       4          2
36031            4       4          2
36253            4       4          2
36328            4       4          1
39741            4       4          1
40009            4       3          3
40856            4       4          3
40926            4       4          1
41304            4       4          1
43247            4       4          2
44013            4       3          3
44128            4       4          3
10061            4       4          2
11615            4       3          3
11982            4       4          2
13188            4       4          2
13441            4       4          1
13542            4       4          2
13846            4       3          3
15579            4       3          3
17084            4       4          2
18476            4       3          3
22386            4       4          1
26630            4       4          2
27761            4       3          3
28518            4       4          1
28522            4       4          2
28523            4       4          2
40325            5       5          2
48614            5       5          2
37270            5       4          3
36965            5       4          3
22949            5       4          3
36006            5       5          2
54736            5       5          2
35661            5       5          3
29902            5       4          3
11945            5       4          3
27187            5       5          3
53799            5       5          2
40898            5       4          4
56747            5       5          3
27542            5       4          3
57626            5       4          3
12063            5       4          3
40896            5       4          4
36185            6       5          4
20119            6       6          2
29898            6       5          4
29024            6       6          2
57953            6       5          3
57074            6       5          3
55424            6       5          3
27490            6       5          4
21823            6       4          4
24937            6       5          3
50508            6       6          1
13813            6       4          4
13321            6       6          2
11687            6       5          4
15675            7       6          3
55206            7       4          4
18420            7       6          3
27572            7       7          2
56587            7       6          4
27988            7       7          2
54678            8       5          4
12781            8       5          4
54724            9       5          5
26460           10       7          5
40917           10       9          4
44308           10       5          5
13496           11       8          5
35790           11      11          3
54711           11       5          5
37342           11       6          4
11628           14      10          5
54481           15       6          6
27621           26      10          9
43942           28      11          9
54756           29       8          8
51944           95      49         11
0           212946   56739      15225

547 rows selected.

Elapsed: 00:00:26.91
Network summary 2 - grouped by numbers of nodes

 #Nodes  #Networks
------- ----------
      2        362
      3        103
      4         40
      5         21
      6          9
      7          3
      8          2
      9          1
     10          2
     11          2
     49          1
  56739          1

12 rows selected.

Elapsed: 00:00:23.13






SQL for Shortest Path Problems 2: A Branch and Bound Approach

I wrote an article a couple of weeks ago, SQL for Shortest Path Problems, in which analytic functions are used to truncate sub-optimal routes in SQL recursions for shortest paths through networks. The problem was posed by an OTN poster, How to use Recursive Subquery Factoring (RSF) to Implement Dijkstra’s shortest path algorithm?, who referenced a very simple test network, and included his own SQL to solve it, which turned out to be quite similar to my own effort. The solutions are guaranteed to be optimal if the algorithm terminates normally, which it does on the small test network, and will on any network unless resources such as memory or time are exhausted owing to problem size.

In that article I referenced two earlier articles that I had written (in June/July 2013) that used analytic functions for other combinatorial problems. The usage in those cases was similar syntactically, but pruned out routes that looked inferior to others at a given iteration, so that the final solutions were not guaranteed to be optimal. The motivation was to to be able to use the SQL for exact solutions on smaller problems and for good, maybe sub-optimal, solutions for problems too large to solve exactly.

I wondered how the SQL in the last article would perform on larger networks, and whether further tuning methods could be found, perhaps based on some form of search truncation, as in the earlier articles. The resulting solution methods can be considered as branch and bound algorithms in SQL.

Test Problems

I took two test problems from this site: Stanford Large Network Dataset Collection.

Collaboration network of Arxiv General Relativity category
Friendship network of Brightkite users

The larger second data set has 428,156 arcs.

Both data sets are of the non-physical type, where there are no differential costs associated with links, and the problem therefore reduces to determining the minimum number of links between a node and other reachable nodes. These non-physical networks tend to be heavily looped, owing to the essentially zero cost of adding a new link. For that reason, I change my problem definition in this article to that of finding a single best path to each reachable node, rather than all, which reduces the solution set size considerably.

It is well known that in non-physical networks, such as social media networks like Linked-In and Facebook, the minimum paths between members tends to remain relatively small as the network size goes up. This will influence the type of algorithm that will be more efficient.

Approximation Methods: Simple truncation

The most obvious approximative approach would be to simple truncate the search after a certain depth (or level). This actually works quite well and gives good results for highly looped networks, where the minimum paths tend to be much shorter than the number of nodes. However there is no guarantee of optimality, and it will be less effective for less looped networks with longer minimum paths.

SQL for SP_RSFONE (simple truncation)

WITH paths (node, path, lev, rn) AS (
SELECT a.dst, To_Char(a.dst), 1, 1
  FROM arcs_v a
WHERE a.src = &SRC
 UNION ALL
SELECT  a.dst,
        p.path || ',' || a.dst,
        p.lev + 1,
        Row_Number () OVER (PARTITION BY a.dst ORDER BY a.dst)
  FROM paths p
  JOIN arcs_v a
    ON a.src = p.node
 WHERE p.rn = 1
   AND p.lev < &LEVMAX
 )  SEARCH DEPTH FIRST BY node SET line_no
 CYCLE node SET lp TO '*' DEFAULT ' '
 SELECT Substr (LPad ('.', 1 + 2 * (Max (lev) KEEP (DENSE_RANK FIRST ORDER BY lev) - 1), '.') || node, 2) node,
        Max (lev) KEEP (DENSE_RANK FIRST ORDER BY lev) lev,
        Max (Max (lev) KEEP (DENSE_RANK FIRST ORDER BY lev)) OVER () maxlev,
        Max (lev) intnod,
        Max (Max (lev)) OVER () intmax,
        Max (path) KEEP (DENSE_RANK FIRST ORDER BY lev) path,
        Max (lp) KEEP (DENSE_RANK FIRST ORDER BY lev) lp
   FROM paths
  GROUP BY node
  ORDER BY Max (line_no) KEEP (DENSE_RANK FIRST ORDER BY lev)
 

Notes on SQL for SP_RSFONE (simple truncation)

  • Row_Number gives a single row with value 1 per partitioning node, so that we retain only one row per node for the previous iteration
  • The global pruning can be done without an additional subquery by grouping with KEEP, since we only want one optimal row per node
  • Note that in the double Max to get maxlev, the inner one is the grouping Max, while the outer is an analytic Max over the whole (grouped) result set
  • intnod obtains the maximum intermdiate value of lev for a given node
  • intmax obtains the maximum intermdiate value of lev over all nodes

Approximation Methods: Preliminary approximate subquery
A less obvious approach is based on the fact that during the recursion our path pruning can only take into account information available to the current iteration: Other than loops, we can prune out only paths to a given node that are longer than another at the same level. But what if we ran an approximate search in advance, in a prior subquery? Then we could outer-join the subquery by node and prune out any paths for which the subquery has found a better cost. This would potentially reduce the total searching without sacrificing guranteed optimality.

SQL for SP_RSFTWO (preliminary approximate subquery)

WITH paths_0 (node, path, lev, rn) AS (
SELECT a.dst, To_Char(a.dst), 1, 1
  FROM arcs_v a
 WHERE a.src = &SRC
 UNION ALL
SELECT a.dst,
       p.path || ',' || a.dst,
       p.lev + 1,
       Row_Number () OVER (PARTITION BY a.dst ORDER BY a.dst)
  FROM paths_0 p
  JOIN arcs_v a
    ON a.src = p.node
 WHERE p.rn = 1
   AND p.lev < &LEVMAX
 ) CYCLE node SET lp TO '*' DEFAULT ' '
 , approx_best_paths AS (
 SELECT node,
        Max (lev) KEEP (DENSE_RANK FIRST ORDER BY lev) lev
   FROM paths_0
  GROUP BY node
 ), paths (node, path, lev, rn) AS (
 SELECT a.dst, To_Char(a.dst), 1, 1
   FROM arcs_v a
 WHERE a.src = &SRC
  UNION ALL
 SELECT a.dst,
         p.path || ',' || a.dst,
         p.lev + 1,
         Row_Number () OVER (PARTITION BY a.dst ORDER BY a.dst)
   FROM paths p
   JOIN arcs_v a
     ON a.src = p.node
   LEFT JOIN approx_best_paths b
     ON b.node = a.dst
  WHERE p.rn = 1
    AND p.lev < Nvl (b.lev, 1000000)
 )  SEARCH DEPTH FIRST BY node SET line_no CYCLE node SET lp TO '*' DEFAULT ' '
 SELECT Substr (LPad ('.', 1 + 2 * (Max (lev) KEEP (DENSE_RANK FIRST ORDER BY lev) - 1), '.') || node, 2) node,
        Max (lev) KEEP (DENSE_RANK FIRST ORDER BY lev) lev,
        Max (Max (lev) KEEP (DENSE_RANK FIRST ORDER BY lev)) OVER () maxlev,
        Max (lev) intnod,
        Max (Max (lev)) OVER () intmax,
        Max (path) KEEP (DENSE_RANK FIRST ORDER BY lev) path,
        Max (lp) KEEP (DENSE_RANK FIRST ORDER BY lev) lp
   FROM paths
  GROUP BY node
  ORDER BY Max (line_no) KEEP (DENSE_RANK FIRST ORDER BY lev)
 

Notes on SQL for SP_RSFTWO (preliminary approximate subquery)

  • This query has two recursive subquery factors
  • path_0 truncates after an input level is reached
  • approx_best_paths gets the global best paths found from the approximate recursion
  • paths now has an outer join to path_0 that is used to prune paths that are inferior to any path to the same node found in the prior subquery
  • the approximate recursion may not reach all reachable nodes, but the outer join ensures this does not cut off any such nodes incorrectly

Approximation Methods: Preliminary approximate subquery to GTT
We will see later that the second approach works quite well, but that the CBO does not process the preliminary query very efficiently. For this reason writing the query result instead to a temporary table may be more efficient overall. The table can be indexed, and dynamic sampling allows the CBO to estimate the cardinalities more accurately.

SQL for SP_GTTRSF_I and SP_GTTRSF_Q (preliminary approximate query to GTT)

PROMPT SP_GTTRSF_I
INSERT INTO approx_min_levs
WITH paths_0 (node, path, lev, rn) /* SP_GTTRSF_I */ AS (
SELECT a.dst, To_Char(a.dst), 1, 1
  FROM arcs_v a
WHERE a.src = &SRC
 UNION ALL
SELECT  a.dst,
        p.path || ',' || a.dst,
        p.lev + 1,
        Row_Number () OVER (PARTITION BY a.dst ORDER BY a.dst)
  FROM paths_0 p
  JOIN arcs_v a
    ON a.src = p.node
 WHERE p.rn = 1
   AND p.lev < &LEVMAX
 ) CYCLE node SET lp TO '*' DEFAULT ' '
 SELECT node,
        Max (lev) KEEP (DENSE_RANK FIRST ORDER BY lev) lev
   FROM paths_0
  GROUP BY node
 /
 PROMPT SP_GTTRSF_Q
 WITH paths (node, path, lev, rn) AS (
 SELECT a.dst, To_Char(a.dst), 1, 1
   FROM arcs_v a
 WHERE a.src = &SRC
  UNION ALL
 SELECT a.dst,
         p.path || ',' || a.dst,
         p.lev + 1,
         Row_Number () OVER (PARTITION BY a.dst ORDER BY a.dst)
   FROM paths p
   JOIN arcs_v a
     ON a.src = p.node
   LEFT JOIN approx_min_levs b
     ON b.node = a.dst
  WHERE p.rn = 1
    AND p.lev < Nvl (b.lev, 1000000)
 )  SEARCH DEPTH FIRST BY node SET line_no CYCLE node SET lp TO '*' DEFAULT ' '
 SELECT Substr (LPad ('.', 1 + 2 * (Max (lev) KEEP (DENSE_RANK FIRST ORDER BY lev) - 1), '.') || node, 2) node,
        Max (lev) KEEP (DENSE_RANK FIRST ORDER BY lev) lev,
        Max (Max (lev) KEEP (DENSE_RANK FIRST ORDER BY lev)) OVER () maxlev,
        Max (lev) intnod,
        Max (Max (lev)) OVER () intmax,
        Max (path) KEEP (DENSE_RANK FIRST ORDER BY lev) path,
        Max (lp) KEEP (DENSE_RANK FIRST ORDER BY lev) lp
   FROM paths
  GROUP BY node
  ORDER BY Max (line_no) KEEP (DENSE_RANK FIRST ORDER BY lev)
 

Notes on SQL for preliminary approximate subquery to GTT

  • the SQL above consists of an insert of the approximate subquery into a temporary table, followed by the exact recursive query now referencing the table rather than a subquery factor

Results: Collaboration network of Arxiv General Relativity category
Collaboration network of Arxiv General Relativity category

Arxiv GR-QC (General Relativity and Quantum Cosmology) collaboration network is from the e-print arXiv and covers scientific collaborations between authors papers submitted to General Relativity and Quantum Cosmology category. If an author i co-authored a paper with author j, the graph contains a undirected edge from i to j. If the paper is co-authored by k authors this generates a completely connected (sub)graph on k nodes.

The data set comes with the reverse arcs already present, making a total of 28,980.

I took the first node in the first line in the data set file as the initial root node, 3466, and tested the three methods above for values of LEVMAX of 5, 10, 15, 20, 25 and 30. The complete results, including execution plans are in the attached file.

The exact solution has 4,158 nodes reached from the source node 3466, with a maximum level of 11. The listing below gives the output from SP_GTTRSF_Q for LEVMAX=5.

NODE                            LEV  MAXLEV  INTNOD  INTMAX PATH                                                                             LP
------------------------------ ---- ------- ------- ------- -------------------------------------------------------------------------------- --
937                               1      11       1      45 937
5233                              1      11       1      45 5233
8579                              1      11       1      45 8579
..4135                            2      11       2      45 937,4135
....1860                          3      11       3      45 8579,4135,1860
....16498                         3      11       3      45 8579,4135,16498
......19442                       4      11       4      45 8579,4135,16498,19442
..........9890                    6      11       6      45 8579,4135,16498,19442,6264,9890
......22826                       4      11       4      45 8579,4135,16498,22826
..........12260                   6      11       8      45 8579,4135,16498,22826,6804,12260
..........25491                   6      11       8      45 8579,4135,16498,22826,6804,25491
..........25844                   6      11       6      45 8579,4135,16498,22826,6804,25844
..............8037                8      11       9      45 8579,4135,16498,22826,13520,122,4825,8037
..............14621               8      11      11      45 8579,4135,16498,22826,13520,122,4825,14621
..............19608               8      11      10      45 8579,4135,16498,22826,13520,122,4825,19608
..............4836                8      11       9      45 8579,4135,16498,22826,13520,122,9593,4836
............4641                  7      11       9      45 8579,4135,16498,22826,13520,22224,4641
............17937                 7      11       9      45 8579,4135,16498,22826,13520,22224,17937
............21660                 7      11       7      45 8579,4135,16498,22826,13520,22224,21660
............22088                 7      11       7      45 8579,4135,16498,22826,13520,22224,22088
..........22224                   6      11       9      45 8579,4135,16498,22826,13520,22224
........17599                     5      11       5      45 8579,4135,16498,22826,17599
..16258                           2      11       2      45 8579,16258
....1356                          3      11       3      45 8579,16258,1356
....1727                          3      11       3      45 8579,16258,1727
......4241                        4      11       4      45 8579,16258,1727,4241
........5227                      5      11       5      45 8579,16258,1727,4241,5227
........7015                      5      11       5      45 8579,16258,1727,4241,7015
........10476                     5      11       5      45 8579,16258,1727,4241,10476
..............7854                8      11      10      45 8579,16258,1727,4241,10476,4875,11844,7854
............11844                 7      11      10      45 8579,16258,1727,4241,10476,4875,11844
.
. extracted
.
..23429                           2      11       2      45 17038,23429
....4781                          3      11       3      45 17038,23429,4781
....19697                         3      11       3      45 17038,23429,19697
......5519                        4      11       4      45 17038,23429,19697,5519
........26167                     5      11       5      45 17038,23429,19697,5519,26167
......17818                       4      11       4      45 17038,23429,19697,17818
......20260                       4      11       4      45 17038,23429,19697,20260
......23809                       4      11       4      45 17038,23429,19697,23809
........23219                     5      11       5      45 17038,23429,19697,5519,23219
..24578                           2      11       2      45 17038,24578
....18297                         3      11       3      45 17038,24578,18297
......5402                        4      11       4      45 17038,24578,18297,5402
......15947                       4      11       4      45 17038,24578,18297,15947
18720                             1      11       1      45 18720
19607                             1      11       1      45 19607
..3466                            2      11       2      45 937,3466

4158 rows selected.

Elapsed: 00:00:09.78

The embedded Excel file below summarises the results with relevant statistics from the query runs and the execution plans.

Results summary - SP_RSFONE (simple truncation)

  • SP_RSFONE ran in from 3 seconds to 60 seconds, and returned the exact solution from LEVMAX = 15 on
  • It continued iterating up to the maximum level of LEVMAX in each case, although all optimal path lengths are found by level 11

Results summary - SP_RSFTWO (preliminary approximate subquery)
This is the execution plan for LEVMAX=5

-----------------------------------------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                                          | Name            | Starts | E-Rows | A-Rows |   A-Time   | Buffers |  OMem |  1Mem | Used-Mem |
-----------------------------------------------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                                   |                 |      1 |        |   4158 |00:00:27.47 |    2716K|       |       |          |
|   1 |  WINDOW SORT                                       |                 |      1 |     39 |   4158 |00:00:27.47 |    2716K|   372K|   372K|  330K (0)|
|   2 |   SORT GROUP BY                                    |                 |      1 |     39 |   4158 |00:00:27.45 |    2716K|    19M|  6662K|   17M (0)|
|   3 |    VIEW                                            |                 |      1 |     39 |  87755 |00:00:27.27 |    2716K|       |       |          |
|   4 |     UNION ALL (RECURSIVE WITH) DEPTH FIRST         |                 |      1 |        |  87755 |00:00:27.17 |    2716K|    16M|  1524K|   14M (0)|
|*  5 |      INDEX RANGE SCAN                              | ARCS_CA_GRQC_PK |      1 |      6 |      8 |00:00:00.01 |       2 |       |       |          |
|   6 |      WINDOW SORT                                   |                 |     45 |     33 |  87747 |00:00:21.78 |    1664K|   832K|   511K|  739K (0)|
|*  7 |       FILTER                                       |                 |     45 |        |  87747 |00:00:21.27 |    1664K|       |       |          |
|*  8 |        HASH JOIN RIGHT OUTER                       |                 |     45 |     33 |    110K|00:00:21.38 |    1664K|  1817K|  1817K| 1565K (0)|
|   9 |         VIEW                                       |                 |     45 |     39 |    114K|00:00:21.02 |    1655K|       |       |          |
|  10 |          SORT GROUP BY                             |                 |     45 |     39 |    114K|00:00:20.96 |    1655K|   337K|   337K|  299K (0)|
|  11 |           VIEW                                     |                 |     45 |     39 |    689K|00:00:20.23 |    1655K|       |       |          |
|  12 |            UNION ALL (RECURSIVE WITH) BREADTH FIRST|                 |     45 |        |    689K|00:00:19.32 |    1655K|   903K|   523K|  802K (0)|
|* 13 |             INDEX RANGE SCAN                       | ARCS_CA_GRQC_PK |     45 |      6 |    360 |00:00:00.01 |      50 |       |       |          |
|  14 |             WINDOW SORT                            |                 |    225 |     33 |    688K|00:00:04.00 |   44865 |  1116K|   557K|  991K (0)|
|  15 |              NESTED LOOPS                          |                 |    225 |     33 |    688K|00:00:01.27 |   44865 |       |       |          |
|  16 |               RECURSIVE WITH PUMP                  |                 |    225 |        |  67635 |00:00:00.27 |       0 |       |       |          |
|* 17 |               INDEX RANGE SCAN                     | ARCS_CA_GRQC_PK |  67635 |      6 |    688K|00:00:00.57 |   44865 |       |       |          |
|  18 |         NESTED LOOPS                               |                 |     45 |     33 |    110K|00:00:00.21 |    8594 |       |       |          |
|  19 |          RECURSIVE WITH PUMP                       |                 |     45 |        |  10787 |00:00:00.03 |       0 |       |       |          |
|* 20 |          INDEX RANGE SCAN                          | ARCS_CA_GRQC_PK |  10787 |      6 |    110K|00:00:00.11 |    8594 |       |       |          |
-----------------------------------------------------------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   5 - access("SRC"=3466)
   7 - filter("P"."LEV"<NVL("B"."LEV",1000000))
   8 - access("B"."NODE"="DST")
  13 - access("SRC"=3466)
  17 - access("SRC"="P"."NODE")
  20 - access("SRC"="P"."NODE")

  • SP_RSFTWO ran in from 27 seconds to 552 seconds, and returned the exact solution in all cases
  • From the intmax value (Excel file) we can see that only in the case of LEVMAX=5 did the second recursion iterate beyond the optimum level of 11 (in fact to a level of 45). This would be due the preliminary approximate subquery allowing it to discard sub-optimal paths in the second recursion
  • The execution plan above shows that Oracle CBO has chosen not to materialize the first recursive subquery, and essentially reruns it at each of the 45 outer iterations
  • A better approach for the CBO to have taken would appear to be to form a hash table in memory (where possible) of the first subquery, and run each iteration of the outer recursion outer-joining to that unchanging hash table; or alternatively, to materialize it and outer-join in any other way deemed appropriate
  • I tried hinting the subquery to get CBO to materialise or avoid the repetition of the first subquery, but without success, and so decided using a temproray table to materialise it myself would be a good idea

Results summary - SP_GTTRSF_I and SP_GTTRSF_Q (preliminary approximate query to GTT)

  • SP_GTTRSF_I and SP_GTTRSF_Q ran in from 5 seconds to 54 seconds combined
  • LEVMAX=10 gave slight the better result here: Evidently, the extra work in the insert compared with LEVMAX=5 was over-compensated by the benefit of a better approximate solution
  • Once LEVMAX is sufficiently large to give a good approximate solution it is most efficient not to increase it further
  • This method is almost as efficient as simply truncating at a given level, but guarantees optimality

Network analysis

I have my own network analysis program, implemented as a PL/SQL pipelined function. I thought this might be useful to help validate the results. The function returns all distinct subnetworks and is called three times to give different levels of detail. It runs against a view links_v that must be created for the data source containing the network links. Here is the output:

links_v based on net_CA_GrQc

View dropped.


View created.


  COUNT(*)
----------
     14484

Network detail

Network     #Links  #Nodes    Lev Node       Link
---------- ------- ------- ------ ---------- ----------
1000         13422    4158      0   1000     ROOT
                                1 > 1149     770
                                2 > 12016    4681
                                3 < 1000*    778
                                 3 > 18271    7628
                                4 < 13702    3675
 .
 . Extracted
 .
                                11 < 5400     14039
                                 8 < 5241     5959
                                 7 > 18145    8551
                                8 > 21799    13889
                                9 < 11557*   8553
                                 6 > 18271*   14193
                                6 > 19978    14194
                                7 < 13702*   3676
                                 7 < 18271*   3671
                                 4 < 18152    12071
                                 2 > 16234    4682
                                3 > 18373    4686
                                4 < 1149*    4684
                                 4 > 19871    4687
                                5 > 25526    5590
                                6 < 18373*   4688
                                 2 > 17251    4683
                                2 > 20557    4685
                                2 > 4189     4679
                                3 > 5829     13222
                                1 > 20667    785
10002            1       2      0   10002    ROOT
                                1 < 7468     8487
 10056           11       6      0   10056    ROOT
                                 1 < 2754     13119
                                 2 > 5511     13116
                                3 > 10056*   13122
                                3 > 7265     13120
                                4 > 10056*   13115
                                4 < 2754*    13117
                                 4 > 7479     13114
                                5 > 10056*   12036
                                5 > 13390    12037
                                5 < 2754*    13118
                                 5 < 5511*    13121
 1010             1       2      0   1010     ROOT
                                 1 > 2749     13221
10115            2       3      0   10115    ROOT
                                1 > 10134    50
                                1 > 23916    51
1013             2       3      0   1013     ROOT
                                1 > 19011    9224
                                2 < 2123     12933
 10133            1       2      0   10133    ROOT
                                 1 > 18218    6369
10148            1       2      0   10148    ROOT
                                1 > 10847    7955
10154            5       4      0   10154    ROOT
                                1 > 16830    13630
                                2 < 11410    14133
                                 3 < 9224     12381
                                 4 > 10154*   12380
                                4 > 16830*   12382
10163           24       8      0   10163    ROOT
                                1 > 12551    7434
                                2 < 1281     7440
                                 3 > 10163*   7439
                                3 > 18621    7441
                                4 < 10163*   7435
                                 4 < 12551*   5987
                                 4 < 17588    5984
                                 5 < 12551*   5986
                                 5 > 24207    5985
                                6 < 10163*   7436
                                 6 < 12551*   5988
                                 6 < 1281*    7442
                                 6 < 18621*   5982
                                 6 > 25287    5981
                                7 < 10163*   7437
                                 7 < 12551*   5989
                                 7 < 1281*    7443
                                 7 < 18621*   5983
                                 7 < 3653     7448
                                 8 > 10163*   7444
                                8 > 12551*   7445
                                8 < 1281*    7438
                                 8 > 18621*   7446
                                8 > 24207*   7447
10178            3       3      0   10178    ROOT
                                1 > 24133    10756
                                2 < 3744     14126
                                 3 > 10178*   14125
10180            3       3      0   10180    ROOT
                                1 > 17587    13060
                                2 < 2334     13059
                                 3 > 10180*   13058
10252            3       3      0   10252    ROOT
                                1 > 16820    6964
                                2 < 9630     6963
                                 3 > 10252*   6962
10317            2       3      0   10317    ROOT
                                1 > 11816    4265
                                1 < 2259     4264
 10338           14       7      0   10338    ROOT
                                 1 > 12458    5220
                                2 > 12460    8958
                                3 < 10338*   5221
                                 3 > 16651    13302
                                4 < 10338*   5223
                                 4 < 12458*   8959
                                 4 > 19378    13976
                                5 < 10338*   5224
                                 5 < 12458*   8960
                                 5 < 12460*   13303
                                 5 < 7523     12926
                                 6 > 10338*   12924
                                6 > 12458*   12925
                                1 > 14844    5222
10341            6       4      0   10341    ROOT
                                1 < 1292     10693
                                 2 > 14840    10694
                                3 < 10341*   10695
                                 3 < 6648     10697
                                 4 > 10341*   10696
                                4 < 1292*    10692
 10355            5       6      0   10355    ROOT
                                 1 < 2054     3240
                                 2 > 13741    3241
                                2 < 1552     13484
                                 2 > 8719     3238
                                2 > 9760     3239
10356            1       2      0   10356    ROOT
                                1 > 19062    7274
10382            1       2      0   10382    ROOT
                                1 > 25482    12047
10407            1       2      0   10407    ROOT
                                1 < 6701     13278
 10432            2       3      0   10432    ROOT
                                 1 > 16891    7463
                                1 < 5774     13628
 10433            1       2      0   10433    ROOT
                                 1 < 2593     5143
 1050             1       2      0   1050     ROOT
                                 1 > 17120    4284
1051             3       3      0   1051     ROOT
                                1 > 25664    13897
                                2 < 4245     13898
                                 3 < 1051*    13896
 10513            2       3      0   10513    ROOT
                                 1 > 25059    9437
                                1 > 25595    9438
10517            1       2      0   10517    ROOT
                                1 < 5119     9154
 10522            1       2      0   10522    ROOT
                                 1 > 10561    11775
10559            1       2      0   10559    ROOT
                                1 > 18245    8169
10564            6       5      0   10564    ROOT
                                1 > 15187    6266
                                2 < 8970     9824
                                 3 > 10564*   9823
                                1 < 2984     6265
                                 2 > 8731     6264
                                3 > 10564*   6294
10602            1       2      0   10602    ROOT
                                1 > 20805    13140
10637            4       4      0   10637    ROOT
                                1 > 21340    4094
                                2 < 8428     4093
                                 3 > 10637*   4091
                                3 > 18603    4092
10638            1       2      0   10638    ROOT
                                1 < 8717     12974
 10672            6       4      0   10672    ROOT
                                 1 > 12512    11111
                                2 < 4630     11110
                                 3 > 10672*   11109
                                3 > 9921     11108
                                4 > 10672*   13681
                                4 > 12512*   13682
10676            1       2      0   10676    ROOT
                                1 > 24961    1798
10677           29      14      0   10677    ROOT
                                1 > 17015    9130
                                2 > 20560    7465
                                3 < 309      7253
                                 4 > 10677*   7250
                                4 > 17015*   7251
                                4 > 17453    7252
                                5 < 11030    10700
                                 6 > 23946    10701
                                7 < 17453*   4282
                                 7 > 25611    10703
                                8 < 11030*   10702
                                 8 < 17453*   4283
                                 8 < 6012     8987
                                 9 > 11030*   8984
                                9 > 17453*   8985
                                9 > 23946*   8986
                                9 > 9591     8983
                               10 > 10677*   4275
                               10 > 11030*   4276
                               10 > 13704    4277
                               10 > 17015*   4278
                               10 > 17453*   4279
                               10 < 2136     4273
                                11 > 17453*   4274
                               10 < 2186     14089
                                10 > 23946*   4280
                               10 > 25611*   4281
                               10 < 309*     7249
                                 2 > 21314    7466
10679            4       4      0   10679    ROOT
                                1 < 115      9941
                                 2 > 5268     9940
                                3 > 10679*   9939
                                1 < 8671     9015
 10682            4       4      0   10682    ROOT
                                 1 < 2506     6022
                                 2 > 9962     6021
                                3 > 10682*   5990
                                3 > 22428    5991
10792           11       7      0   10792    ROOT
                                1 > 15695    9866
                                2 > 20379    9647
                                2 > 21309    9648
                                3 < 20422    9661
                                 4 < 2222     9642
                                 5 > 10792*   9640
                                5 > 15695*   9641
                                5 > 21309*   9643
                                5 < 2215     9644
                                 6 > 15695*   9645
                                6 > 21309*   9646
10818            3       3      0   10818    ROOT
                                1 > 11016    11965
                                2 > 25596    11967
                                3 < 10818*   11966
 10872            3       3      0   10872    ROOT
                                 1 > 24250    6959
                                2 < 2666     6961
                                 3 > 10872*   6960
10884           10       7      0   10884    ROOT
                                1 > 16353    12670
                                2 < 4958     12669
                                 3 > 10884*   12668
                                3 > 9606     12667
                                4 > 10884*   9663
                                4 > 12122    9664
                                5 < 5973     13438
                                 6 > 9606*    13437
                                4 > 16353*   9665
                                4 < 2247     9662
 10897            1       2      0   10897    ROOT
                                 1 < 5548     7565
 10904            7       7      0   10904    ROOT
                                 1 > 12707    9216
                                2 < 5156     4083
                                 3 > 10904*   4082
                                3 > 14282    4084
                                4 < 11035    4183
                                 3 > 17933    4085
                                3 > 7483     4081
10906            5       6      0   10906    ROOT
                                1 < 1289     10560
                                 2 > 1560     10558
                                2 > 4365     10559
                                1 < 8530     5023
                                 2 > 21144    5024
1092             2       3      0   1092     ROOT
                                1 > 23226    5795
                                1 > 3196     5794
10936            3       4      0   10936    ROOT
                                1 > 19509    10723
                                1 > 19510    10724
                                1 > 23687    10725
11009           12       8      0   11009    ROOT
                                1 > 20157    7971
                                2 > 23471    7975
                                3 < 11009*   7974
                                 1 > 21344    7972
                                2 < 11721    9753
                                 3 > 12151    9751
                                4 > 15221    9756
                                5 < 11721*   9752
                                 5 > 21344*   9754
                                4 > 21344*   9757
                                2 > 22990    9755
                                3 < 11009*   7973
 11028            6       4      0   11028    ROOT
                                 1 > 21171    9834
                                2 > 22730    9836
                                3 < 11028*   9835
                                 3 < 5211     9833
                                 4 > 11028*   9831
                                4 > 21171*   9832
11054            3       3      0   11054    ROOT
                                1 < 8395     14002
                                 2 > 8725     14001
                                3 > 11054*   14003
1107             1       2      0   1107     ROOT
                                1 > 6973     6133
11120            3       4      0   11120    ROOT
                                1 > 16340    13294
                                1 > 17851    13295
                                1 > 20233    13296
11196            3       4      0   11196    ROOT
                                1 < 13       9182
                                 2 > 19170    9183
                                2 > 7596     9181
11197            3       3      0   11197    ROOT
                                1 < 844      6408
                                 2 > 890      6407
                                3 > 11197*   6409
11215            1       2      0   11215    ROOT
                                1 > 23156    13072
11216            2       3      0   11216    ROOT
                                1 > 19598    5564
                                2 < 13815    5565
 11279            5       5      0   11279    ROOT
                                 1 > 17750    5108
                                2 > 22976    5109
                                2 > 25609    5110
                                2 < 9832     6048
                                 3 > 11279*   6047
11280            1       2      0   11280    ROOT
                                1 < 831      11119
 11285            3       3      0   11285    ROOT
                                 1 > 12193    7864
                                2 < 9618     7863
                                 3 > 11285*   7862
11411            1       2      0   11411    ROOT
                                1 > 24242    13714
11418            5       5      0   11418    ROOT
                                1 < 161      5233
                                 2 > 19583    5234
                                3 < 97       12273
                                 4 > 161*     12272
                                2 > 3105     5232
11427            4       4      0   11427    ROOT
                                1 > 20414    6376
                                2 < 14170    7561
                                 3 < 7632     6737
                                 4 > 20414*   6738
11459            1       2      0   11459    ROOT
                                1 < 6706     4089
 11462            1       2      0   11462    ROOT
                                 1 > 17141    5708
11465            3       3      0   11465    ROOT
                                1 > 11577    12723
                                2 < 3239     5601
                                 3 > 11465*   5600
11467            1       2      0   11467    ROOT
                                1 > 19575    13141
11539            7       5      0   11539    ROOT
                                1 > 15227    13103
                                2 > 16655    9932
                                3 < 11539*   13104
                                 3 < 782      9931
                                 4 > 11539*   9929
                                4 > 15227*   9930
                                2 > 18151    9933
1154             6       5      0   1154     ROOT
                                1 > 12017    4312
                                2 > 12930    4314
                                3 < 1154*    4313
                                 3 > 17591    4315
                                4 < 8704     7088
                                 5 > 12930*   7087
11561            6       6      0   11561    ROOT
                                1 < 9579     11992
                                 2 > 16932    11993
                                3 > 19451    11991
                                4 < 9579*    11994
                                 2 > 22381    11995
                                2 < 6534     12067
 11566            3       3      0   11566    ROOT
                                 1 > 11808    3143
                                2 > 18560    3145
                                3 < 11566*   3144
 11579            1       2      0   11579    ROOT
                                 1 > 15073    12917
11593           10      10      0   11593    ROOT
                                1 > 18415    9430
                                2 < 16818    8830
                                 2 > 23648    3437
                                2 < 4633     3436
                                 2 < 7194     886
                                 3 > 15322    885
                                3 > 20960    887
                                4 < 6355     883
                                 5 > 7194*    882
                                3 > 7542     884
11616           12       9      0   11616    ROOT
                                1 > 14149    5047
                                2 > 14662    5042
                                3 < 11616*   5048
                                 2 > 16648    5043
                                2 > 19560    5044
                                3 > 23530    9159
                                4 < 14149*   5046
                                 4 < 3750     11990
                                 5 > 14149*   11988
                                5 > 19560*   11989
                                2 > 22199    5045
                                2 < 8147     13240
 11622            5       5      0   11622    ROOT
                                 1 < 3852     12250
                                 2 > 7877     12249
                                3 > 11622*   6262
                                3 < 1378     6261
                                 3 > 15422    6263
11623            1       2      0   11623    ROOT
                                1 > 23621    9950
11641            1       2      0   11641    ROOT
                                1 > 24462    11178
11642            1       2      0   11642    ROOT
                                1 > 25230    13233
11662           10       5      0   11662    ROOT
                                1 > 14094    9983
                                2 > 19014    9985
                                3 < 11662*   9984
                                 3 < 5960     9979
                                 4 > 11662*   9977
                                4 > 14094*   9978
                                4 > 8705     9976
                                5 > 11662*   9980
                                5 > 14094*   9981
                                5 > 19014*   9982
11718            1       2      0   11718    ROOT
                                1 > 20766    14024
11823           19       9      0   11823    ROOT
                                1 > 13628    13948
                                2 > 15246    13945
                                3 > 20332    13377
                                4 < 13628*   13946
                                 4 < 6350     9193
                                 5 > 11823*   9189
                                5 > 13628*   9190
                                5 > 15246*   9191
                                5 > 16014    9192
                                5 > 23710    9194
                                6 < 11823*   13949
                                 6 < 13628*   13947
                                 6 < 8372     13944
                                 7 > 11823*   13940
                                7 > 13628*   13941
                                7 > 15246*   13942
                                7 > 20332*   13943
                                7 < 6350*    9188
                                 5 < 4495     9195
 11828            1       2      0   11828    ROOT
                                 1 < 7807     7330
 11842            5       5      0   11842    ROOT
                                 1 < 1656     5766
                                 2 > 21531    5767
                                3 < 5828     5768
                                 4 < 1656*    5765
                                 2 > 4040     5764
1187             1       2      0   1187     ROOT
                                1 > 6290     9841
11879            7       6      0   11879    ROOT
                                1 > 26092    11947
                                2 < 21187    10770
                                 3 < 4051     7891
                                 4 > 21313    7892
                                5 < 21310    13661
                                 5 > 26092*   7894
                                4 > 26092*   7893
11893            3       3      0   11893    ROOT
                                1 > 25667    13467
                                2 < 8891     13036
                                 3 > 11893*   13035
11911            1       2      0   11911    ROOT
                                1 < 9039     12102
 1194             1       2      0   1194     ROOT
                                 1 > 21858    1756
11965            3       4      0   11965    ROOT
                                1 < 1556     6619
                                 2 > 14096    6620
                                2 > 23154    6621
11969            3       3      0   11969    ROOT
                                1 > 18996    10664
                                2 < 1967     10666
                                 3 > 11969*   10665
11971            1       2      0   11971    ROOT
                                1 > 25211    11733
11991            1       2      0   11991    ROOT
                                1 < 3186     12664
 12034           15       6      0   12034    ROOT
                                 1 > 17935    14102
                                2 < 2116     14098
                                 3 > 12034*   14097
                                3 > 9189     14094
                                4 > 12034*   14092
                                4 > 17935*   14093
                                4 > 9765     14090
                                5 > 12034*   14100
                                5 > 17935*   14101
                                5 < 2116*    14095
                                 5 > 9774     14099
                                6 > 12034*   14103
                                6 > 17935*   14104
                                6 < 2116*    14096
                                 6 < 9189*    14091
 12041            1       2      0   12041    ROOT
                                 1 > 14384    8493
12042           20      12      0   12042    ROOT
                                1 < 5738     3826
                                 2 > 17252    3827
                                3 > 18142    12724
                                4 < 5738*    3828
                                 4 < 6538     10717
                                 5 > 16040    10715
                                5 > 17252*   10716
                                5 < 5478     13900
                                 6 > 5738*    13899
                                6 > 8349     13901
                                7 < 1549     9651
                                 8 > 22766    9652
                                9 > 23168    9655
                               10 < 1549*    9653
                                10 < 8349*    9650
                                 9 < 8349*    9649
                                 8 > 24732    9654
                                7 < 5738*    3825
                                 7 < 6538*    10714
                                 5 < 5738*    3824
 12046            7       8      0   12046    ROOT
                                 1 > 25957    7833
                                2 < 17724    4986
                                 3 > 25958    4987
                                2 < 19126    9486
                                 3 < 14135    13923
                                 2 < 8263     3572
                                 3 > 17882    3571
12050            1       2      0   12050    ROOT
                                1 < 5364     13463
 12113            4       4      0   12113    ROOT
                                 1 > 16886    12069
                                2 < 142      12755
                                 3 > 18626    12756
                                4 < 16886*   12070
 12161            1       2      0   12161    ROOT
                                 1 > 19162    4316
12192            3       3      0   12192    ROOT
                                1 < 5839     9611
                                 2 > 7026     9610
                                3 > 12192*   9612
12213           21       7      0   12213    ROOT
                                1 > 13558    13457
                                2 > 21710    12987
                                3 < 12213*   13458
                                 3 > 22318    13461
                                4 < 12213*   13459
                                 4 < 13558*   12988
                                 4 > 24888    13456
                                5 < 12213*   13460
                                 5 < 13558*   12989
                                 5 < 21710*   13462
                                 5 < 8669     12995
                                 6 > 12213*   12991
                                6 > 13558*   12992
                                6 > 21710*   12993
                                6 > 22318*   12994
                                6 > 9038     12990

Network     #Links  #Nodes    Lev Node       Link
---------- ------- ------- ------ ---------- ----------
12213           21       7      7 > 12213*   13451
                                7 > 13558*   13452
                                7 > 21710*   13453
                                7 > 22318*   13454
                                7 > 24888*   13455
12248            1       2      0   12248    ROOT
                                1 < 98       14149
 12252            2       3      0   12252    ROOT
                                 1 > 22404    10336
                                2 < 9026     13358
 12256            2       3      0   12256    ROOT
                                 1 > 17237    6040
                                1 < 5081     6039
 12290            2       3      0   12290    ROOT
                                 1 > 17307    8012
                                1 > 20031    8013
12307            3       3      0   12307    ROOT
                                1 > 14175    12694
                                2 > 22980    12693
                                3 < 12307*   12695
 12320            3       3      0   12320    ROOT
                                 1 > 12321    6226
                                2 > 19222    6228
                                3 < 12320*   6227
 12338            3       3      0   12338    ROOT
                                 1 > 15800    13147
                                2 < 1878     13146
                                 3 > 12338*   13145
12387            7       6      0   12387    ROOT
                                1 > 19520    7612
                                2 > 23084    7614
                                3 < 12387*   7613
                                 3 < 19931    14057
                                 3 > 23553    7616
                                3 > 23554    7617
                                4 < 19520*   7615
 12414           13       8      0   12414    ROOT
                                 1 > 14431    5783
                                2 > 24439    14022
                                3 < 12414*   5785
                                 3 < 18562    5786
                                 4 < 12414*   5784
                                 4 < 3102     5781
                                 5 > 12414*   5780
                                5 > 24439*   5782
                                3 < 20537    13299
                                 4 > 20543    13298
                                5 > 21339    10744
                                6 > 24439*   10746
                                5 > 24439*   10745
12473            1       2      0   12473    ROOT
                                1 < 9831     13760
 12504            1       2      0   12504    ROOT
                                 1 < 9053     9044
 12554            1       2      0   12554    ROOT
                                 1 < 7636     11747
 12616            3       3      0   12616    ROOT
                                 1 > 16266    4164
                                2 < 4485     4166
                                 3 > 12616*   4165
12617            2       3      0   12617    ROOT
                                1 > 17388    7631
                                2 < 6037     8024
 12676            2       3      0   12676    ROOT
                                 1 > 14302    9722
                                2 < 5432     13653
 12689            6       4      0   12689    ROOT
                                 1 > 17560    4479
                                2 > 21697    4477
                                3 < 12689*   4480
                                 3 > 25116    4476
                                4 < 12689*   4481
                                 4 < 17560*   4478
 12703            2       3      0   12703    ROOT
                                 1 < 1669     4747
                                 1 < 5260     6438
 12704            2       3      0   12704    ROOT
                                 1 < 7861     7495
                                 2 < 2355     7496
 12751            1       2      0   12751    ROOT
                                 1 < 6307     11094
 12798            2       3      0   12798    ROOT
                                 1 > 19507    6123
                                2 < 3199     7089
 12801            4       4      0   12801    ROOT
                                 1 > 15641    13864
                                2 > 19548    9870
                                3 < 12801*   13865
                                 2 < 5466     9871
 12863            1       2      0   12863    ROOT
                                 1 > 18390    11997
12940            2       3      0   12940    ROOT
                                1 < 787      9633
                                 2 > 20883    9634
13012            3       3      0   13012    ROOT
                                1 < 1983     12737
                                 2 > 20943    12738
                                3 < 13012*   12739
 13022            1       2      0   13022    ROOT
                                 1 < 8077     8653
 13031            4       4      0   13031    ROOT
                                 1 > 13334    12391
                                2 < 8738     12997
                                 3 > 13031*   12996
                                1 > 13620    12392
13167            3       3      0   13167    ROOT
                                1 > 15485    13919
                                2 < 800      7678
                                 3 > 13167*   7677
13202            3       4      0   13202    ROOT
                                1 > 16703    8062
                                2 > 22253    3823
                                3 < 4128     5098
 13325           14       8      0   13325    ROOT
                                 1 > 14502    9507
                                2 > 15899    9510
                                3 < 13325*   9508
                                 2 > 20926    9511
                                3 < 13325*   9509
                                 3 < 6735     9505
                                 4 > 13325*   9503
                                4 > 14502*   9504
                                4 > 23167    9506
                                5 < 3388     13311
                                 6 > 3818     13309
                                7 > 23167*   9127
                                7 > 6735*    9126
                                6 > 6735*    13310
13357            4       4      0   13357    ROOT
                                1 > 25115    9305
                                2 < 8739     9304
                                 3 > 13357*   9303
                                1 > 25852    9306
13413            1       2      0   13413    ROOT
                                1 < 9211     13312
 13415            3       3      0   13415    ROOT
                                 1 > 15386    12935
                                2 < 7585     12980
                                 3 > 13415*   12979
1344             1       2      0   1344     ROOT
                                1 > 18126    10351
1346             1       2      0   1346     ROOT
                                1 > 6448     4271
13485            2       3      0   13485    ROOT
                                1 > 21530    5692
                                2 < 5059     1701
 13486            3       3      0   13486    ROOT
                                 1 > 18688    11102
                                2 < 4259     11104
                                 3 > 13486*   11103
13621            1       2      0   13621    ROOT
                                1 > 25388    560
13675            1       2      0   13675    ROOT
                                1 < 4186     4163
 13677            3       3      0   13677    ROOT
                                 1 > 18288    9861
                                2 > 23206    9863
                                3 < 13677*   9862
 13717            1       2      0   13717    ROOT
                                 1 < 8558     12265
 1376             1       2      0   1376     ROOT
                                 1 > 4267     10556
13802            6       4      0   13802    ROOT
                                1 > 16823    14183
                                2 > 19553    13907
                                3 < 13802*   14184
                                 3 < 5571     14182
                                 4 > 13802*   14180
                                4 > 16823*   14181
1383            11       6      0   1383     ROOT
                                1 > 3377     13218
                                2 < 1660     11777
                                 3 > 23068    11778
                                4 > 25631    11781
                                5 < 1660*    11779
                                 5 > 25678    11776
                                6 < 1660*    11780
                                 6 < 23068*   11782
                                 6 < 3377*    11785
                                 5 < 3377*    11784
                                 4 < 3377*    11783
 13932            4       4      0   13932    ROOT
                                 1 < 6075     1618
                                 2 > 14499    1619
                                3 > 20345    1621
                                4 < 6075*    1620
 14               1       2      0   14       ROOT
                                 1 > 14171    13498
14130            1       2      0   14130    ROOT
                                1 < 3599     9719
 14131            1       2      0   14131    ROOT
                                 1 < 372      12066
 14132            1       2      0   14132    ROOT
                                 1 > 15154    11120
14159            4       4      0   14159    ROOT
                                1 > 24852    6980
                                2 < 5144     10685
                                 3 > 14159*   10684
                                2 < 8869     8832
 14182            1       2      0   14182    ROOT
                                 1 > 17537    12666
14338            1       2      0   14338    ROOT
                                1 > 22729    11180
14339            2       3      0   14339    ROOT
                                1 > 18608    13026
                                2 > 22816    13025
14353            6       5      0   14353    ROOT
                                1 > 14886    4074
                                2 < 2043     9914
                                 3 > 6315     9913
                                4 > 14886*   5819
                                2 < 2455     4073
                                 3 > 14353*   4072
14358            1       2      0   14358    ROOT
                                1 < 5697     12262
 14543            4       4      0   14543    ROOT
                                 1 > 21221    7497
                                2 > 25130    7499
                                3 < 14543*   7498
                                 3 < 7958     6801
 14560            3       3      0   14560    ROOT
                                 1 > 24251    3804
                                2 < 2656     3803
                                 3 > 14560*   3802
14763            1       2      0   14763    ROOT
                                1 < 4432     14004
 14770            9       7      0   14770    ROOT
                                 1 > 21713    11906
                                2 > 25470    12922
                                3 < 14770*   11908
                                 1 > 23461    11907
                                2 < 3297     11746
                                 3 > 17936    11745
                                3 > 5667     11744
                                4 > 14770*   9772
                                4 > 23461*   9773
14771            1       2      0   14771    ROOT
                                1 > 24127    4463
14842            2       3      0   14842    ROOT
                                1 > 24575    9988
                                2 < 8255     13350
 14845            3       3      0   14845    ROOT
                                 1 > 19521    13500
                                2 < 5232     13502
                                 3 > 14845*   13501
14868            3       3      0   14868    ROOT
                                1 > 16226    9830
                                2 < 2201     9829
                                 3 > 14868*   9828
14894            2       3      0   14894    ROOT
                                1 < 1670     9778
                                 1 > 22927    9777
1490             1       2      0   1490     ROOT
                                1 > 20813    3849
14990            1       2      0   14990    ROOT
                                1 > 25975    13930
15181            1       2      0   15181    ROOT
                                1 < 2331     8932
 15182           10       5      0   15182    ROOT
                                 1 > 16728    12023
                                2 > 22319    12026
                                3 < 15182*   12024
                                 3 > 23424    12028
                                4 < 15182*   12025
                                 4 < 16728*   12027
                                 4 < 8153     12022
                                 5 > 15182*   12019
                                5 > 16728*   12020
                                5 > 22319*   12021
15188            1       2      0   15188    ROOT
                                1 < 6354     5992
 15208            1       2      0   15208    ROOT
                                 1 > 23759    9082
15218            1       2      0   15218    ROOT
                                1 > 17585    8869
15248            5       5      0   15248    ROOT
                                1 > 17595    13446
                                2 > 19018    8520
                                3 < 17076    4176
                                 2 < 8443     13445
                                 3 > 15248*   13444
15249            1       2      0   15249    ROOT
                                1 > 15624    3148
15259            2       3      0   15259    ROOT
                                1 > 25136    13139
                                2 < 22000    10613
 15358            3       3      0   15358    ROOT
                                 1 > 18036    12671
                                2 > 18338    12673
                                3 < 15358*   12672
 15374            1       2      0   15374    ROOT
                                 1 > 15553    14037
15387            1       2      0   15387    ROOT
                                1 > 15388    4994
15396            7       5      0   15396    ROOT
                                1 > 18238    11870
                                2 > 26180    11865
                                3 < 15396*   11871
                                 3 < 4777     11869
                                 4 > 15396*   11866
                                4 > 18238*   11867
                                4 > 19064    11868
15401            1       2      0   15401    ROOT
                                1 < 4196     13893
 15415            3       4      0   15415    ROOT
                                 1 > 24640    2865
                                2 < 24152    5206
                                 2 < 4685     11740
 15423            1       2      0   15423    ROOT
                                 1 > 18144    9875
1551             2       3      0   1551     ROOT
                                1 > 8058     9269
                                2 < 2328     13800
 15572            1       2      0   15572    ROOT
                                 1 < 7356     7467
 15583            4       4      0   15583    ROOT
                                 1 > 17785    12058
                                2 > 18628    10047
                                2 > 24272    10048
                                3 < 15583*   12059
 15609            1       2      0   15609    ROOT
                                 1 > 21809    8705
15642            3       3      0   15642    ROOT
                                1 > 16783    14117
                                2 > 17563    10323
                                3 < 15642*   14118
 15668            6       4      0   15668    ROOT
                                 1 > 17293    10740
                                2 > 25614    10738
                                3 < 15668*   10741
                                 3 > 26006    10743
                                4 < 15668*   10742
                                 4 < 17293*   10739
 15681            2       3      0   15681    ROOT
                                 1 > 20793    8829
                                1 < 7482     8828
 15688            1       2      0   15688    ROOT
                                 1 > 22692    9551
15706            2       3      0   15706    ROOT
                                1 > 20776    6419
                                1 < 374      12104
 15712            1       2      0   15712    ROOT
                                 1 > 19596    10679
15824            1       2      0   15824    ROOT
                                1 > 22283    4049
15847            3       3      0   15847    ROOT
                                1 < 348      10620
                                 2 > 5660     10619
                                3 > 15847*   10621
1589             1       2      0   1589     ROOT
                                1 > 7603     9073
15962            1       2      0   15962    ROOT
                                1 > 25447    13908
16015            1       2      0   16015    ROOT
                                1 > 22938    13260
16109            9       6      0   16109    ROOT
                                1 > 21808    6661
                                2 < 2784     6660
                                 3 > 16109*   6659
                                3 > 5425     6658
                                4 > 16109*   2533
                                4 > 16224    2534
                                5 > 24161    2537
                                6 < 5425*    2536
                                 4 > 21808*   2535
16124            3       3      0   16124    ROOT
                                1 > 20807    8756
                                2 > 24334    8758
                                3 < 16124*   8757
 16129            3       3      0   16129    ROOT
                                 1 < 2298     12973
                                 2 < 74       12971
                                 3 > 16129*   12972
1621             3       3      0   1621     ROOT
                                1 > 6576     11063
                                2 > 7109     11062
                                3 < 1621*    11064
 16281            1       2      0   16281    ROOT
                                 1 > 24728    4740
16312            1       2      0   16312    ROOT
                                1 > 16314    12399
16338            1       2      0   16338    ROOT
                                1 > 21390    9527
16358            3       3      0   16358    ROOT
                                1 < 822      11830
                                 2 > 9518     11829
                                3 > 16358*   11831
16470            1       2      0   16470    ROOT
                                1 > 17822    1078
16484            1       2      0   16484    ROOT
                                1 < 8302     290
 16523            2       3      0   16523    ROOT
                                 1 < 4110     9867
                                 2 > 17696    9868
16609            2       3      0   16609    ROOT
                                1 < 6170     12054
                                 2 > 8881     12053
16620            8       6      0   16620    ROOT
                                1 < 1908     8034
                                 2 > 16621    8035
                                3 < 2611     6945
                                 4 > 16620*   6944
                                4 < 1908*    8033
                                 4 < 376      6942
                                 5 > 16620*   6943
                                2 > 17173    8036
16622            1       2      0   16622    ROOT
                                1 > 18454    12390
16643            1       2      0   16643    ROOT
                                1 > 20035    12052
16802            3       3      0   16802    ROOT
                                1 > 23757    9016
                                2 < 830      9018
                                 3 > 16802*   9017
16892            3       3      0   16892    ROOT
                                1 > 19572    13495
                                2 < 3062     8588
                                 3 > 16892*   8587
16922            1       2      0   16922    ROOT
                                1 > 20925    12923
1695             1       2      0   1695     ROOT
                                1 > 19380    7838
16957            2       3      0   16957    ROOT
                                1 < 3362     9779
                                 2 < 3347     9780
 16971            3       3      0   16971    ROOT
                                 1 > 20170    13022
                                2 < 5228     13024
                                 3 > 16971*   13023
17178            8       7      0   17178    ROOT
                                1 > 21024    9774
                                2 < 19712    8585
                                 2 > 23215    8586
                                3 < 17178*   9775
                                 2 < 8071     12245
                                 1 < 2329     13300
                                 2 > 24846    13301
                                3 < 17178*   9776
 17179            3       3      0   17179    ROOT
                                 1 > 24816    5256
                                2 < 9871     5255
                                 3 > 17179*   5254
17276            3       3      0   17276    ROOT
                                1 > 18383    4020
                                2 < 9994     4019
                                 3 > 17276*   4018
17280            7       5      0   17280    ROOT
                                1 > 19956    7470
                                2 < 2785     13505
                                 3 > 17280*   13504
                                3 > 3682     13503
                                4 > 17280*   13506
                                4 > 19956*   13507
                                1 > 24597    7471
17291            3       3      0   17291    ROOT
                                1 < 4017     4627
                                 2 > 7888     4626
                                3 > 17291*   4628
17346            3       3      0   17346    ROOT
                                1 > 20319    9991
                                2 < 9149     9916
                                 3 > 17346*   9915
17461            3       3      0   17461    ROOT
                                1 < 188      7261
                                 2 > 22920    7262
                                3 < 17461*   8965
 17468            3       3      0   17468    ROOT
                                 1 < 3200     9325
                                 2 > 4264     9324
                                3 > 17468*   9326
17470            1       2      0   17470    ROOT
                                1 > 19221    12233
17471            1       2      0   17471    ROOT
                                1 < 3989     10774
 17503            1       2      0   17503    ROOT
                                 1 < 3748     13137
 17690            1       2      0   17690    ROOT
                                 1 < 5814     5763
 17782           10       5      0   17782    ROOT
                                 1 > 18231    10034
                                2 < 1989     10031
                                 3 > 17782*   10030
                                3 > 4106     10028
                                4 > 17782*   13352
                                4 > 18231*   13353
                                4 > 7515     13351
                                5 > 17782*   10032
                                5 > 18231*   10033
                                5 < 1989*    10029
 17865            3       4      0   17865    ROOT
                                 1 > 24159    9131
                                2 < 4276     10554
                                 2 < 717      9713
 17951            1       2      0   17951    ROOT
                                 1 < 833      8539
 1798             3       3      0   1798     ROOT
                                 1 > 4828     11136
                                2 > 5404     11138
                                3 < 1798*    11137
 17992            1       2      0   17992    ROOT
                                 1 < 4181     14179
 18003            2       3      0   18003    ROOT
                                 1 < 5545     8014
                                 1 < 6709     3077
 18034           18       8      0   18034    ROOT
                                 1 < 1981     9113
                                 2 > 19879    9114
                                3 < 18034*   9120
                                 3 < 5468     9119
                                 4 > 18034*   9118
                                4 < 1981*    9109
                                 4 > 5668     9116
                                5 > 18034*   11977
                                5 < 1981*    9110
                                 5 > 19879*   11978
                                5 > 8187     11976
                                6 > 18034*   9514
                                6 < 1981*    9112
                                 6 > 19879*   9515
                                6 < 5468*    9117
                                 2 > 25444    9115
                                3 < 6908     11813
                                 4 < 1981*    9111
 18098            1       2      0   18098    ROOT
                                 1 < 3100     7819
 18156            1       2      0   18156    ROOT
                                 1 < 5387     12715
 18171            2       3      0   18171    ROOT
                                 1 < 5413     1730
                                 1 < 85       7675
 18183            1       2      0   18183    ROOT
                                 1 < 4278     11748
 18194            1       2      0   18194    ROOT
                                 1 > 21949    12248
1821             3       3      0   1821     ROOT
                                1 < 187      6296
                                 2 > 21386    6297
                                3 < 1821*    6298
 18279            3       3      0   18279    ROOT
                                 1 < 6389     8481
                                 2 > 6914     8480
                                3 > 18279*   8482
1836             1       2      0   1836     ROOT
                                1 > 8400     12006
18388            1       2      0   18388    ROOT
                                1 > 20654    13869
18417            1       2      0   18417    ROOT
                                1 > 19892    13920
18544            3       3      0   18544    ROOT
                                1 > 21596    10321
                                2 < 2332     10320
                                 3 > 18544*   10319
18581            1       2      0   18581    ROOT
                                1 < 2938     9797
 18596            3       3      0   18596    ROOT
                                 1 > 23771    12385
                                2 < 4144     12384
                                 3 > 18596*   12383
18669            4       4      0   18669    ROOT
                                1 > 19866    10338
                                2 > 25545    10340
                                3 < 18669*   10339
                                 3 < 8538     12898
 18721            1       2      0   18721    ROOT
                                 1 < 3067     6377
 18895            1       2      0   18895    ROOT
                                 1 < 7957     8872
 18908            1       2      0   18908    ROOT
                                 1 > 25531    13413
18970           10       5      0   18970    ROOT
                                1 < 2409     9807
                                 2 > 3522     9804
                                3 > 18970*   9810
                                3 > 4286     9808
                                4 > 18970*   11115
                                4 < 2409*    9805
                                 4 > 4288     11114
                                5 > 18970*   11116
                                5 < 2409*    9806
                                 5 < 3522*    9809
 18984            1       2      0   18984    ROOT
                                 1 < 2476     6293
 19015           10       5      0   19015    ROOT
                                 1 > 19444    6633
                                2 > 25139    6635
                                3 < 19015*   6634
                                 3 < 5212     6629
                                 4 > 19015*   6627
                                4 > 19444*   6628
                                4 > 6628     6626
                                5 > 19015*   6630
                                5 > 19444*   6631
                                5 > 25139*   6632
19052            1       2      0   19052    ROOT
                                1 < 7713     289
 19061            1       2      0   19061    ROOT
                                 1 < 9094     1873
 19145            1       2      0   19145    ROOT
                                 1 > 23760    12719
1916             3       3      0   1916     ROOT
                                1 > 20953    6416
                                2 > 24463    6418
                                3 < 1916*    6417
 19252            1       2      0   19252    ROOT
                                 1 < 3195     6456
 19257            3       3      0   19257    ROOT
                                 1 > 22961    9462
                                2 < 7477     9461
                                 3 > 19257*   9460
19314           15       6      0   19314    ROOT
                                1 > 19880    13363
                                2 > 25496    13371
                                3 < 19314*   13364
                                 3 > 25543    13360
                                4 < 19314*   13365
                                 4 < 19880*   13372
                                 4 > 26019    13368
                                5 < 19314*   13366
                                 5 < 19880*   13373
                                 5 < 25496*   13361
                                 5 > 26048    13370
                                6 < 19314*   13367
                                 6 < 19880*   13374
                                 6 < 25496*   13362
                                 6 < 25543*   13369
 194              1       2      0   194      ROOT
                                 1 > 8628     7522
19466            3       3      0   19466    ROOT
                                1 > 24128    13695
                                2 < 7543     13697
                                 3 > 19466*   13696
19473            1       2      0   19473    ROOT
                                1 > 23812    13340
19502            3       3      0   19502    ROOT
                                1 > 23970    13101
                                2 < 7718     13100
                                 3 > 19502*   13099
19554            3       3      0   19554    ROOT
                                1 > 24878    7606
                                2 < 6159     7605
                                 3 > 19554*   7604
1969             3       3      0   1969     ROOT
                                1 > 24141    13017
                                2 < 8472     13018
                                 3 < 1969*    13016
 1976             1       2      0   1976     ROOT
                                 1 > 23672    14065
19906            1       2      0   19906    ROOT
                                1 > 26102    9469
19911            1       2      0   19911    ROOT
                                1 > 25487    7946
19932           12       7      0   19932    ROOT
                                1 > 19936    3994
                                2 < 2118     4090
                                 2 > 25864    3996
                                3 < 19932*   3995
                                 3 < 4199     3990
                                 4 > 19932*   3988
                                4 > 19936*   3989
                                4 > 6443     3987
                                5 > 19932*   3991
                                5 > 19936*   3992
                                5 > 25864*   3993
                                2 > 26132    3997
19941            1       2      0   19941    ROOT
                                1 < 6079     9479
 2004             1       2      0   2004     ROOT
                                 1 > 21191    900
20084            1       2      0   20084    ROOT
                                1 > 22311    11060
20150            3       3      0   20150    ROOT
                                1 > 22312    9946
                                2 > 25226    9948
                                3 < 20150*   9947
 20216            3       3      0   20216    ROOT
                                 1 < 2223     12050
                                 2 > 4266     12049
                                3 > 20216*   12051
20309            3       3      0   20309    ROOT
                                1 < 7267     13033
                                 2 > 7280     13032
                                3 > 20309*   13031
20320            1       2      0   20320    ROOT
                                1 < 4643     13929
 20333            1       2      0   20333    ROOT
                                 1 < 4262     13275
 20433            3       3      0   20433    ROOT
                                 1 < 5446     11939
                                 2 > 5632     11938
                                3 > 20433*   11940
20707            1       2      0   20707    ROOT
                                1 > 24820    13375
20803            2       3      0   20803    ROOT
                                1 > 25231    9268
                                1 < 6356     12964
 20914            3       3      0   20914    ROOT
                                 1 < 6008     6038
                                 2 > 9959     6037
                                3 > 20914*   6036
21018            1       2      0   21018    ROOT
                                1 < 5479     8725
 21028            1       2      0   21028    ROOT
                                 1 < 8146     7558
 2117             1       2      0   2117     ROOT
                                 1 > 6300     8692
2119             1       2      0   2119     ROOT
                                1 > 7637     2066
2120             1       2      0   2120     ROOT
                                1 > 8157     288
21206            2       3      0   21206    ROOT
                                1 > 23175    1940
                                2 > 25662    1837
21288            3       4      0   21288    ROOT
                                1 < 8557     6253
                                 2 > 26191    6254
                                2 < 8308     6255
 21303            1       2      0   21303    ROOT
                                 1 < 734      12168
 21515            4       4      0   21515    ROOT
                                 1 > 21523    9322
                                2 < 7916     8070
                                 3 > 21515*   8069
                                3 < 28       8068
 21579            1       2      0   21579    ROOT
                                 1 < 373      8982
 21593            1       2      0   21593    ROOT
                                 1 > 22325    9803
21623            1       2      0   21623    ROOT
                                1 > 22605    12034
21684            6       5      0   21684    ROOT
                                1 > 22719    9328
                                2 < 21821    5235
                                 2 > 22720    5236
                                3 < 21684*   9329
                                 2 > 24169    5237
                                3 < 21684*   9330
 22021            1       2      0   22021    ROOT
                                 1 < 8811     10312
 22110            1       2      0   22110    ROOT
                                 1 < 5231     11035
 22378            1       2      0   22378    ROOT
                                 1 < 2762     4741
 22435            1       2      0   22435    ROOT
                                 1 < 5406     13288
 2248             1       2      0   2248     ROOT
                                 1 > 8409     12903
22827            3       3      0   22827    ROOT
                                1 < 5256     13257
                                 2 > 5257     13256
                                3 > 22827*   13258
22891            1       2      0   22891    ROOT
                                1 < 25       8058
 2304             6       4      0   2304     ROOT
                                 1 < 360      11887
                                 2 > 7602     11888
                                3 < 2304*    11890
                                 3 > 8307     11892
                                4 < 2304*    11891
                                 4 < 360*     11889
 23094            1       2      0   23094    ROOT
                                 1 < 2561     13015
 2339             1       2      0   2339     ROOT
                                 1 > 24594    3965
23416            1       2      0   23416    ROOT
                                1 < 3074     7925
 23465            1       2      0   23465    ROOT
                                 1 < 598      4505
 23480            1       2      0   23480    ROOT
                                 1 > 23652    5173
23772            1       2      0   23772    ROOT
                                1 < 735      12948
 23776            1       2      0   23776    ROOT
                                 1 < 8708     460
 23811            3       3      0   23811    ROOT
                                 1 < 4038     13143
                                 2 > 7058     13142
                                3 > 23811*   13144
23856            2       3      0   23856    ROOT
                                1 > 24451    5693
                                2 < 4252     1759
 23881            1       2      0   23881    ROOT
                                 1 < 5577     7611
 24202            1       2      0   24202    ROOT
                                 1 < 2624     7464
 24214            1       2      0   24214    ROOT
                                 1 < 4116     13349
 24464            1       2      0   24464    ROOT
                                 1 < 8336     9272
 24504            1       2      0   24504    ROOT
                                 1 < 8054     12033
 24733            1       2      0   24733    ROOT
                                 1 < 6776     13049
 24957            3       3      0   24957    ROOT
                                 1 < 4019     6240
                                 2 > 5626     6239
                                3 > 24957*   6241
25062            1       2      0   25062    ROOT
                                1 < 8735     12072
 25095            1       2      0   25095    ROOT
                                 1 < 9130     13214
 254              1       2      0   254      ROOT
                                 1 > 7572     9945
25492            9       6      0   25492    ROOT
                                1 > 25511    13407
                                2 < 8512     13406
                                 3 > 25492*   13405
                                3 > 9715     13404
                                4 > 25492*   11133
                                4 > 25511*   11134
                                4 < 4034     11130
                                 5 > 9717     11131
                                6 < 9715*    11132
 25510            1       2      0   25510    ROOT
                                 1 < 3279     9327
 2557             1       2      0   2557     ROOT
                                 1 > 4272     9656
25676            3       3      0   25676    ROOT
                                1 < 350      3528
                                 2 > 951      3527
                                3 > 25676*   3529
2569             1       2      0   2569     ROOT
                                1 > 5546     1820
25853            1       2      0   25853    ROOT
                                1 < 8404     8057
 26022            3       3      0   26022    ROOT
                                 1 < 4021     8577
                                 2 > 4826     8576
                                3 > 26022*   8575
294              1       2      0   294      ROOT
                                1 > 8626     4086
2981             1       2      0   2981     ROOT
                                1 > 4427     9683
3206             2       3      0   3206     ROOT
                                1 > 6535     7976
                                1 > 6579     7977
3844             1       2      0   3844     ROOT
                                1 < 82       9542
 410              1       2      0   410      ROOT
                                 1 > 4366     13307
4254             1       2      0   4254     ROOT
                                1 > 9337     2681
4954             1       2      0   4954     ROOT
                                1 > 4955     9567
5083             3       3      0   5083     ROOT
                                1 > 5084     3494
                                2 > 8711     3496
                                3 < 5083*    3495
 5137             1       2      0   5137     ROOT
                                 1 > 6884     9209
5261             1       2      0   5261     ROOT
                                1 > 6282     13379
5409             1       2      0   5409     ROOT
                                1 > 8623     9568
5486             1       2      0   5486     ROOT
                                1 > 8366     13376
5490             1       2      0   5490     ROOT
                                1 > 8474     14046
5492             1       2      0   5492     ROOT
                                1 > 5853     13722
6072             1       2      0   6072     ROOT
                                1 > 8887     914
6161             1       2      0   6161     ROOT
                                1 > 7055     8578
6229             2       3      0   6229     ROOT
                                1 > 6423     7947
                                1 > 7647     7948
6446             1       2      0   6446     ROOT
                                1 > 8036     9161
6669             1       2      0   6669     ROOT
                                1 > 9865     9691
6744             1       2      0   6744     ROOT
                                1 > 9595     4285
7534             1       2      0   7534     ROOT
                                1 > 7536     10346
7588             1       2      0   7588     ROOT
                                1 > 7590     9718
8534             1       2      0   8534     ROOT
                                1 > 8676     12343
8615             1       2      0   8615     ROOT
                                1 < 925      3541
 
 14838 rows selected.
 
 Elapsed: 00:00:10.56
 Network summary 1 - by network
 
 Network     #Links  #Nodes    Max Lev
 ---------- ------- ------- ----------
 21593            2       2          1
 21623            2       2          1
 22021            2       2          1
 22110            2       2          1
 22378            2       2          1
 22435            2       2          1
 2248             2       2          1
 22891            2       2          1
 23094            2       2          1
 2339             2       2          1
 23416            2       2          1
 23465            2       2          1
 23480            2       2          1
 23772            2       2          1
 23776            2       2          1
 23881            2       2          1
 24202            2       2          1
 24214            2       2          1
 24464            2       2          1
 24504            2       2          1
 24733            2       2          1
 25062            2       2          1
 25095            2       2          1
 254              2       2          1
 25510            2       2          1
 2557             2       2          1
 2569             2       2          1
 25853            2       2          1
 294              2       2          1
 2981             2       2          1
 3844             2       2          1
 410              2       2          1
 4254             2       2          1
 4954             2       2          1
 5137             2       2          1
 5261             2       2          1
 5409             2       2          1
 5486             2       2          1
 5490             2       2          1
 5492             2       2          1
 6072             2       2          1
 6161             2       2          1
 6446             2       2          1
 6669             2       2          1
 6744             2       2          1
 7534             2       2          1
 7588             2       2          1
 8534             2       2          1
 8615             2       2          1
 15208            2       2          1
 15218            2       2          1
 15249            2       2          1
 15374            2       2          1
 15387            2       2          1
 15401            2       2          1
 15423            2       2          1
 15572            2       2          1
 15609            2       2          1
 15688            2       2          1
 15712            2       2          1
 15824            2       2          1
 1589             2       2          1
 15962            2       2          1
 16015            2       2          1
 16281            2       2          1
 16312            2       2          1
 16338            2       2          1
 16470            2       2          1
 16484            2       2          1
 16622            2       2          1
 16643            2       2          1
 16922            2       2          1
 1695             2       2          1
 17470            2       2          1
 17471            2       2          1
 17503            2       2          1
 17690            2       2          1
 17951            2       2          1
 17992            2       2          1
 18098            2       2          1
 18156            2       2          1
 18183            2       2          1
 18194            2       2          1
 1836             2       2          1
 18388            2       2          1
 18417            2       2          1
 18581            2       2          1
 18721            2       2          1
 18895            2       2          1
 18908            2       2          1
 18984            2       2          1
 19052            2       2          1
 19061            2       2          1
 19145            2       2          1
 19252            2       2          1
 194              2       2          1
 19473            2       2          1
 1976             2       2          1
 19906            2       2          1
 19911            2       2          1
 19941            2       2          1
 2004             2       2          1
 20084            2       2          1
 20320            2       2          1
 20333            2       2          1
 20707            2       2          1
 21018            2       2          1
 21028            2       2          1
 2117             2       2          1
 2119             2       2          1
 2120             2       2          1
 21303            2       2          1
 21579            2       2          1
 10002            2       2          1
 1010             2       2          1
 10133            2       2          1
 10148            2       2          1
 10356            2       2          1
 10382            2       2          1
 10407            2       2          1
 10433            2       2          1
 1050             2       2          1
 10517            2       2          1
 10522            2       2          1
 10559            2       2          1
 10602            2       2          1
 10638            2       2          1
 10676            2       2          1
 10897            2       2          1
 1107             2       2          1
 11215            2       2          1
 11280            2       2          1
 11411            2       2          1
 11459            2       2          1
 11462            2       2          1
 11467            2       2          1
 11579            2       2          1
 11623            2       2          1
 11641            2       2          1
 11642            2       2          1
 11718            2       2          1
 11828            2       2          1
 1187             2       2          1
 11911            2       2          1
 1194             2       2          1
 11971            2       2          1
 11991            2       2          1
 12041            2       2          1
 12050            2       2          1
 12161            2       2          1
 12248            2       2          1
 12473            2       2          1
 12504            2       2          1
 12554            2       2          1
 12751            2       2          1
 12863            2       2          1
 13022            2       2          1
 13413            2       2          1
 1344             2       2          1
 1346             2       2          1
 13621            2       2          1
 13675            2       2          1
 13717            2       2          1
 1376             2       2          1
 14               2       2          1
 14130            2       2          1
 14131            2       2          1
 14132            2       2          1
 14182            2       2          1
 14338            2       2          1
 14358            2       2          1
 14763            2       2          1
 14771            2       2          1
 1490             2       2          1
 14990            2       2          1
 15181            2       2          1
 15188            2       2          1
 10115            3       3          1
 1013             3       3          2
 10317            3       3          1
 10432            3       3          1
 10513            3       3          1
 1092             3       3          1
 11216            3       3          2
 12252            3       3          2
 12256            3       3          1
 12290            3       3          1
 12617            3       3          2
 12676            3       3          2
 12703            3       3          1
 12704            3       3          2
 12798            3       3          2
 12940            3       3          2
 13485            3       3          2
 14339            3       3          2
 14842            3       3          2
 14894            3       3          1
 15259            3       3          2
 1551             3       3          2
 15681            3       3          1
 15706            3       3          1
 16523            3       3          2
 16609            3       3          2
 16957            3       3          2
 18003            3       3          1
 18171            3       3          1
 20803            3       3          1
 21206            3       3          2
 23856            3       3          2
 3206             3       3          1
 6229             3       3          1
 10178            4       3          3
 10180            4       3          3
 10252            4       3          3
 1051             4       3          3
 10818            4       3          3
 10872            4       3          3
 10936            4       4          1
 11054            4       3          3
 11120            4       4          1
 11196            4       4          2
 11197            4       3          3
 11285            4       3          3
 11465            4       3          3
 11566            4       3          3
 11893            4       3          3
 11965            4       4          2
 11969            4       3          3
 12192            4       3          3
 12307            4       3          3
 12320            4       3          3
 12338            4       3          3
 12616            4       3          3
 13012            4       3          3
 13167            4       3          3
 13202            4       4          3
 13415            4       3          3
 13486            4       3          3
 13677            4       3          3
 14560            4       3          3
 14845            4       3          3
 14868            4       3          3
 15358            4       3          3
 15415            4       4          2
 15642            4       3          3
 15847            4       3          3
 16124            4       3          3
 16129            4       3          3
 1621             4       3          3
 16358            4       3          3
 16802            4       3          3
 16892            4       3          3
 16971            4       3          3
 17179            4       3          3
 17276            4       3          3
 17291            4       3          3
 17346            4       3          3
 17461            4       3          3
 17468            4       3          3
 17865            4       4          2
 1798             4       3          3
 1821             4       3          3
 18279            4       3          3
 18544            4       3          3
 18596            4       3          3
 1916             4       3          3
 19257            4       3          3
 19466            4       3          3
 19502            4       3          3
 19554            4       3          3
 1969             4       3          3
 20150            4       3          3
 20216            4       3          3
 20309            4       3          3
 20433            4       3          3
 20914            4       3          3
 21288            4       4          2
 22827            4       3          3
 23811            4       3          3
 24957            4       3          3
 25676            4       3          3
 26022            4       3          3
 5083             4       3          3
 13031            5       4          3
 12801            5       4          3
 18669            5       4          3
 14543            5       4          3
 11427            5       4          4
 10682            5       4          3
 10679            5       4          3
 15583            5       4          3
 10637            5       4          3
 21515            5       4          3
 13357            5       4          3
 12113            5       4          4
 13932            5       4          4
 14159            5       4          3
 10154            6       4          4
 11842            6       5          4
 10906            6       6          2
 15248            6       5          3
 10355            6       6          2
 11418            6       5          4
 11279            6       5          3
 11622            6       5          3
 12689            7       4          4
 11561            7       6          4
 1154             7       5          5
 11028            7       4          4
 10672            7       4          4
 10564            7       5          3
 10341            7       4          4
 2304             7       4          4
 21684            7       5          3
 15668            7       4          4
 14353            7       5          4
 13802            7       4          4
 15396            8       5          4
 11539            8       5          4
 12046            8       8          3
 10904            8       7          4
 11879            8       6          5
 12387            8       6          4
 17280            8       5          4
 17178            9       7          3
 16620            9       6          5
 16109           10       6          6
 14770           10       7          4
 25492           10       6          6
 10884           11       7          6
 11593           11      10          5
 11662           11       5          5
 15182           11       5          5
 17782           11       5          5
 18970           11       5          5
 19015           11       5          5
 1383            12       6          6
 10792           12       7          6
 10056           12       6          5
 19932           13       7          5
 11616           13       9          5
 11009           13       8          5
 12414           14       8          6
 13325           15       8          7
 10338           15       7          6
 19314           16       6          6
 12034           16       6          6
 18034           19       8          6
 11823           20       9          7
 12042           21      12         10
 12213           22       7          7
 10163           25       8          8
 10677           30      14         11
 1000         13423    4158       1146
 
 354 rows selected.
 
 Elapsed: 00:00:01.75
 Network summary 2 - grouped by numbers of nodes
 
  #Nodes #Networks
 ------- ---------
       2       177
       3        98
       4        30
       5        17
       6        12
       7         8
       8         6
       9         2
      10         1
      12         1
      14         1
    4158         1
 
 12 rows selected.
 
 Elapsed: 00:00:01.44
 

The results show that the data set contains 354 connected networks, with one much larger than the rest, having 4158 nodes. This (more or less) matches with the results we got from source 3466. Actually, we should get one fewer record back than the number of nodes in the network, but as in the earlier article the SQL returns the source node in one record - we can easily fix this, but it's not worthwhile my redoing all the results, so I leave it as is.

As another check, we can run against the second largest network, using 10677 as the source, which should give 14 records. Here is the result for SP_GTTRSF_Q, LEVMAX=10.

NODE                            LEV  MAXLEV  INTNOD  INTMAX PATH                                                                            
------------------------------ ---- ------- ------- ------- --------------------------------------------------------------------------------
309                               1       2       1       2 309
9591                              1       2       1       2 9591
..2136                            2       2       2       2 9591,2136
..2186                            2       2       2       2 9591,2186
..6012                            2       2       2       2 9591,6012
..11030                           2       2       2       2 9591,11030
..13704                           2       2       2       2 9591,13704
..17453                           2       2       2       2 9591,17453
..23946                           2       2       2       2 9591,23946
..25611                           2       2       2       2 9591,25611
17015                             1       2       1       2 17015
..10677                           2       2       2       2 9591,10677
..20560                           2       2       2       2 309,20560
..21314                           2       2       2       2 17015,21314

14 rows selected.

This is consistent with the network output with source node appearing once. The network output (usually I indent the records by level, but the level is very high in some networks here) is:

Network     #Links  #Nodes    Lev Node       Link
---------- ------- ------- ------ ---------- ----------
10677           29      14      0   10677    ROOT
                                1 > 17015    9130
                                2 > 20560    7465
                                3 < 309      7253
                                 4 > 10677*   7250
                                4 > 17015*   7251
                                4 > 17453    7252
                                5 < 11030    10700
                                 6 > 23946    10701
                                7 < 17453*   4282
                                 7 > 25611    10703
                                8 < 11030*   10702
                                 8 < 17453*   4283
                                 8 < 6012     8987
                                 9 > 11030*   8984
                                9 > 17453*   8985
                                9 > 23946*   8986
                                9 > 9591     8983
                               10 > 10677*   4275
                               10 > 11030*   4276
                               10 > 13704    4277
                               10 > 17015*   4278
                               10 > 17453*   4279
                               10 < 2136     4273
                                11 > 17453*   4274
                               10 < 2186     14089
                                10 > 23946*   4280
                               10 > 25611*   4281
                               10 < 309*     7249
                                 2 > 21314    7466

Results: Friendship network of Brightkite users

Friendship network of Brightkite users

Brightkite was once a location-based social networking service provider where users shared their locations by checking-in. The friendship network was collected using their public API, and consists of 58,228 nodes and 214,078 edges. The network is originally directed but we have constructed a network with undirected edges when there is a friendship in both ways.

The data set comes with the reverse arcs already present, making a total of 428,156 arcs.

I took the first node in the first line in the data set file as the initial root node, 0, and tested only the method SP_GTTRSF_I/Q for values of LEVMAX of 5, 10. The complete results, including execution plans are in the attached file.

The exact solution has 56,739 nodes reached from the source node 0, with a maximum level of 10. The output is a bit large to embed, so attaching it in file, but here are the last few lines of the exact solution:

122                               1      10       1      13 122
..0                               2      10       2      13 99,0
..6534                            2      10       2      13 122,6534
....15726                         3      10       3      13 40,647,15726
......42871                       4      10       4      13 69,4994,12608,42871
......45149                       4      10       4      13 40,2886,15714,45149
......45850                       4      10       4      13 122,6534,15726,45850
......45851                       4      10       4      13 40,2886,22440,45851
......45852                       4      10       4      13 122,6534,15726,45852
......45853                       4      10       4      13 40,2886,26635,45853
......45854                       4      10       4      13 36,2625,15736,45854
......45855                       4      10       4      13 122,6534,15726,45855
......45856                       4      10       4      13 122,6534,15726,45856
....15744                         3      10       3      13 40,647,15744
....34944                         3      10       3      13 122,6534,34944
....34945                         3      10       3      13 122,6534,34945
....34946                         3      10       3      13 122,6534,34946

56739 rows selected.

Elapsed: 00:01:32.49

In summary, as shown in the embedded Excel file, the exact solution is found in a total of 105 seconds and 344 seconds (based on Xplan timings) for LEVMAX=5 and 10 respectively.

I ran my network analysis program on this network too, and here is the final grouped results, showing consistency with the largest connected network of 56,739 nodes.

Network summary 2 - grouped by numbers of nodes

 #Nodes #Networks
------- ---------
      2       362
      3       103
      4        40
      5        21
      6         9
      7         3
      8         2
      9         1
     10         2
     11         2
     49         1
  56739         1

12 rows selected.

Elapsed: 00:00:24.17

We can do a further test by using a source from a smaller network. 51944 is a root of the network of size 49 nodes (as the full output shows). Here is the result of sourcing from that, again consistent witht he network analysis program that uses a completely diffferent algorithm:

NODE                            LEV  MAXLEV  INTNOD  INTMAX PATH
------------------------------ ---- ------- ------- ------- --------------------------------------------------------------------------------
57077                             1       7       1       9 57077
..51944                           2       7       2       9 57077,51944
..57969                           2       7       2       9 57077,57969
....58151                         3       7       3       9 57077,57969,58151
......58195                       4       7       4       9 57077,57969,58151,58195
........58218                     5       7       5       9 57077,57969,58151,58195,58218
......58196                       4       7       4       9 57077,57969,58151,58196
......58197                       4       7       4       9 57077,57969,58151,58197
......58198                       4       7       4       9 57077,57969,58151,58198
......58199                       4       7       4       9 57077,57969,58151,58199
......58201                       4       7       4       9 57077,57969,58151,58201
......58202                       4       7       4       9 57077,57969,58151,58202
......58203                       4       7       4       9 57077,57969,58151,58203
....58152                         3       7       3       9 57077,57969,58152
......58205                       4       7       4       9 57077,57969,58152,58205
........58219                     5       7       5       9 57077,57969,58152,58205,58219
..........58224                   6       7       6       9 57077,57969,58152,58205,58219,58224
........58220                     5       7       5       9 57077,57969,58152,58205,58220
..........58226                   6       7       8       9 57077,57969,58152,58205,58220,58226
............58227                 7       7       8       9 57077,57969,58152,58205,58220,58225,58227
..........58225                   6       7       9       9 57077,57969,58152,58205,58220,58225
........58221                     5       7       5       9 57077,57969,58152,58205,58221
......58207                       4       7       4       9 57077,57969,58152,58207
....58153                         3       7       3       9 57077,57969,58153
....58154                         3       7       3       9 57077,57969,58154
......58208                       4       7       4       9 57077,57969,58154,58208
......58209                       4       7       4       9 57077,57969,58154,58209
....58156                         3       7       3       9 57077,57969,58156
....58159                         3       7       3       9 57077,57969,58159
......58200                       4       7       4       9 57077,57969,58159,58200
....58160                         3       7       3       9 57077,57969,58160
......58210                       4       7       4       9 57077,57969,58160,58210
........58222                     5       7       5       9 57077,57969,58160,58210,58222
......58211                       4       7       4       9 57077,57969,58160,58211
......58212                       4       7       4       9 57077,57969,58160,58212
........58223                     5       7       5       9 57077,57969,58160,58212,58223
....58161                         3       7       3       9 57077,57969,58161
......58204                       4       7       4       9 57077,57969,58161,58204
......58206                       4       7       4       9 57077,57969,58161,58206
..57970                           2       7       2       9 57077,57970
....58155                         3       7       3       9 57077,57970,58155
....58157                         3       7       3       9 57077,57970,58157
....58158                         3       7       3       9 57077,57970,58158
..57971                           2       7       2       9 57077,57971
..57972                           2       7       2       9 57077,57972
....58162                         3       7       3       9 57077,57972,58162
..57973                           2       7       2       9 57077,57973
..57974                           2       7       2       9 57077,57974
....58163                         3       7       3       9 57077,57974,58163

49 rows selected.

Elapsed: 00:00:00.21

[4 May 2015 - I will add attachments in the next few days after tidying up, including the network analysis package]
[11 May 2015: I added PL/SQL Pipelined Function for Network Analysis]






SQL for Shortest Path Problems

I came across an interesting problem on OTN last weekend:
How to use Recursive Subquery Factoring (RSF) to Implement Dijkstra’s shortest path algorithm?.

The problem is to find the shortest routes through a network to each point from a given source, and the poster helpfully includes both SQL for a test data set, and links to the origin of the data set, The Stagecoach Problem, and to the Wikipedia page on the algorithm mentioned, Dijkstra's algorithm.

I took the problem definition and worked out my own solution and posted it on the thread. I hadn't realised at the time, but as another poster pointed out, the solution I posted is actually very similar to the query that the original poster had included. It uses the same basic idea of traversing the network recursively, while using analytic functions to exclude from further progress any routes to a given node that are inferior to another at the same iteration.

The main difference is that I began with a subquery to add in the links in the reverse direction in order to make the network undirected, which seems to me to be natural for the source problem referenced above. However, the same query can be used in both cases if you separate out the possible addition of reverse links onto the database table. In this article I take a closer look at how the query works in both cases, and I hope the article may have some wider value in relation to SQL recursion also.

I have used similar techniques in the past for other combinatorial problems, including these more complex examples: SQL for the Fantasy Football Knapsack Problem (June 2013), and SQL for the Travelling Salesman Problem (July 2013).

4 May 2015 Update I have just posted SQL for Shortest Path Problems 2: A Branch and Bound Approach

Network Diagram

I copied the diagram in the article referenced above.

Test Network

Dijkstra - network

Shortest Path Routes for A-J

Dijkstra - solutions

Main Query

SQL

WITH paths (node, path, cost, rnk, lev) AS (
SELECT a.dst, a.src || ',' || a.dst, a.distance, 1, 1
  FROM arcs a
WHERE a.src = :SRC
 UNION ALL
SELECT a.dst, 
        p.path || ',' || a.dst, 
        p.cost + a.distance, 
        Rank () OVER (PARTITION BY a.dst ORDER BY p.cost + a.distance),
        p.lev + 1
  FROM paths p
  JOIN arcs a
    ON a.src = p.node
   AND p.rnk = 1
)  SEARCH DEPTH FIRST BY node SET line_no
CYCLE node SET lp TO '*' DEFAULT ' '
, paths_ranked AS (
SELECT lev, node, path, cost, Rank () OVER (PARTITION BY node ORDER BY cost) rnk_t, lp, line_no
  FROM paths
  WHERE rnk = 1
)
SELECT LPad (node, 1 + 2* (lev - 1), '.') node, lev, path, cost, lp
  FROM paths_ranked
  WHERE rnk_t = 1
  ORDER BY line_no

How It Works

  • Get all links from the source
    • Initialise path as (source node, destination node) string
    • Initialise cost as the distance for each link
  • At each iteration:
    • Join from all records in the previous iteration that meet certain criteria to all reachable destinations
    • Accumulate the route by adding the new node on to the path string
    • Accumulate the route cost by adding the new distance on to the cost value
    • Get the analytic rank of the new route in descending order of cost, partitioning by destination node
  • The criteria for joining to a record in the previous iteration are:
    • Exclude previous iteration routes that form a loop (with one special exception noted later)
    • Include only the previous iteration routes that have a rank of 1 for cost to their destination node
  • After the recursion is complete, use a new subquery on the recursive factor to:
    • Rank the routes by cost, again partitioning by destination node, giving a global rank to each route, for each destination node
    • Include only the routes having the iteration-level rank of 1
  • The main query selects out the routes having global rank of 1

Why It Works

  • A recursive traversal of the network without the ranking criterion clearly obtains all non-looping routes
    • Obviously no optimal route can contain a loop
  • Excluding the sub-optimal routes with respect to each node at the iteration level excludes no overall-optimal routes
    • No optimal route can contain a sub-optimal sub-route
  • The exclusions within the recursion only exclude routes that are sub-optimal with respect to other routes at the same iteration (or level), so the final global ranking step is necessary

Directed Case

Solution - one-way from A

The solution below is listed in depth-first recursion order, with indentation, which displays the network structure nicely. THe column LP has a '*' if the path ends in a loop, but of course there are none in the final solution.

NODE                  LEV PATH                  COST LP
-------------------- ---- -------------------- ----- --
B                       1 A,B                      2
..G                     2 A,B,G                    8
C                       1 A,C                      4
..E                     2 A,C,E                    7
....H                   3 A,C,E,H                  8
......J                 4 A,C,E,H,J               11
..G                     2 A,C,G                    8
D                       1 A,D                      3
..E                     2 A,D,E                    7
....H                   3 A,D,E,H                  8
......J                 4 A,D,E,H,J               11
..F                     2 A,D,F                    4
....I                   3 A,D,F,I                  7
......J                 4 A,D,F,I,J               11
..G                     2 A,D,G                    8

15 rows selected.

Solution - one-way, all intermediate records

The output below displays all the intermediate records traversed, with global and iteration-level ranks. It was obtained by dropping the constraints outside the recursive subquery. It may be helpful in understanding how the method works, and we can also get some idea of the efficiency by comparing the number of records returned with the number when we simply traverse all non-looping routes (next section).

Note that there are again no routes ending in a loop. However, we do need to specify the CYCLE keyword because one could arise in the general case. This is a pretty artifical data set.

NODE                  LEV PATH                  COST  RNK_T  RNK LP
-------------------- ---- -------------------- ----- ------ ---- --
B                       1 A,B                      2      1    1
..E                     2 A,B,E                    9      3    3
..F                     2 A,B,F                    6      2    2
..G                     2 A,B,G                    8      1    1
....H                   3 A,B,G,H                 11      4    4
....I                   3 A,B,G,I                 11      2    2
C                       1 A,C                      4      1    1
..E                     2 A,C,E                    7      1    1
....H                   3 A,C,E,H                  8      1    1
......J                 4 A,C,E,H,J               11      1    1
....I                   3 A,C,E,I                 11      2    2
..F                     2 A,C,F                    6      2    2
..G                     2 A,C,G                    8      1    1
....H                   3 A,C,G,H                 11      4    4
....I                   3 A,C,G,I                 11      2    2
D                       1 A,D                      3      1    1
..E                     2 A,D,E                    7      1    1
....H                   3 A,D,E,H                  8      1    1
......J                 4 A,D,E,H,J               11      1    1
....I                   3 A,D,E,I                 11      2    2
..F                     2 A,D,F                    4      1    1
....H                   3 A,D,F,H                 10      3    3
....I                   3 A,D,F,I                  7      1    1
......J                 4 A,D,F,I,J               11      1    1
..G                     2 A,D,G                    8      1    1
....H                   3 A,D,G,H                 11      4    4
....I                   3 A,D,G,I                 11      2    2

27 rows selected.

Solution - one-way, all records

The output below displays all the records traversed, when we simply traverse all non-looping routes. There are 48 records, compared with 27 records when we use our analytic pruning technique.

That does not seem a great improvement, but as we'll see when we look at the results for the undirected problem, it's because imposing directionality drastically reduces the number of available routes.

NODE                  LEV PATH                  COST  RNK_T  RNK LP
-------------------- ---- -------------------- ----- ------ ---- --
B                       1 A,B                      2      1    1
..E                     2 A,B,E                    9      3    3
....H                   3 A,B,E,H                 10      3    3
......J                 4 A,B,E,H,J               13      4    4
....I                   3 A,B,E,I                 13      9    9
......J                 4 A,B,E,I,J               17     18   18
..F                     2 A,B,F                    6      2    2
....H                   3 A,B,F,H                 12      8    8
......J                 4 A,B,F,H,J               15     11   11
....I                   3 A,B,F,I                  9      2    2
......J                 4 A,B,F,I,J               13      4    4
..G                     2 A,B,G                    8      1    1
....H                   3 A,B,G,H                 11      5    5
......J                 4 A,B,G,H,J               14      8    8
....I                   3 A,B,G,I                 11      4    4
......J                 4 A,B,G,I,J               15     11   11
C                       1 A,C                      4      1    1
..E                     2 A,C,E                    7      1    1
....H                   3 A,C,E,H                  8      1    1
......J                 4 A,C,E,H,J               11      1    1
....I                   3 A,C,E,I                 11      4    4
......J                 4 A,C,E,I,J               15     11   11
..F                     2 A,C,F                    6      2    2
....H                   3 A,C,F,H                 12      8    8
......J                 4 A,C,F,H,J               15     11   11
....I                   3 A,C,F,I                  9      2    2
......J                 4 A,C,F,I,J               13      4    4
..G                     2 A,C,G                    8      1    1
....H                   3 A,C,G,H                 11      5    5
......J                 4 A,C,G,H,J               14      8    8
....I                   3 A,C,G,I                 11      4    4
......J                 4 A,C,G,I,J               15     11   11
D                       1 A,D                      3      1    1
..E                     2 A,D,E                    7      1    1
....H                   3 A,D,E,H                  8      1    1
......J                 4 A,D,E,H,J               11      1    1
....I                   3 A,D,E,I                 11      4    4
......J                 4 A,D,E,I,J               15     11   11
..F                     2 A,D,F                    4      1    1
....H                   3 A,D,F,H                 10      3    3
......J                 4 A,D,F,H,J               13      4    4
....I                   3 A,D,F,I                  7      1    1
......J                 4 A,D,F,I,J               11      1    1
..G                     2 A,D,G                    8      1    1
....H                   3 A,D,G,H                 11      5    5
......J                 4 A,D,G,H,J               14      8    8
....I                   3 A,D,G,I                 11      4    4
......J                 4 A,D,G,I,J               15     11   11

48 rows selected.

Undirected Case

Solution - two-way from A

NODE                       LEV PATH                       COST LP
------------------------- ---- ------------------------- ----- --
B                            1 A,B                           2
..A                          2 A,B,A                         4
..G                          2 A,B,G                         8
C                            1 A,C                           4
..E                          2 A,C,E                         7
....H                        3 A,C,E,H                       8
......J                      4 A,C,E,H,J                    11
..G                          2 A,C,G                         8
D                            1 A,D                           3
..E                          2 A,D,E                         7
....H                        3 A,D,E,H                       8
......J                      4 A,D,E,H,J                    11
..F                          2 A,D,F                         4
....I                        3 A,D,F,I                       7
......J                      4 A,D,F,I,J                    11
..G                          2 A,D,G                         8

16 rows selected.

Notice that the solution is identical to that of the directed case, with one interesting exception. The path A,B,A is listed as a route to destination A and it is not regarded by Oracle's recursion algorithm as a loop. That is because the the second node A appears in this path as a destination node for the first time, as the initial A appears only in the path variable.

Solution - two-way, all intermediate records - breadth first

The previous outputs appear according to the ordering for depth first searching, which as I noted, displays the network structure nicely. However, the following output was obtained using the breadth first search option, and this shows more clearly the way the algorithm works.

NODE                       LEV PATH                       COST  RNK_T  RNK LP
------------------------- ---- ------------------------- ----- ------ ---- --
B                            1 A,B                           2      1    1
C                            1 A,C                           4      1    1
D                            1 A,D                           3      1    1
..A                          2 A,B,A                         4      1    1
..A                          2 A,D,A                         6      2    2
..A                          2 A,C,A                         8      3    3
..E                          2 A,D,E                         7      1    1
..E                          2 A,C,E                         7      1    1
..E                          2 A,B,E                         9      3    3
..F                          2 A,D,F                         4      1    1
..F                          2 A,C,F                         6      2    2
..F                          2 A,B,F                         6      2    2
..G                          2 A,D,G                         8      1    1
..G                          2 A,B,G                         8      1    1
..G                          2 A,C,G                         8      1    1
....B                        3 A,B,A,B                       6      2    1 *
....B                        3 A,D,F,B                       8      3    2
....B                        3 A,B,G,B                      14      5    3 *
....B                        3 A,D,G,B                      14      5    3
....B                        3 A,D,E,B                      14      5    3
....B                        3 A,C,G,B                      14      5    3
....B                        3 A,C,E,B                      14      5    3
....C                        3 A,D,F,C                       6      2    1
....C                        3 A,B,A,C                       8      3    2
....C                        3 A,D,E,C                      10      4    3
....C                        3 A,C,E,C                      10      4    3 *
....C                        3 A,C,G,C                      12      6    5 *
....C                        3 A,D,G,C                      12      6    5
....C                        3 A,B,G,C                      12      6    5
....D                        3 A,D,F,D                       5      2    1 *
....D                        3 A,B,A,D                       7      3    2
....D                        3 A,D,E,D                      11      4    3 *
....D                        3 A,C,E,D                      11      4    3
....D                        3 A,D,G,D                      13      6    5 *
....D                        3 A,B,G,D                      13      6    5
....D                        3 A,C,G,D                      13      6    5
....H                        3 A,C,E,H                       8      1    1
....H                        3 A,D,E,H                       8      1    1
....H                        3 A,D,F,H                      10      3    3
....H                        3 A,B,G,H                      11      5    4
....H                        3 A,C,G,H                      11      5    4
....H                        3 A,D,G,H                      11      5    4
....I                        3 A,D,F,I                       7      1    1
....I                        3 A,D,G,I                      11      2    2
....I                        3 A,C,E,I                      11      2    2
....I                        3 A,D,E,I                      11      2    2
....I                        3 A,C,G,I                      11      2    2
....I                        3 A,B,G,I                      11      2    2
......A                      4 A,D,F,C,A                    10      4    1
......E                      4 A,D,F,C,E                     9      3    1
......E                      4 A,D,E,H,E                     9      3    1 *
......E                      4 A,C,E,H,E                     9      3    1 *
......E                      4 A,D,F,I,E                    11      7    4
......F                      4 A,D,F,C,F                     8      4    1 *
......F                      4 A,D,F,I,F                    10      5    2 *
......F                      4 A,D,E,H,F                    14      6    3
......F                      4 A,C,E,H,F                    14      6    3
......G                      4 A,D,F,C,G                    10      4    1
......G                      4 A,D,F,I,G                    10      4    1
......G                      4 A,C,E,H,G                    11      6    3
......G                      4 A,D,E,H,G                    11      6    3
......J                      4 A,D,E,H,J                    11      1    1
......J                      4 A,D,F,I,J                    11      1    1
......J                      4 A,C,E,H,J                    11      1    1
........B                    5 A,D,F,C,A,B                  12      4    1
........B                    5 A,D,F,C,G,B                  16     10    2
........B                    5 A,D,F,I,G,B                  16     10    2
........B                    5 A,D,F,C,E,B                  16     10    2
........C                    5 A,D,F,C,E,C                  12      6    1 *
........C                    5 A,D,F,I,G,C                  14     10    2
........C                    5 A,D,F,C,A,C                  14     10    2 *
........C                    5 A,D,F,C,G,C                  14     10    2 *
........D                    5 A,D,F,C,E,D                  13      6    1 *
........D                    5 A,D,F,C,A,D                  13      6    1 *
........D                    5 A,D,F,C,G,D                  15     11    3 *
........D                    5 A,D,F,I,G,D                  15     11    3 *
........H                    5 A,D,F,C,E,H                  10      3    1
........H                    5 A,D,F,C,G,H                  13      8    2
........H                    5 A,D,F,I,G,H                  13      8    2
........H                    5 A,D,E,H,J,H                  14     10    4 *
........H                    5 A,D,F,I,J,H                  14     10    4
........H                    5 A,C,E,H,J,H                  14     10    4 *
........I                    5 A,D,F,I,G,I                  13      7    1 *
........I                    5 A,D,F,C,E,I                  13      7    1
........I                    5 A,D,F,C,G,I                  13      7    1
........I                    5 A,D,E,H,J,I                  15     10    4
........I                    5 A,C,E,H,J,I                  15     10    4
........I                    5 A,D,F,I,J,I                  15     10    4 *
..........A                  6 A,D,F,C,A,B,A                14      5    1 *
..........E                  6 A,D,F,C,E,H,E                11      7    1 *
..........E                  6 A,D,F,C,G,I,E                17      9    2
..........E                  6 A,D,F,C,E,I,E                17      9    2 *
..........E                  6 A,D,F,C,A,B,E                19     11    4
..........F                  6 A,D,F,C,A,B,F                16      8    1 *
..........F                  6 A,D,F,C,E,H,F                16      8    1 *
..........F                  6 A,D,F,C,E,I,F                16      8    1 *
..........F                  6 A,D,F,C,G,I,F                16      8    1 *
..........G                  6 A,D,F,C,E,H,G                13      8    1
..........G                  6 A,D,F,C,E,I,G                16      9    2
..........G                  6 A,D,F,C,G,I,G                16      9    2 *
..........G                  6 A,D,F,C,A,B,G                18     11    4
..........J                  6 A,D,F,C,E,H,J                13      4    1
..........J                  6 A,D,F,C,G,I,J                17      5    2
..........J                  6 A,D,F,C,E,I,J                17      5    2
............B                7 A,D,F,C,E,H,G,B              19     13    1
............C                7 A,D,F,C,E,H,G,C              17     13    1 *
............D                7 A,D,F,C,E,H,G,D              18     13    1 *
............H                7 A,D,F,C,E,H,J,H              16     13    1 *
............H                7 A,D,F,C,E,H,G,H              16     13    1 *
............I                7 A,D,F,C,E,H,G,I              16     13    1
............I                7 A,D,F,C,E,H,J,I              17     14    2
..............A              8 A,D,F,C,E,H,G,B,A            21      6    1
..............E              8 A,D,F,C,E,H,G,I,E            20     12    1 *
..............E              8 A,D,F,C,E,H,G,B,E            26     13    2 *
..............F              8 A,D,F,C,E,H,G,I,F            19     12    1 *
..............F              8 A,D,F,C,E,H,G,B,F            23     13    2 *
..............G              8 A,D,F,C,E,H,G,I,G            19     12    1 *
..............G              8 A,D,F,C,E,H,G,B,G            25     13    2 *
..............J              8 A,D,F,C,E,H,G,I,J            20      7    1
................B            9 A,D,F,C,E,H,G,B,A,B          23     14    1 *
................C            9 A,D,F,C,E,H,G,B,A,C          25     14    1 *
................D            9 A,D,F,C,E,H,G,B,A,D          24     14    1 *
................H            9 A,D,F,C,E,H,G,I,J,H          23     15    1 *
................I            9 A,D,F,C,E,H,G,I,J,I          24     15    1 *

124 rows selected.

We can make a number of observations from this output:

  • There are 124 records, which is quite an increase on the number for the directed case (27)
  • Looking at the three level two routes to F, via D, C and B respectively, A,D,F is cheaper than the other two, and so in the level 3 records, we see only that sub-route to F and not the other two
  • A number of the routes end in a loop, and none of these is passed on to the next level
  • If we look at the seven level 3 routes to B, we see that the cheapest is A,B,A,B. This is marked as a cycle because of the second B but was included because the second A did not count as a cycle for the reason given earlier. As this route is the only one ranked 1 at this level to B it causes the elimination of the other six routes, and is itself eliminated for being a loop; this is good because it is obvious that none of them can be part of an optimal higher level route
  • We might consider a change in structure to get the source node to count as a loop if it is visited. This can be achieved by anchoring the recursion from a branch that selects the source node from dual. However, when I tried this (not displayed but in the attachment) I found that the number of intermediate solutions actually increased to 128, probably for reasons related to the previous point
  • We can see that all of the final solution routes had been obtained by level 4, at 64 records processed, whereas the recursion continues to level 9, at 124 records processed. We might ask whether there is some way of recognising this and terminating the recursion earlier. The answer is that there is not, because it is quite possible that a very cheap route could be composed of a large number of short links - it just happens that our data set does not contain such a route
  • A final question that we might ask is how efficient has the query been in relation to the total number of possible routes. We need to again run the query modified to traverse all non-looping routes (noting that Oracle includes loops in the ouptut, but just doesn't progress them). When I did this I got 19281 rows (not displayed but included in the attachment). This means the solution algorithm has only traversed 0.6% of the possible routes - a big improvement on the directional case

Source Changed to J

Solution - one-way from J
There are no available routes in this case.

Solution - two-way from J

NODE                       LEV PATH                       COST LP
------------------------- ---- ------------------------- ----- --
H                            1 J,H                           3
..E                          2 J,H,E                         4
....B                        3 J,H,E,B                      11
....C                        3 J,H,E,C                       7
......A                      4 J,H,E,C,A                    11
....D                        3 J,H,E,D                       8
......A                      4 J,H,E,D,A                    11
..G                          2 J,H,G                         6
..J                          2 J,H,J                         6
I                            1 J,I                           4
..F                          2 J,I,F                         7
....B                        3 J,I,F,B                      11
....D                        3 J,I,F,D                       8
......A                      4 J,I,F,D,A                    11

14 rows selected.

As expected the three optimal routes from A to J when sourcing from A are returned in reverse order when sourcing from J.

Execution Plan
Here is the execution plan obtained for the undirected solution query, showing the 124 records returned by the recursion reducing to 16 in the final solution.

-------------------------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                                  | Name    | Starts | E-Rows | A-Rows |   A-Time   | Buffers |  OMem |  1Mem | Used-Mem |
-------------------------------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                           |         |      1 |        |     16 |00:00:00.01 |      58 |       |       |          |
|   1 |  SORT ORDER BY                             |         |      1 |     20 |     16 |00:00:00.01 |      58 |  2048 |  2048 | 2048  (0)|
|*  2 |   VIEW                                     |         |      1 |     20 |     16 |00:00:00.01 |      58 |       |       |          |
|*  3 |    WINDOW SORT PUSHED RANK                 |         |      1 |     20 |     16 |00:00:00.01 |      58 |  6144 |  6144 | 6144  (0)|
|*  4 |     VIEW                                   |         |      1 |     20 |     58 |00:00:00.01 |      58 |       |       |          |
|   5 |      UNION ALL (RECURSIVE WITH) DEPTH FIRST|         |      1 |        |    124 |00:00:00.01 |      58 | 13312 | 13312 |12288  (0)|
|   6 |       TABLE ACCESS BY INDEX ROWID BATCHED  | ARCS    |      1 |      4 |      3 |00:00:00.01 |       2 |       |       |          |
|*  7 |        INDEX RANGE SCAN                    | ARCS_PK |      1 |      4 |      3 |00:00:00.01 |       1 |       |       |          |
|   8 |       WINDOW SORT                          |         |      8 |     16 |    121 |00:00:00.01 |      56 |  4096 |  4096 | 4096  (0)|
|*  9 |        HASH JOIN                           |         |      8 |     16 |    121 |00:00:00.01 |      56 |  1753K|  1753K| 1185K (0)|
|  10 |         TABLE ACCESS FULL                  | ARCS    |      8 |     40 |    320 |00:00:00.01 |      56 |       |       |          |
|  11 |         RECURSIVE WITH PUMP                |         |      8 |        |     31 |00:00:00.01 |       0 |       |       |          |
-------------------------------------------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - filter("RNK_T"=1)
   3 - filter(RANK() OVER ( PARTITION BY "NODE" ORDER BY "COST")<=1)
   4 - filter("RNK"=1)
   7 - access("A"."SRC"=:SRC)
   9 - access("A"."SRC"="P"."NODE")

Oracle version:

Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

Dijkstra






Unix Snippets for Handling Duplicate Keys in Delimited Input Files

Recently I had a problem where input data files for an interface contained duplicate keys that caused the interface to fail. Sometimes the complete lines were duplicated, but in other cases only the key fields were duplicated with differing non-key attribute values. I wanted, firstly, to report on the problem lines, and, secondly, to clean up the files as far as possible. For lines that are fully duplicated, it's easy enough to deduplicate, and the following command does that, producing a sorted file with unique lines:

sort -u input.dat > output.dat

The unix uniq comand leaves the lines in a file in the original order, but only deduplicates adjacent sets of lines.

It's more difficult when keys are duplicated but non-key fields differ and we do not know which line to retain. In this case, we wanted to just delete those lines and report them to the source system for correction.

I wrote some snippets of unix code to report on duplicate-key lines and clean up the files, using unix utilities such as sort, awk, grep. This article lists the code snippets with outputs for a test data file.

Update 22 December 2014 I added a section 'Using awk Hash Variables for Group Counting'.

Test Scenarios
The first test data file has two leading key fields, followed by four attribute fields, with pipe delimiters. There is one pair of complete duplicates, a set of three lines having the same key but varying attributes, and two unique lines. Because we will be using grep for pattern matching, an obvious potential bug would be to match strings that are not in the first two positions, so I have included one of the duplicate key pairs as fields 4 and 5 to trap that if it occurs.

test_dups_in_1_2.dat with the 2 leading fields key

k91|k92|a1|k41|k42|a
k11|k12|a1|k41|k42|b
k41|k42|a4x|k41|k42|c
k21|k22|a2|k41|k42|d
k41|k42|a4|k41|k42|c
k41|k42|a4|k41|k42|c
k11|k12|a1|k41|k42|b

Here are the functions applied to the initial test set:

  • List the distinct keys that have duplicates
  • List all lines for duplicate keys
  • Strip all lines with duplicate keys from the file, returning unsorted lines
  • Strip the inconsistent duplicates from the file, returning unique sorted lines

The solutions rely on sorting the lines, taking advantage of the fact that the key fields are leading. If the key fields are not leading a little more work is required, and I repeated the fourth function for this case, after swapping fields 2 and 3, so that then key fields are 1 and 3.

  • Strip the inconsistent duplicates from the file, returning unique sorted lines - key fields not leading

List the distinct keys that have duplicates
Unix Code

sort $INFILE1_2 | awk -F"|" ' $1$2 == last_key && !same_key {print $1"|"$2; same_key=1} $1$2 != last_key {same_key=0; last_key=$1$2}'

Output

k11|k12
k41|k42

List all lines for duplicate keys
Unix Code

sort $INFILE1_2 | awk -F"|" ' 
$1$2 == last_key && !same_key {print last_line; same_key=1} 
$1$2 == last_key {print $0; same_key=1} 
$1$2 != last_key {same_key=0; last_key=$1$2; last_line=$0}'

Output

k11|k12|a1|k41|k42|b
k11|k12|a1|k41|k42|b
k41|k42|a4|k41|k42|c
k41|k42|a4|k41|k42|c
k41|k42|a4x|k41|k42|c

I think this should work for any number of key fields as long as they are all at the start, if you replace $1$2 by the relevant field positions. If the key fields are not all at the start then you have to pre/post-process as I show later.

Strip all lines with duplicate keys from the file, returning unsorted lines
This code creates a copy of the input file with the lines for the duplicate keys stripped out, using the previous awk code to generate a list that we then loop over doing a "grep -v" on the copied file.

Unix Code

dup_list=`sort $INFILE1_2 | awk -F"|" '
$1$2 == last_key && !same_key {print $1"|"$2; same_key=1}
$1$2 != last_key {same_key=0; last_key=$1$2}'`
cp $INFILE1_2 $OUTFILE1_2; for i in $dup_list; do grep -v ^$i $OUTFILE1_2 > $WRKFILE1; mv $WRKFILE1 $OUTFILE1_2; done
cat $OUTFILE1_2

Output

k91|k92|a1|k41|k42|a
k21|k22|a2|k41|k42|d

Strip the inconsistent duplicates from the file, returning unique sorted lines
Here is a variation on the above, where we keep one line for duplicates where all the attributes are also duplicated, but drop the duplicates where the attributes vary and so we cannot clean them. We do this by apply the "-u" flag to the initial sort, and using that output also as the basis for the stripping part.

Unix Code

dup_list=`sort -u $INFILE1_2 | awk -F"|" '
$1$2 == last_key && !same_key {print $1"|"$2; same_key=1}
$1$2 != last_key {same_key=0; last_key=$1$2}'`
sort -u $INFILE1_2 > $OUTFILE1_2; for i in $dup_list; do grep -v ^$i $OUTFILE1_2 > $WRKFILE1; mv $WRKFILE1 $OUTFILE1_2; done
cat $OUTFILE1_2

Output

k11|k12|a1|k41|k42|b
k21|k22|a2|k41|k42|d
k91|k92|a1|k41|k42|a

Test Scenario with Non-leading Key Fields
A simple awk command creates a a copy of the original test data file, but with fields 2 and 3 swapped.

Unix Code

awk -F"|" '{print $1"|"$3"|"$2"|"$4"|"$5"|"$6}' $INFILE1_2 > $INFILE1_3

test_dups_in_1_3.dat with fields 1 and 3 key

k91|a1|k92|k41|k42|a
k11|a1|k12|k41|k42|b
k41|a4x|k42|k41|k42|c
k21|a2|k22|k41|k42|d
k41|a4|k42|k41|k42|c
k41|a4|k42|k41|k42|c
k11|a1|k12|k41|k42|b

Strip the inconsistent duplicates from the file, returning unique sorted lines - key fields not leading
This variation caters for non-leading key fields by first swapping the fields so that the key fields now lead, applying similar processing to the previous case, then swapping the fields back.

Unix Code

awk -F"|" ' {print $1"|"$3"|"$2"|"$4"|"$5"|"$6}' $INFILE1_3 | sort -u > $WRKFILE1
dup_list=`awk -F"|" ' $1$2 == last_key && !same_key {print $1"|"$2; same_key=1} $1$2 != last_key {same_key=0; last_key=$1$2}' $WRKFILE1`
for i in $dup_list; do grep -v ^$i $WRKFILE1 > $WRKFILE2; mv $WRKFILE2 $WRKFILE1; done
awk -F"|" '  {print $1"|"$3"|"$2"|"$4"|"$5"|"$6}' $WRKFILE1 > $OUTFILE1_3

Output

k11|a1|k12|k41|k42|b
k21|a2|k22|k41|k42|d
k91|a1|k92|k41|k42|a

Test script and output file attached.

Unix Snippets for Duplicate Keys

Using awk Hash Variables for Group Counting
Here is a script that counts the number of instances of each key, and also the number of distinct lines within each key. Two hash arrays are used to do the counting within awk; in the expected use case the input file may be quite large but the number of duplicated keys, which is the array cardinality, should be small. The script goes on to reconcile the number of lines in the cleaned output file with the input file and the counts in the duplicates file.

I added some extra lines to the input file and pass the file name as a parameter to the script.

if [ $# != 1 ] ; then
	echo Usage: $0 [Data file]
	exit 1
fi
echo Running $0 $1...
INFILE=$1
OUTFILE_DPK=$INFILE.dpk # duplicate keys with: number of lines; number of distinct lines
OUTFILE_CLN=$INFILE.cln # cleaned file - inconsistent duplicate keys removed, and rest unique

WRKFILE=/tmp/temp1.txt

# List the distinct keys that have duplicates with: number of lines; number of distinct lines

sort $INFILE | awk -F"|" '
$1$2 == last_key {num[$1"|"$2]++; if (last_line != $0) diff[$1"|"$2]++} 
$1$2 != last_key {last_key=$1$2}
{last_line=$0}
END {for (key in num) print key, ++num[key], ++diff[key]}' > $OUTFILE_DPK

# Strip the inconsistent duplicates from the file, returning sorted lines

sort -u $INFILE > $OUTFILE_CLN
dup_list=$(awk -F"|" '
$1$2 == last_key && !same_key {print $1"|"$2; same_key=1} 
$1$2 != last_key {same_key=0; last_key=$1$2}' $OUTFILE_CLN)
for i in $dup_list; do grep -v ^$i $OUTFILE_CLN > $WRKFILE; mv $WRKFILE $OUTFILE_CLN; done

function line_print {
	echo '***' # 's needed else * translated
	echo $1
}
function line_count {
	line_print "$1" # "s needed else first word only passed
	wc -l $2
	retval=$(wc -l $2|cut -d" " -f1)
}

line_print 'Line counts...'

line_count "Input data file..." $INFILE; n_inp=$retval
line_count "List of duplicate keys..." $OUTFILE_DPK; n_dup=$retval
line_count "Cleaned data file, i.e. unique records, and inconsistent duplicates removed..." $OUTFILE_CLN; n_cln=$retval

# awk sums the second column of duplicate keys file to get total lines associated
n_dup_lines=$(awk '{sum += $2} END {print sum}' $OUTFILE_DPK)

# grep counts the number of keys that have 1 as last character preceded by space, being the number of keys with only 1 distinct line
n_dup_keys_cons=$(grep -c " 1$" $OUTFILE_DPK)

line_print 'Input file...'
cat $INFILE

line_print 'Duplicated keys with number of lines and number of distinct lines within key...'
cat $OUTFILE_DPK

line_print 'Cleaned file...'
cat $OUTFILE_CLN

line_print 'Reconciliation...'

echo Number of lines in cleaned file, which is $n_cln, should equal the following computed value...
echo "(Input lines - duplicate key lines + consistent duplicate keys) = " $n_inp - $n_dup_lines + $n_dup_keys_cons = $((n_inp-n_dup_lines+n_dup_keys_cons))

Output from the script

Running ./Dup_Keys.ksh test_dups_in_1_2.dat...
***
Line counts...
***
Lines in input data file...
15 test_dups_in_1_2.dat
***
Lines in duplicate keys file...
3 test_dups_in_1_2.dat.dpk
***
Lines in cleaned data file (unique records, and inconsistent duplicates removed)...
4 test_dups_in_1_2.dat.cln
***
Input file...
k91|k92|a1|k41|k42|a
k11|k12|a1|k41|k42|b
k41|k42|a4x|k41|k42|c
k21|k22|a2|k41|k42|d
k41|k42|a4|k41|k42|c
k41|k42|a4|k41|k42|c
k41|k42|a4|k41|k42|c
k41|k42|a4|k41|k42|c
k41|k42|a4|k41|k42|c
k41|k42|a4|k41|k42|z
k41|k42|a4|k41|k42|c
k51|k52|a4|k41|k42|e
k51|k52|a4|k41|k42|e
k51|k52|a4|k41|k42|e
k11|k12|a1|k41|k42|b
***
Duplicated keys with number of lines and number of distinct lines within key...
k11|k12 2 1
k51|k52 3 1
k41|k42 8 3
***
Cleaned file...
k11|k12|a1|k41|k42|b
k21|k22|a2|k41|k42|d
k51|k52|a4|k41|k42|e
k91|k92|a1|k41|k42|a
***
Reconciliation...
Number of lines in cleaned file, which is 4, should equal the following computed value...
(Input lines - duplicate key lines + consistent duplicate keys) =  15 - 13 + 2 = 4






A Generic Unix Script for Uploading eBusiness Concurrent Programs

I have posted a couple of articles recently on XML Publisher report development within Oracle eBusiness applications (A Design Pattern for Oracle eBusiness Audit Trail Reports with XML Publisher and Design Patterns for Database Reports with XML Publisher and Email Bursting). These reports are of one of several types of batch program, or concurrent program that can be defined within Oracle eBusiness.

Oracle eBusiness uses a number of metadata tables to store information on the programs, and in release 11.5 Oracle introduced a Unix utility called FNDLOAD to download the metadata to formatted text files to allow them to be uploaded via the same utility into downstream environments. At that time batch reports were generally developed in the Oracle Reports tool and typically there might only be two text files (known as LDT files after their extension), for the program and for associated value sets, and maybe one for request groups (which control access to the reports). The executable report file, the RDF, would just be copied to the target environment server directory. I wrote a set of wrapper scripts for the utility to streamline its use and to deal with a number of issues, including handling of audit fields, with a structure consisting of a separate pair of scripts for download and upload of each type of LDT file. I published these on Scribd in July 2009.

In working more recently with Oracle's successor reporting tool, XML Publisher, I found that the number of objects involved in installation has increased substantially. As well as the LDT files there are also now XML configuration files and RTF (usually) templates, uploaded via a Java utility, XDOLoader. Installation also involves at least one PL/SQL package. For example the email version of my model reports (see the second link above) had 11 configuration files. For this reason, I decided to create a single script that would copy, upload and install all objects required for a concurrent program of any type, and I describe the script in this article.

Here is my original Scribd article, describing the issues mentioned, and with the original individual upload and download scripts.

Loading...

The new script is here XX_Install_XMLCP_ksh, and here is the MD120 from the model article that uses it.

Loading...

Directory Structure

The script operates on an input TAR file containing all the necessary files. The TAR file is called prog.tar after the program short name prog, and contains a directory also called prog with all the installation files. The installer uses relative paths and assumes that the TAR file, with the installer, is placed in a directory below the custom top directory, say $XX_TOP/rel. All loader files are copied to $XX_TOP/import and SQL files to $XX_TOP/install/sql.

After installation, a new directory will remain with all the installation files for reference, $XX_TOP/rel/prog.

Program Structure

The internal call structure of the Unix script is shown below.
Install CP - CSD

The script operates on an input TAR file containing all the necessary files.

After extracting the TAR file, the script has local subroutines that can be divided into four categories, as above:

  1. Preliminaries - parameter processing, file moving and validation
  2. FNDLOAD uploads - uploading the LDT files
  3. XDOLoader uploads - uploading the data and any bursting XML files, and all layout templates present
  4. SQL installations - installing any SQL script present, and the package spec and body files

The following table gives a few notes on the main program and preliminary subroutines.
Preliminaries Summary
Prelims Table
The following table gives a few notes on the upload and SQL subroutines.
Upload and SQL Summary
Install Uploads Table
The upload subroutines all have SQL queries for verification, and here is a sample log file from the script: XX_ERPXMLCP_EM_log

The remainder of the article lists the queries with diagrams and examples of output.

Upload Subroutines

upload_ag

Validation Query

SELECT app_g.application_short_name "App G", fag.group_name "Group",
      fag.description "Description",
      app_t.application_short_name "App T", ftb.table_name "Table",
      fcl.column_name "Column"
  FROM fnd_audit_groups fag
  JOIN fnd_application app_g
    ON app_g.application_id = fag.application_id
  JOIN fnd_audit_tables fat
    ON fat.audit_group_app_id = fag.application_id
   AND fat.audit_group_id = fag.audit_group_id
  JOIN fnd_application app_t
    ON app_t.application_id = fat.table_app_id
  JOIN fnd_tables ftb
    ON ftb.application_id = fat.table_app_id
   AND ftb.table_id = fat.table_id
  JOIN fnd_audit_columns fac
    ON fac.table_app_id = fat.table_app_id
   AND fac.table_id = fat.table_id
  JOIN fnd_columns fcl
    ON fcl.application_id = fac.table_app_id
   AND fcl.table_id = fac.table_id
   AND fcl.column_id = fac.column_id
 WHERE fag.last_update_date     = To_Date ('$sysdate', 'YYYY/MM/DD')
   AND fac.schema_id            = 900
ORDER BY app_g.application_short_name, fag.group_name, 
         app_t.application_short_name, ftb.table_name,
         fcl.column_name;

QSD

Install CP - AG - 1

Example Output
No example available here, but the headings are:
"App G", "Group", "Description", "App T", "Table", "Column"

upload_ms

Validation Query

SELECT mes.message_name "Name", mes.message_text "Text"
  FROM fnd_new_messages mes
 WHERE mes.last_update_date     = To_Date ('$sysdate', 'YYYY/MM/DD')
 ORDER BY 1;

QSD

Install CP - Message

Example Output

Name                     Text
--------------------- ---------------------------------------------
XX_ERPXMLCP_EM_NONXML Non-XML Concurrent Program &PROGAPP

upload_vs

Validation Query

SELECT fvs.flex_value_set_name "Value Set", Count(fvl.flex_value_set_id) "Values"
  FROM fnd_flex_value_sets fvs, fnd_flex_values fvl
 WHERE fvs.last_update_date     = To_Date ('$sysdate', 'YYYY/MM/DD')
   AND fvl.flex_value_set_id(+) = fvs.flex_value_set_id
 GROUP BY fvs.flex_value_set_name;

QSD

Install CP - VS

Example Output

Value Set             Values
--------------------- ------
XX_PROGS                   0
XX_APPNAME_ID              0

upload_cp

Validation Query

SELECT prg.user_concurrent_program_name || ': ' || prg.concurrent_program_name "Program", fcu.column_seq_num || ': ' || fcu.end_user_column_name "Parameter"
  FROM fnd_concurrent_programs_vl               prg
  LEFT JOIN fnd_descr_flex_column_usages      fcu
    ON fcu.descriptive_flexfield_name         = '\$SRS\$.' || prg.concurrent_program_name
   AND fcu.descriptive_flex_context_code      = 'Global Data Elements'
 WHERE prg.concurrent_program_name              = '$cp_name'
 ORDER BY 1, 2;

QSD

Install CP - CP

Example Output

Program                                    Parameter
------------------------------------------ ------------------------
XX Example XML CP (Email): XX_ERPXMLCP_EM  100: Cc Email
                                           10: Application
                                           20: From Program
                                           30: To Program
                                           40: From Date
                                           50: To Date
                                           60: From Parameter Count
                                           70: To Parameter Count
                                           80: Override Email
                                           90: From Email

upload_rga

Validation Query

SELECT rgp.request_group_name "Request Group",
       app.application_short_name "App"
  FROM fnd_concurrent_programs          cpr
  JOIN fnd_request_group_units          rgu
    ON rgu.unit_application_id          = cpr.application_id
   AND rgu.request_unit_id              = cpr.concurrent_program_id
  JOIN fnd_request_groups               rgp
    ON rgp.application_id               = rgu.application_id
   AND rgp.request_group_id             = rgu.request_group_id
  JOIN fnd_application                  app
    ON app.application_id               = rgp.application_id
 WHERE cpr.concurrent_program_name      = '$cp_name'
 ORDER BY 1;

QSD

Install CP - RGA

Example Output

Request Group                  App
------------------------------ ----------
System Administrator Reports   FND

upload_dd

Validation Query

SELECT xdd.data_source_code "Code", xtm.default_language "Lang", xtm.default_territory "Terr"
  FROM xdo_ds_definitions_b xdd
  LEFT JOIN xdo_templates_b xtm
    ON xtm.application_short_name       = xdd.application_short_name
   AND xtm.data_source_code             = xdd.data_source_code
 WHERE xdd.data_source_code             = '$cp_name'
 ORDER BY 1, 2, 3;

QSD

Install CP - DD

Example Output

Code                 Lang Terr
-------------------- ---- ----
XX_ERPXMLCP_EM       en   US

upload_all_temps

Validation Query

SELECT xdd.data_source_code "Code", 
        xlb_d.file_name "Data Template",
        xlb_b.file_name "Bursting File",
        xtm.template_code "Template",
        xlb.language "Lang", 
        xlb.territory "Terr",
        xlb.file_name || 
               CASE
               WHEN xlb.language = xtm.default_language AND
                    xlb.territory = xtm.default_territory
               THEN '*' END "File"
  FROM xdo_ds_definitions_b             xdd
  LEFT JOIN xdo_lobs                    xlb_d
    ON xlb_d.application_short_name     = xdd.application_short_name
   AND xlb_d.lob_code                   = xdd.data_source_code
   AND xlb_d.lob_type                   = 'DATA_TEMPLATE'
  LEFT JOIN xdo_lobs                    xlb_b
    ON xlb_b.application_short_name     = xdd.application_short_name
   AND xlb_b.lob_code                   = xdd.data_source_code
   AND xlb_b.lob_type                   = 'BURSTING_FILE'
  LEFT JOIN xdo_templates_b             xtm
    ON xtm.application_short_name       = xdd.application_short_name
   AND xtm.data_source_code             = xdd.data_source_code
  LEFT JOIN xdo_lobs                    xlb
    ON xlb.application_short_name       = xtm.application_short_name
   AND xlb.lob_code                     = xtm.template_code
   AND xlb.lob_type                     LIKE 'TEMPLATE%'
 WHERE xdd.data_source_code             = '$cp_name'
   AND xdd.application_short_name       = '$app'
 ORDER BY 1, 2, 3, 4;

QSD

Install CP - Template

Example Output

Code            Data Template        Bursting File          Template             Lang Terr File
--------------- -------------------- ---------------------- -------------------- ---- ---- -------------------------
XX_ERPXMLCP_EM  XX_ERPXMLCP_EM.xml   XX_ERPXMLCP_EM_BUR.xml XX_ERPXMLCP_EM       en   US   XX_ERPXMLCP_EM.xsl*
                                                                                           XX_ERPXMLCP_EM.rtf*
                                                            XX_ERPXMLCP_EM_XML   en   US   XX_ERPXMLCP_EM_XML.xsl*
                                                                                           XX_ERPXMLCP_EM_XML.rtf*






Design Patterns for Database Reports with XML Publisher and Email Bursting

In a recent article, A Design Pattern for Oracle eBusiness Audit Trail Reports with XML Publisher, I presented a report that I developed within Oracle eBusiness 12.1, using Oracle XML Publisher. The report was for displaying audit trail data for a particular table, and I proposed that it could be used as a design pattern for audit trail reporting on any eBusiness table. The article focussed on the rather complex SQL, with associated layout structures, needed to render the audit data into a readable format.

In this article, I present a pair of XML Publisher reports intended to serve as design patterns for more general reporting. The reports were again developed within the framework of Oracle's eBusiness embedded version of XML Publisher, of which there is also a stand-alone version,
Oracle Business Intelligence Publisher, which describes the product (rather ungrammatically) thus:

Oracle BI Publisher is the reporting solution to author, manage, and deliver all your reports and documents easier and faster than traditional reporting tools.

Reports Overview

The reports were developed specifically to serve as models for other reports, from which program constructs could be copied and pasted. For this reason I considered taking for the data sources universally available Oracle metadata such as all_tables or all_objects etc., but found problems with that idea, including:

  • They are not generally ordinary tables, and tend to produce very complex execution plans
  • The possible group structures I found were not quite general enough for my purposes

On the other hand, within Oracle eBusiness I had a number of queries available against the (FND application) metadata tables for concurrent programs that seemed to fit the purpose pretty well, and so decided to use these. As a compromise I created views on the tables with generic column names, so that the reports could be ported to other data sources relatively easily.

Concurrent Programs Data Model
In Oracle eBusiness applications concurrent (i.e. batch) programs have a logical metadata record for the program itself, and (potentially) a set of records for each of the following associated entities:

  • Parameter
  • Request group
  • XML layout template

All of these can have zero records, and for the third entity, only programs of specific type can have any records defined, a structure providing a reasonable degree of generality.

Email Bursting
Business application reports are often used to generate documents for sending to customers, suppliers etc., and increasingly companies prefer to email these out to save costs compared with mailing printed documents. In the past report developers had to code the emailing functionality themselves, usually by means of a co-ordinating program that would loop over the master records and call the reporting tool individually for each one, creating an attachment file that would then be emailed, perhaps by the Unix mailx program. As well as the development effort involved, this approach had the drawback that it scales badly as the number of emails rises owing to the individual calls to the reporting tool (such as Oracle Reports). A printed report will frequently create 10,000 records in little more time than for 1,000 records, whereas for the hand-coded emailing process it would likely take 10 times longer.

The bursting functionality in Oracle XML Publisher solves these problems by allowing the emailing processing to be specified by an XML configuration file, and by creating the files to be emailed in batch just as with printed reports. The data files are created initially in XML format from the data model, and are then merged with layout templates that are emailed by a second program.

The design pattern reports will consist of an email bursting version with a printed version, which would generally be required as a fallback for records with missing or invalid email addresses. We'll address the obvious security issue with automated emailing programs as part of our design pattern below.

Report Outputs

Examples of complete report outputs for the printed report in .pdf format are included in the attached zip file. Here three pages are given, two showing the listing for the example report programs themselves, and a third showing a non-XML program.

Example Report - XX Example XML CP
This is page 8 of the printed report run with the only the first parameter set, the application.

  • Only the parameters that were actually set are listed after the title
  • The templates region appears because it is an XML report
  • There is only one template for this printed report, with XSL conditionality to include or exclude regions or columns

XX_ERPXMLCP

Example Report - XX Example XML CP (Email)
This is page 9 of the printed report run with the only the first parameter set, the application.

  • Notice that the bursting file column appears because this report has the file attached, using XSL conditionality
  • This email version has two layout templates that are used conditionally for each record depending on whether it's of XML type or not
  • This record-level choice of template is implemented in the bursting XML file, and is not available in this way for the printed version

XX_ERPXMLCP_EM

Advanced Pricing Report - QP: Java Pricing Engine Warm Up
This is page 44 of the printed report run for the Advanced Pricing application.

  • It shows a non-XML program, and the templates region consequently does not appear
  • Notice that only the summary line appears for the parameters as there are no parameters defined for the program.

QPXJCCWU-2

XML Data Templates and XML Generators

XML Publisher reports require at least one layout template in one of several formats, and also require an executable program to generate the XML data file to merge with the template(s). Oracle supplies a Java executable to generate the data file from an XML data template containing the SQL queries, group structure etc. that the programmer attaches to the concurrent program. This is usually the best approach since it mimimizes the amount of programming required.

It is also possible to use Oracle Reports to generate XML. This can be a reasonable approach for converting legacy reports to XML Publisher to avail of some of the additional features, such as Excel output and email bursting. However, if the data model needs changing it is probably best to extract the SQL and create an XML data template from it.

It's a really bad idea to write a PL/SQL program to generate the XML data file, being a serious case of 'reinventing the wheel' - use Oracle's Java executable with XML data template instead!

Data Model: Groups, Queries, Parameters, Summaries

As described above, the example report has one master data group and three detail groups. As discussed in my last article Query Query Query, the minimum number of queries required for a group structure hierarchy is the number of groups minus the number of parent groups, which equals three here. The group structure with detail queries linked by bind variables could be depicted as below.

Group Structure Diagram
XML Publisher Model - Groups

A possible query structure for the three queries might then look like the following, where I have included summaries for two of the detail groups, and allowed for report constraints via lexical parameters, to be discussed later.

Query Structure Diagram
XML Publisher Model - Queries

Query Links and Bind Variables
It is possible to link detail queries to their master by XML query links, but according to the manual Oracle® XML Publisher Administration and Developer's Guide, Release 12:

XML Publisher tests have shown that using bind variables is more efficient than using the link tag.

Linking a detail query to its master by bind variables involves simply referencing the master variable link columns within the detail query preceded by a colon.

Constraints and Parameters
Reports often have constraints depending on input parameters, which may be mandatory or optional. Input parameters are defined in a parameters section within the data template.

Mandatory parameters can be referenced directly as bind variables within the queries (i.e. by preceding the parameter name with a colon).

Optional parameters should normally be referenced indirectly using additional lexical parameters. This allows the exact query required to be executed rather than a composite query with Nvls to represent all possible query combinations. The latter all-purpose queries tend to be more complex and to perform poorly. Lexical parameters are declared and processed in the associated database package, and referenced by preceding them with an ampersand (&).

Note that, confusingly, these lexical parameters are not the same as the lexical tags applicable only within eBusiness that refer to eBusiness flexfields. Like the corresponding user-exits in eBusiness Oracle Reports the lexical tags allow flexfields to be included without their structure being known to the report developer. This is necessary for the standard eBusiness reports but developers of custom reports normally know the structures, and so can avoid these tags altogether (at least for new reports).

Summaries
There are various ways of computing summaries in XML Publisher reports:

  • Within the SQL
  • within the XML group elements
  • within the layout template

SQL Summaries
Often the best way to do the summaries is in the SQL itself. This makes testing simpler because the queries can be run and debugged in SQL Developer or Toad, and also facilitates production support where developers can often run queries in a read-only schema, but can't change the production code.

In the simple case of summarising detail groups that are defined against a main query, the summaries can be done using analytic functions partitioning by the master key for first level details, and as desired for any subsequent levels. In my example reports, Example Line One is summarised in this way; a subquery factor was used but this is optional here.

Groups defined against additional queries cannot be summarised quite so easily in the SQL. I have summarised the Example Line Two group by adding a subquery factor in the main query purely to do the summaries: Because the line detail is not present in the query we can't do this by analytic functions, so a grouping summary in a separate subquery is necessary.

XML Group Summaries
Where possible SQL summaries via analytic functions appears best, but in other cases we may wish to consider the non-SQL alternatives. One of these is to define the summaries within the appropriate group as elements in the XML template setting the value attribute to the element in the lower level group to be summarised, and setting the function attribute as desired within a limited set of functions. I have not implemented this method in my examples.

XSL Layout Summaries
A further non-SQL alternative for summaries is to define them within the layout template using the XSL language, and I have implemented the summaries of Example Line Three using this method.

Database Package and Report Triggers

Each XML Publisher has a default package specified in the XML template, that handles parameter processing and implements any triggers required.

Package Spec
The spec declares both input parameters and lexical parameters, as well as the procedures that implement the report triggers (usually three).

Triggers

Before Report

  • This trigger is used to process the lexical parameters, constructing the appropriate where condition depending on which optional parameters have values
  • The example packages show how ranges of character, date and number are processed. I have found it more convenient to pass dates as string parameters.

After Report

  • This trigger can be used to write column headings to the log file for fields that are logged in the group filter

Group Filter

  • This trigger can be used to filter out records depending on some condition, by returning FALSE.
  • I use it in the examples to log selected fields for each record returned.
  • This logging is particularly important for email bursting reports as it enables checking that emails to be sent externally are appropriate before sending in a second step.

Printed Example Report Details

Report Parameters
The report parameters were designed to illustrate the implementation of character, date and number ranges, with an equality join parameter that fits well with the report content, all optional:

  • Application - the eBusiness application id
  • Program name From and To parameters - character range
  • Creation date From and To parameters - date range
  • Number of parameters From and To parameters - number range

Where there is an associated email version it may be worth having an additional Yes/No parameter determining whether to include records that have an email address defined.

Layout Template
There is a single layout template, of .rtf format.

Layout Template Structure
XML Publisher Model - Layout

Layout Template File

Loading...

Notes on Layout

  • Body and Margins
    • The page numbers are in the bottom margin (or footer)
    • The title, parameters and header fields are above the body tag, and repeat on each page of a given header record
  • Conditional Blocks and Columns
    • XSL if-blocks are used to conditionally print blocks such as input parameters, or detail tables depending on data values
    • XSL if-blocks with column qualifiers are used to conditionally print table columns: If there is no bursting file, the entire bursting file column will not appear
  • Sections and Page Breaks
    • The XSL for-each field for the header group uses the section qualifier, which, in conjunction with the page break field, specifies a new page after each header record except the last
    • By default, the above section qualifier would specify that page numbers reset with each header record, but this is overriden here by the initial-page-number field in the footer
  • XSL Summary
    • As discussed in the data model section, the line three summary is implemented in XSL - by the XSL count field

Email Bursting Example Report

Email Address Parameters
In addition to the printed report constraint parameters, three email address parameters have been added.

  • Override email address - setting a value here overrides the record level email address and is useful for testing
  • From and CC email addresses are parameters, which can be defaulted, for flexibility
  • The email address data source is hard-coded in this demo report: normally it would be something like a supplier email address at master record level

Two Step Bursting Process
The first step is to run the concurrent program for the report, which results in an XML file containing the report data to be created on the server. In the second step, a standard concurrent program 'XML Publisher Report Bursting Program' is run, passing the request id of the earlier custom report, in order to merge the XML data file with the layout template(s) and send the individual reports by email.

It's sometimes recommended to trigger the running of the second program within the custom report itself, but it's probably better not to do this, in order to allow validation of the reports and email addresses before sending them out.

Email Report Logging
The example report logs the email address and other fields in the concurrent program log file, including whether an override email address was specified, where the user can check them before executing the second step that sends out the emails.

Layout Template
There are two layout templates, of .rtf format, which are used conditionally depending on the type of record. The structure of the one used for XML type programs (shown below) has conditional header fields and the third lines block that are absent from the other (not shown).

Layout Template Structure
XML Publisher Model - Layout EM

Layout Template File

Loading...

Notes on Layout

  • The master group is excluded from the template, although its fields are present in the header. The XML Publisher bursting program performs the looping over this group

Email Bursting XML File

<xapi:requestset xmlns:xapi="http://xmlns.oracle.com/oxp/xapi" type="bursting">
<xapi:request select="/XX_ERPXMLCP_EM/LIST_G_HDR/G_HDR">
<xapi:delivery>
<xapi:email server="127.0.0.1" port="25" from="${FROM_EMAIL}" reply-to ="">
<xapi:message id="123" to="${EMAIL_ADDRESS}" cc="${CC_EMAIL}" 
attachment="true" subject="${SUB}">Dear Sir/Madam

Pleae find attached your concurrent program details. 

[Alternatively, leave blank and use output_type=html in document to have attachment go to body instead]</xapi:message>
</xapi:email>
</xapi:delivery>
<xapi:document output="CP_${PROG_NAME}.pdf" output-type="pdf" delivery="123">
<xapi:template type="rtf" location="XDO://CUSTOM.XX_ERPXMLCP_EM.en.US/?getSource=true" filter="//G_HDR[OUTPUT_TYPE!='XML']"></xapi:template>
<xapi:template type="rtf" location="XDO://CUSTOM.XX_ERPXMLCP_EM_XML.en.US/?getSource=true" filter="//G_HDR[OUTPUT_TYPE='XML']"></xapi:template>
</xapi:document>
</xapi:request>
</xapi:requestset>

Notes on Bursting File

  • The email server is specified in the bursting XML configuration file, along with the email addresses to be used, which can be variables from the selected records or hard-coded
  • The layout template is specified, and more than one can be included, as here, with filter conditions depending on selected data fields
  • Here the output is specified to be sent as a .pdf attachment; changing to output type html results in the the output appearing as body text
  • It can be useful to store some or all of the subject (or body) text on the database; the table fnd_messages is used to store the subject here, as records from the fnd tables can be installed automatically via fndload

Code to Download

The zip file Brendan_Model_XML_Reports contains a root folder and three subfolders, as follows:

  • Root - MD120 installation document for the email version. It references a generic Unix script that installs all objects, see A Generic Unix Script for Uploading Oracle eBusiness Concurrent Programs
  • Output - examples of log files for both printed and email versions and pdf outputs for printed version
  • XX_ERPXMLCP - complete code and metadata for the printed version
  • XX_ERPXMLCP_EM - complete code and metadata for the email version (except requires some printed version objects to be installed first)






Query Query Query

In my last post, A Design Pattern for Oracle eBusiness Audit Trail Reports with XML Publisher, I described a database report module developed in Oracle's XML Publisher tool. Of the report structure I wrote:

It has a master entity with two independent detail entities, and therefore requires a minimum of two queries.

But why does such a structure require two queries? And can we determine the minimum number of queries for reports in general? To start with, let's define a report in this context as being a hierarchy of record groups, where:

  • a record group is a set of records having the same columns with (possibly) differing values
  • each group is linked to a single record in its (single) parent group by values in the parent record, except the top level (or root) group

For example, in the earlier post the root group is a set of bank accounts, with the two detail (or child) groups being the set of owners of the bank account and the set of audit records for the bank account parent record. Corresponding to this group structure, each bank account record is the root of the data hierarchies, comprising two sets of records below the bank account record, one for the owners and one for the audit records linked to the root record by the bank account id.

A (relational) query always returns a flat record set, and it's this fact that determines the minimum number of queries required for a given group structure. A master-detail group structure can be flattened in the query by simply copying master fields on to the child record sets. The set cardinality is then the cardinality of the child set. The report designer uses their chosen reporting tool to specify display of the queried data in either flat, or in master-detail format.

In fact this approach works for any number of child levels, with the query cardinality being the number of bottom level descendants (using null records for potential parents that are in fact childless). It's clear though that the approach will not work for any second child at the same level because there would be two cardinalities and no meaningful single record for both child groups could be constructed within a flat query.

This reasoning leads to the conclusion that the minimum number of queries required in general is equal to the number of groups minus the number of parent groups.

Query Query Query - example

In the earlier post I also stated:

This minimum number of queries is usually the best choice...

There are two main reasons for this:

  • each child query fires for every record returned by its parent, with associated performance impact
  • maintenance tends to be more difficult with extra queries; this is much worse when the individual groups, which should almost always be implemented by a maximum of one query each, are split, and then need to be joined back together procedurally

On thinking about this, it occurred to me that if the group structure were defined in a metadata table we might be able to return minimum query structures using an SQL query. Just one, obviously :) . To save effort we could use Oracle's handy HR demo schema with the employee hierarchy representing groups.

The remainder of this article describes the query I came up with. As it's about hierarchies, recursion is the technique to use, and this is one of those cases where Oracle's old tree-walk syntax is too limited, so I am using the Oracle 11.2 recursive subquery factoring feature.

The query isn't going to be of practical value for report group structures since these are always quite small in size, but I expect there are different applications where this kind of Primogeniture Recursion would be useful.

Query Groups Query - Primogeniture Recursion

Query Structure Diagram
Query Query Query

SQL

WITH rsf (last_name, employee_id, lev, part_id, manager_id) AS (
SELECT last_name, employee_id, 0, employee_id, To_Number(NULL)
  FROM employees
 WHERE manager_id IS NULL
UNION ALL
SELECT e.last_name, e.employee_id, r.lev + 1, 
       CASE WHEN Row_Number() OVER (PARTITION BY r.employee_id ORDER BY e.last_name) = 1 THEN r.part_id ELSE e.employee_id END,
       e.manager_id
  FROM rsf r
  JOIN employees e
    ON e.manager_id = r.employee_id
)
SELECT part_id, LPad ('.', lev) || last_name last_name, employee_id, 
       Count(DISTINCT part_id) OVER () "#Partitions",
       Count(DISTINCT manager_id) OVER () "+ #Parents",
       Count(*) OVER () "= #Records"
  FROM rsf
 ORDER BY part_id, lev, last_name

Query Output

   PART_ID LAST_NAME            EMPLOYEE_ID #Partitions + #Parents = #Records
---------- -------------------- ----------- ----------- ---------- ----------
       100 King                         100          89         18        107
           .Cambrault                   148          89         18        107
            .Bates                      172          89         18        107
       101 .Kochhar                     101          89         18        107
            .Baer                       204          89         18        107
       102 .De Haan                     102          89         18        107
            .Hunold                     103          89         18        107
             .Austin                    105          89         18        107
       104   .Ernst                     104          89         18        107
       106   .Pataballa                 106          89         18        107
       107   .Lorentz                   107          89         18        107
       108  .Greenberg                  108          89         18        107
             .Chen                      110          89         18        107
       109   .Faviet                    109          89         18        107
       111   .Sciarra                   111          89         18        107
       112   .Urman                     112          89         18        107
       113   .Popp                      113          89         18        107
       114 .Raphaely                    114          89         18        107
            .Baida                      116          89         18        107
       115  .Khoo                       115          89         18        107
       117  .Tobias                     117          89         18        107
       118  .Himuro                     118          89         18        107
       119  .Colmenares                 119          89         18        107
       120 .Weiss                       120          89         18        107
            .Fleaur                     181          89         18        107
       121 .Fripp                       121          89         18        107
            .Atkinson                   130          89         18        107
       122 .Kaufling                    122          89         18        107
            .Chung                      188          89         18        107
       123 .Vollman                     123          89         18        107
            .Bell                       192          89         18        107
       124 .Mourgos                     124          89         18        107
            .Davies                     142          89         18        107
       125  .Nayer                      125          89         18        107
       126  .Mikkilineni                126          89         18        107
       127  .Landry                     127          89         18        107
       128  .Markle                     128          89         18        107
       129  .Bissot                     129          89         18        107
       131  .Marlow                     131          89         18        107
       132  .Olson                      132          89         18        107
       133  .Mallin                     133          89         18        107
       134  .Rogers                     134          89         18        107
       135  .Gee                        135          89         18        107
       136  .Philtanker                 136          89         18        107
       137  .Ladwig                     137          89         18        107
       138  .Stiles                     138          89         18        107
       139  .Seo                        139          89         18        107
       140  .Patel                      140          89         18        107
       141  .Rajs                       141          89         18        107
       143  .Matos                      143          89         18        107
       144  .Vargas                     144          89         18        107
       145 .Russell                     145          89         18        107
            .Bernstein                  151          89         18        107
       146 .Partners                    146          89         18        107
            .Doran                      160          89         18        107
       147 .Errazuriz                   147          89         18        107
            .Ande                       166          89         18        107
       149 .Zlotkey                     149          89         18        107
            .Abel                       174          89         18        107
       150  .Tucker                     150          89         18        107
       152  .Hall                       152          89         18        107
       153  .Olsen                      153          89         18        107
       154  .Cambrault                  154          89         18        107
       155  .Tuvault                    155          89         18        107
       156  .King                       156          89         18        107
       157  .Sully                      157          89         18        107
       158  .McEwen                     158          89         18        107
       159  .Smith                      159          89         18        107
       161  .Sewall                     161          89         18        107
       162  .Vishney                    162          89         18        107
       163  .Greene                     163          89         18        107
       164  .Marvins                    164          89         18        107
       165  .Lee                        165          89         18        107
       167  .Banda                      167          89         18        107
       168  .Ozer                       168          89         18        107
       169  .Bloom                      169          89         18        107
       170  .Fox                        170          89         18        107
       171  .Smith                      171          89         18        107
       173  .Kumar                      173          89         18        107
       175  .Hutton                     175          89         18        107
       176  .Taylor                     176          89         18        107
       177  .Livingston                 177          89         18        107
       178  .Grant                      178          89         18        107
       179  .Johnson                    179          89         18        107
       180  .Taylor                     180          89         18        107
       182  .Sullivan                   182          89         18        107
       183  .Geoni                      183          89         18        107
       184  .Sarchand                   184          89         18        107
       185  .Bull                       185          89         18        107
       186  .Dellinger                  186          89         18        107
       187  .Cabrio                     187          89         18        107
       189  .Dilly                      189          89         18        107
       190  .Gates                      190          89         18        107
       191  .Perkins                    191          89         18        107
       193  .Everett                    193          89         18        107
       194  .McCain                     194          89         18        107
       195  .Jones                      195          89         18        107
       196  .Walsh                      196          89         18        107
       197  .Feeney                     197          89         18        107
       198  .OConnell                   198          89         18        107
       199  .Grant                      199          89         18        107
       200  .Whalen                     200          89         18        107
       201 .Hartstein                   201          89         18        107
            .Fay                        202          89         18        107
       203  .Mavris                     203          89         18        107
       205  .Higgins                    205          89         18        107
             .Gietz                     206          89         18        107

107 rows selected.

 






A Design Pattern for Oracle eBusiness Audit Trail Reports with XML Publisher

Oracle eBusiness applications allow audit history records to be automatically maintained on database tables, as explained in the release 12 System Administrator's guide, Reporting On AuditTrail Data.

Oracle E-Business Suite provides an auditing mechanism based on Oracle database triggers. AuditTrail stores change information in a "shadow table" of the audited table. This mechanism saves audit data in an uncompressed but "sparse" format, and you enable auditing for particular tables and groups of tables ("audit groups").

Oracle provides an Audit Query Navigator page where it is possible to search for changes by primary key values. For reporting purposes, the manual says:

You should write audit reports as needed. Audit Trail provides the views of your shadow tables to make audit reporting easier; you can write your reports to use these views.

In fact the views are of little practical use, and it is quite hard to develop reports that are user-friendly, efficient and not over-complex, owing, amongst other things, to the "sparse" data format. However, once you have developed one you can use that as a design pattern and starting point for audit reporting on any of the eBusiness tables.

In this article I provide such a report for auditing external bank account changes on Oracle eBusiness 12.1. The report displays the current record, with lookup information, followed by a list of the changes within an input date range. Only records that have changes within that range are included, and for each change only the fields that were changed are listed. The lookup information includes a list of detail records, making the report overall pretty general in structure: It has a master entity with two independent detail entities, and therefore requires a minimum of two queries. This minimum number of queries is usually the best choice and is what I have implemented (it's fine to have an extra query for global data, but I don't have any here). The main query makes extensive use of analytic functions, case expressions and subquery factors to achieve the necessary data transformations as simply and efficiently as possible.

The report is implemented in XML (or BI) Publisher, which is the main batch reporting tool for Oracle eBusiness.

I start by showing sample output from the report, followed by the RTF template. The queries are then documented, starting with query structure diagrams with annotations explaining the logic. A link is included to a zip file with all the code and templates needed to install the report. Oracle provides extensive documentation on the setup of Auditing and developing in XML Publisher, so I will not cover this.

Report Layout
Example Output in Excel Format

  • There are three regions
    • Bank Account Current Record - the master record
    • Owners - first detail block, listing the owners of the bank account
    • Bank Account Changes - the second detail block, listing the audit history. Note that unchanged fields are omitted
  • Note that some audit fields are displayed directly, such as account number, while for others, such as branch number, the display value is on a referenced table

XML Publisher RTF Tempate

  • Note that each audit field has its own row in the table, but the if-block excludes it if both old and new values are null

Audit Query
Query Structure Diagram
Audit Query QSD
Subquery Tabulation

SQL

WITH audit_range AS (
SELECT DISTINCT ext_bank_account_id
  FROM iby_ext_bank_accounts_a aup
 WHERE 1=1
&lp_beg_dat
&lp_end_dat
), audit_union AS (
SELECT ext_bank_account_id acc_id,
       CASE WHEN Substr (audit_true_nulls, 2, 1) = 'Y' OR audit_transaction_type = 'I' THEN '*NULL*' ELSE bank_account_name END acc_name,
       CASE WHEN Substr (audit_true_nulls, 3, 1) = 'Y' OR audit_transaction_type = 'I' THEN '*NULL*' ELSE bank_account_num END acc_num,
       CASE WHEN Substr (audit_true_nulls, 8, 1) = 'Y' OR audit_transaction_type = 'I' THEN '*NULL*' ELSE iban END iban,
       CASE WHEN Substr (audit_true_nulls, 7, 1) = 'Y' OR audit_transaction_type = 'I' THEN '*NULL*' ELSE currency_code END curr,
       CASE WHEN Substr (audit_true_nulls, 6, 1) = 'Y' OR audit_transaction_type = 'I' THEN '*NULL*' ELSE country_code END coun,
       CASE WHEN Substr (audit_true_nulls, 4, 1) = 'Y' OR audit_transaction_type = 'I' THEN 0 ELSE bank_id END bank_id,
       CASE WHEN Substr (audit_true_nulls, 5, 1) = 'Y' OR audit_transaction_type = 'I' THEN 0 ELSE branch_id END branch_id,
       audit_sequence_id seq_id,
       audit_timestamp,
       audit_user_name a_user,
       CASE WHEN audit_transaction_type = 'I' THEN 'INSERT' ELSE 'UPDATE' END a_type
  FROM iby_ext_bank_accounts_a aup
 WHERE aup.ext_bank_account_id IN (SELECT ext_bank_account_id FROM audit_range)
&lp_beg_dat
 UNION
SELECT bac.ext_bank_account_id,
       bac.bank_account_name,
       bac.bank_account_num,
       bac.iban,
       bac.currency_code,
       bac.country_code,
       bac.bank_id,
       bac.branch_id,
       NULL,
       bac.last_update_date,
       usr.user_name,
       NULL
  FROM iby_ext_bank_accounts            bac
  JOIN fnd_user                         usr
    ON usr.user_id                      = bac.last_updated_by
 WHERE bac.ext_bank_account_id IN (SELECT ext_bank_account_id FROM audit_range)
), audit_pairs AS (
SELECT acc_id,
       acc_name,
       bank_id,
       First_Value (bank_id IGNORE NULLS) OVER 
        (PARTITION BY acc_id ORDER BY audit_timestamp, seq_id ROWS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING) bank_id_n,
       branch_id,
       First_Value (branch_id IGNORE NULLS) OVER 
        (PARTITION BY acc_id ORDER BY audit_timestamp, seq_id ROWS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING) branch_id_n,
       First_Value (acc_name IGNORE NULLS) OVER 
        (PARTITION BY acc_id ORDER BY audit_timestamp, seq_id ROWS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING) acc_name_n,
       acc_num,
       First_Value (acc_num IGNORE NULLS) OVER 
        (PARTITION BY acc_id ORDER BY audit_timestamp, seq_id ROWS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING) acc_num_n,
       iban,
       First_Value (iban IGNORE NULLS) OVER 
        (PARTITION BY acc_id ORDER BY audit_timestamp, seq_id ROWS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING) iban_n,
       curr,
       First_Value (curr IGNORE NULLS) OVER 
        (PARTITION BY acc_id ORDER BY audit_timestamp, seq_id ROWS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING) curr_n,
       coun,
       First_Value (iban IGNORE NULLS) OVER 
        (PARTITION BY acc_id ORDER BY audit_timestamp, seq_id ROWS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING) coun_n,
       seq_id,
       audit_timestamp,
       a_user,
       a_type
  FROM audit_union
)
SELECT aup.acc_id,
       par_bnk.party_name bank_name,
       par_brn.party_name bra_name,
       orp.bank_or_branch_number bra_num,
       bac.bank_account_name acc_name,
       bac.bank_account_num acc_num,
       bac.iban,
       bac.country_code coun,
       bac.currency_code curr,
       To_Char (bac.creation_date, 'DD-MON-YYYY HH24:MI:SS') creation_date,
       usr.user_name created_by,
       To_Char (aup.audit_timestamp, 'DD-MON-YYYY HH24:MI:SS') a_time,
       aup.a_user,
       aup.a_type,
/*
attr: 1. NULL -> no change; 2. 0/'*NULL*' -> change from null; 3. 'other'-> change from not null
        old: 1 and 2 both return NULL; 3 returns old not null value
        new: only return value for 2 and 3, meaning some change
*/
       CASE WHEN aup.bank_id != 0 THEN par_bnk_o.party_name END bank_name_o,
       CASE WHEN aup.bank_id IS NOT NULL THEN CASE WHEN aup.bank_id_n != 0 THEN par_bnk_o.party_name END END bank_name_n,
       CASE WHEN aup.branch_id != 0 THEN par_brn_o.party_name END bra_name_o,
       CASE WHEN aup.branch_id IS NOT NULL THEN CASE WHEN aup.branch_id_n != 0 THEN par_brn_n.party_name END END bra_name_n,
       CASE WHEN aup.branch_id != 0 THEN orp_o.bank_or_branch_number END bra_num_o,
       CASE WHEN aup.branch_id IS NOT NULL THEN CASE WHEN aup.branch_id_n != 0 THEN orp_n.bank_or_branch_number END END bra_num_n,
       CASE WHEN aup.acc_name != '*NULL*' THEN aup.acc_name END acc_name_o,
       CASE WHEN aup.acc_name IS NOT NULL THEN CASE WHEN aup.acc_name_n != '*NULL*' THEN aup.acc_name_n END END acc_name_n,
       CASE WHEN aup.acc_num != '*NULL*' THEN aup.acc_num END acc_num_o,
       CASE WHEN aup.acc_num IS NOT NULL THEN CASE WHEN aup.acc_num_n != '*NULL*' THEN aup.acc_num_n END END acc_num_n,
       CASE WHEN aup.iban != '*NULL*' THEN aup.iban END iban_o,
       CASE WHEN aup.iban IS NOT NULL THEN CASE WHEN aup.iban_n != '*NULL*' THEN aup.iban_n END END iban_n,
       CASE WHEN aup.curr != '*NULL*' THEN aup.curr END curr_o,
       CASE WHEN aup.curr IS NOT NULL THEN CASE WHEN aup.curr_n != '*NULL*' THEN aup.curr_n END END curr_n,
       CASE WHEN aup.coun != '*NULL*' THEN aup.coun END coun_o,
       CASE WHEN aup.coun IS NOT NULL THEN CASE WHEN aup.coun_n != '*NULL*' THEN aup.coun_n END END coun_n
  FROM audit_pairs                      aup
  JOIN iby_ext_bank_accounts            bac
    ON bac.ext_bank_account_id          = aup.acc_id
  LEFT JOIN hz_parties                  par_bnk
    ON par_bnk.party_id                 = bac.bank_id
  LEFT JOIN hz_parties                  par_bnk_o
    ON par_bnk_o.party_id               = aup.bank_id
  LEFT JOIN hz_parties                  par_bnk_n
    ON par_bnk_n.party_id               = aup.bank_id_n
  LEFT JOIN hz_parties                  par_brn
    ON par_brn.party_id                 = bac.branch_id
  LEFT JOIN hz_organization_profiles    orp
    ON orp.party_id                     = par_brn.party_id
   AND SYSDATE BETWEEN Trunc (orp.effective_start_date) AND Nvl (Trunc (orp.effective_end_date), SYSDATE+1)
  LEFT JOIN hz_parties                  par_brn_o
    ON par_brn_o.party_id               = aup.branch_id
  LEFT JOIN hz_organization_profiles    orp_o
    ON orp_o.party_id                   = par_brn_o.party_id
   AND SYSDATE BETWEEN Trunc (orp_o.effective_start_date) AND Nvl (Trunc (orp_o.effective_end_date), SYSDATE+1)
  LEFT JOIN hz_parties                  par_brn_n
    ON par_brn_n.party_id               = aup.branch_id_n
  LEFT JOIN hz_organization_profiles    orp_n
    ON orp_n.party_id                   = par_brn_n.party_id
   AND SYSDATE BETWEEN Trunc (orp_n.effective_start_date) AND Nvl (Trunc (orp_n.effective_end_date), SYSDATE+1)
  JOIN fnd_user                         usr
    ON usr.user_id                      = bac.created_by
 WHERE aup.seq_id                       IS NOT NULL
&lp_beg_dat
&lp_end_dat
 ORDER BY aup.acc_id, aup.audit_timestamp DESC, aup.seq_id DESC

Owners Query
Query Structure Diagram
Owners Query
Subquery Tabulation

SQL

SELECT par.party_name owner,
       sup.vendor_name,
       sup.segment1
  FROM iby_account_owners               own
  JOIN hz_parties                       par
    ON par.party_id                     = own.account_owner_party_id
  LEFT JOIN ap_suppliers                sup
    ON sup.party_id                     = par.party_id
 WHERE own.ext_bank_account_id          = :ACC_ID

Code for Bank Account Auditing XML Publisher Report

XX_IBYBNKAUDIT

See also A Generic Unix Script for Uploading Oracle eBusiness Concurrent Programs






NoCOUG SQL Challenge 2014 Illustrated

An SQL challenge was posted recently on the blog of the Northern California Oracle user group, SQL Mini-challenge. A query was given against Oracle's demo HR schema, with description:

It lists the locations containing a department that either contains an employee named Steven King or an employee who holds the title of President or an employee who has previously held the title of President.

The challenge was to rewrite the query avoiding the relatively expensive existence subqueries, and minimising the number of consistent gets reported on the small demo data set. Oracle's Cost-Based Optimiser will itself transform queries within its parsing phase, but at a relatively low level; for example, an 'OR' condition might be changed to a union if the CBO thinks that will aid performance. The solutions to the challenge present a nice illustration of how more extensive query transfomations can improve performance and modularity characteristics.

In this article I will list four equivalent queries for the problem, three based on solutions provided on the blog, using Ansi syntax here for consistency. For each query I give the output from DBMS_XPlan, and include a query structure diagram following my own diagramming notation. The example query provided in the challenge is not in fact the most literal translation of the requirement into SQL, and I think it will be interesting to start with my idea of what that would be.

Update 28 October 2014: I noticed that in the 'literal' query I had omitted the location condition on the third subquery. I have fixed this and the execution plan is much worse. The results reported here were from version 11.2; running on v12.1 gives some extremely interesting differences, and I have added the v12.1 results at the end for the 'literal' query. They show a much improved plan, with departments 'factorised' out.

Query 1: Literal
This my attempt at the most literal translation of the stated requirement into SQL. The three conditions are all separately expressed as existence subqueries.

QSD Literal

NCOUG-Literal

Query Literal
Note that in an earlier version of this article, I had omitted the final 'd.location_id = l.location_id' condition.

SELECT l.location_id, l.city
  FROM locations l
 WHERE EXISTS
  (SELECT *
     FROM departments d
     JOIN employees e
       ON e.department_id = d.department_id
    WHERE d.location_id = l.location_id
      AND e.first_name = 'Steven' AND e.last_name = 'King'
  ) OR EXISTS
  (SELECT *
     FROM departments d
     JOIN employees e
       ON e.department_id = d.department_id
     JOIN jobs j
       ON j.job_id = e.job_id
    WHERE d.location_id = l.location_id
      AND j.job_title = 'President'
  ) OR EXISTS
  (SELECT *
     FROM departments d
     JOIN employees e
       ON e.department_id = d.department_id
     JOIN job_history h
       ON h.employee_id = e.employee_id
     JOIN jobs j2
       ON j2.job_id = h.job_id
    WHERE d.location_id = l.location_id
      AND j2.job_title   = 'President'
  )

XPlan Literal

-------------------------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                        | Name              | Starts | E-Rows | A-Rows |   A-Time   | Buffers |  OMem |  1Mem | Used-Mem |
-------------------------------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                 |                   |      1 |        |      1 |00:00:00.01 |     426 |       |       |          |
|*  1 |  FILTER                          |                   |      1 |        |      1 |00:00:00.01 |     426 |       |       |          |
|   2 |   VIEW                           | index$_join$_001  |      1 |     23 |     23 |00:00:00.01 |       7 |       |       |          |
|*  3 |    HASH JOIN                     |                   |      1 |        |     23 |00:00:00.01 |       7 |  1023K|  1023K| 1150K (0)|
|   4 |     INDEX FAST FULL SCAN         | LOC_CITY_IX       |      1 |     23 |     23 |00:00:00.01 |       3 |       |       |          |
|   5 |     INDEX FAST FULL SCAN         | LOC_ID_PK         |      1 |     23 |     23 |00:00:00.01 |       4 |       |       |          |
|   6 |   NESTED LOOPS                   |                   |     23 |        |      1 |00:00:00.01 |      92 |       |       |          |
|   7 |    NESTED LOOPS                  |                   |     23 |      1 |     23 |00:00:00.01 |      69 |       |       |          |
|   8 |     TABLE ACCESS BY INDEX ROWID  | EMPLOYEES         |     23 |      1 |     23 |00:00:00.01 |      46 |       |       |          |
|*  9 |      INDEX RANGE SCAN            | EMP_NAME_IX       |     23 |      1 |     23 |00:00:00.01 |      23 |       |       |          |
|* 10 |     INDEX UNIQUE SCAN            | DEPT_ID_PK        |     23 |      1 |     23 |00:00:00.01 |      23 |       |       |          |
|* 11 |    TABLE ACCESS BY INDEX ROWID   | DEPARTMENTS       |     23 |      1 |      1 |00:00:00.01 |      23 |       |       |          |
|  12 |   NESTED LOOPS                   |                   |     22 |        |      0 |00:00:00.01 |     173 |       |       |          |
|  13 |    NESTED LOOPS                  |                   |     22 |      1 |     88 |00:00:00.01 |     166 |       |       |          |
|  14 |     NESTED LOOPS                 |                   |     22 |      2 |      6 |00:00:00.01 |     160 |       |       |          |
|* 15 |      TABLE ACCESS FULL           | JOBS              |     22 |      1 |     22 |00:00:00.01 |     132 |       |       |          |
|  16 |      TABLE ACCESS BY INDEX ROWID | DEPARTMENTS       |     22 |      2 |      6 |00:00:00.01 |      28 |       |       |          |
|* 17 |       INDEX RANGE SCAN           | DEPT_LOCATION_IX  |     22 |      2 |      6 |00:00:00.01 |      22 |       |       |          |
|* 18 |     INDEX RANGE SCAN             | EMP_DEPARTMENT_IX |      6 |     10 |     88 |00:00:00.01 |       6 |       |       |          |
|* 19 |    TABLE ACCESS BY INDEX ROWID   | EMPLOYEES         |     88 |      1 |      0 |00:00:00.01 |       7 |       |       |          |
|  20 |   NESTED LOOPS                   |                   |     22 |        |      0 |00:00:00.01 |     154 |       |       |          |
|  21 |    NESTED LOOPS                  |                   |     22 |      1 |      0 |00:00:00.01 |     154 |       |       |          |
|  22 |     NESTED LOOPS                 |                   |     22 |      1 |      0 |00:00:00.01 |     154 |       |       |          |
|  23 |      NESTED LOOPS                |                   |     22 |      1 |      0 |00:00:00.01 |     154 |       |       |          |
|* 24 |       TABLE ACCESS FULL          | JOBS              |     22 |      1 |     22 |00:00:00.01 |     132 |       |       |          |
|  25 |       TABLE ACCESS BY INDEX ROWID| JOB_HISTORY       |     22 |      1 |      0 |00:00:00.01 |      22 |       |       |          |
|* 26 |        INDEX RANGE SCAN          | JHIST_JOB_IX      |     22 |      1 |      0 |00:00:00.01 |      22 |       |       |          |
|  27 |      TABLE ACCESS BY INDEX ROWID | EMPLOYEES         |      0 |      1 |      0 |00:00:00.01 |       0 |       |       |          |
|* 28 |       INDEX UNIQUE SCAN          | EMP_EMP_ID_PK     |      0 |      1 |      0 |00:00:00.01 |       0 |       |       |          |
|* 29 |     INDEX UNIQUE SCAN            | DEPT_ID_PK        |      0 |      1 |      0 |00:00:00.01 |       0 |       |       |          |
|* 30 |    TABLE ACCESS BY INDEX ROWID   | DEPARTMENTS       |      0 |      1 |      0 |00:00:00.01 |       0 |       |       |          |
-------------------------------------------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter(( IS NOT NULL OR  IS NOT NULL OR  IS NOT NULL))
   3 - access(ROWID=ROWID)
   9 - access("E"."LAST_NAME"='King' AND "E"."FIRST_NAME"='Steven')
  10 - access("E"."DEPARTMENT_ID"="D"."DEPARTMENT_ID")
  11 - filter("D"."LOCATION_ID"=:B1)
  15 - filter("J"."JOB_TITLE"='President')
  17 - access("D"."LOCATION_ID"=:B1)
  18 - access("E"."DEPARTMENT_ID"="D"."DEPARTMENT_ID")
  19 - filter("J"."JOB_ID"="E"."JOB_ID")
  24 - filter("J2"."JOB_TITLE"='President')
  26 - access("J2"."JOB_ID"="H"."JOB_ID")
  28 - access("H"."EMPLOYEE_ID"="E"."EMPLOYEE_ID")
  29 - access("E"."DEPARTMENT_ID"="D"."DEPARTMENT_ID")
  30 - filter("D"."LOCATION_ID"=:B1)

Query 2: NoCOUG Example
This is the example in the original challenge article, translated into Ansi syntax. It nests the job history existence subquery within an outer existence subquery, and references the departments and employees tables only once.

QSD NoCOUG Example

NCOUG-Example

Query NoCOUG Example

SELECT l.location_id, l.city
  FROM locations l
 WHERE EXISTS
  (SELECT *
     FROM departments d
     JOIN employees e
       ON e.department_id = d.department_id
     JOIN jobs j
       ON j.job_id = e.job_id
    WHERE d.location_id = l.location_id
      AND ( 
            (e.first_name = 'Steven' AND e.last_name = 'King')
         OR j.job_title = 'President'
         OR EXISTS
            (SELECT *
               FROM job_history h
               JOIN jobs j2
                 ON j2.job_id = h.job_id
              WHERE h.employee_id = e.employee_id
                AND j2.job_title   = 'President'
            ) 
          )
  )

XPlan NoCOUG Example

-------------------------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                        | Name              | Starts | E-Rows | A-Rows |   A-Time   | Buffers |  OMem |  1Mem | Used-Mem |
-------------------------------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                 |                   |      1 |        |      1 |00:00:00.01 |     152 |       |       |          |
|*  1 |  HASH JOIN SEMI                  |                   |      1 |      7 |      1 |00:00:00.01 |     152 |  1156K|  1156K| 1120K (0)|
|   2 |   VIEW                           | index$_join$_001  |      1 |     23 |     23 |00:00:00.01 |       6 |       |       |          |
|*  3 |    HASH JOIN                     |                   |      1 |        |     23 |00:00:00.01 |       6 |  1023K|  1023K| 1443K (0)|
|   4 |     INDEX FAST FULL SCAN         | LOC_CITY_IX       |      1 |     23 |     23 |00:00:00.01 |       3 |       |       |          |
|   5 |     INDEX FAST FULL SCAN         | LOC_ID_PK         |      1 |     23 |     23 |00:00:00.01 |       3 |       |       |          |
|   6 |   VIEW                           | VW_SQ_1           |      1 |     11 |      1 |00:00:00.01 |     146 |       |       |          |
|*  7 |    FILTER                        |                   |      1 |        |      1 |00:00:00.01 |     146 |       |       |          |
|*  8 |     HASH JOIN                    |                   |      1 |    106 |    106 |00:00:00.01 |      15 |   876K|   876K|  895K (0)|
|   9 |      MERGE JOIN                  |                   |      1 |    107 |    107 |00:00:00.01 |       8 |       |       |          |
|  10 |       TABLE ACCESS BY INDEX ROWID| JOBS              |      1 |     19 |     19 |00:00:00.01 |       2 |       |       |          |
|  11 |        INDEX FULL SCAN           | JOB_ID_PK         |      1 |     19 |     19 |00:00:00.01 |       1 |       |       |          |
|* 12 |       SORT JOIN                  |                   |     19 |    107 |    107 |00:00:00.01 |       6 | 15360 | 15360 |14336  (0)|
|  13 |        TABLE ACCESS FULL         | EMPLOYEES         |      1 |    107 |    107 |00:00:00.01 |       6 |       |       |          |
|  14 |      TABLE ACCESS FULL           | DEPARTMENTS       |      1 |     27 |     27 |00:00:00.01 |       7 |       |       |          |
|  15 |     NESTED LOOPS                 |                   |    105 |        |      0 |00:00:00.01 |     131 |       |       |          |
|  16 |      NESTED LOOPS                |                   |    105 |      1 |     10 |00:00:00.01 |     121 |       |       |          |
|  17 |       TABLE ACCESS BY INDEX ROWID| JOB_HISTORY       |    105 |      1 |     10 |00:00:00.01 |     112 |       |       |          |
|* 18 |        INDEX RANGE SCAN          | JHIST_EMPLOYEE_IX |    105 |      1 |     10 |00:00:00.01 |     105 |       |       |          |
|* 19 |       INDEX UNIQUE SCAN          | JOB_ID_PK         |     10 |      1 |     10 |00:00:00.01 |       9 |       |       |          |
|* 20 |      TABLE ACCESS BY INDEX ROWID | JOBS              |     10 |      1 |      0 |00:00:00.01 |      10 |       |       |          |
-------------------------------------------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - access("ITEM_1"="L"."LOCATION_ID")
   3 - access(ROWID=ROWID)
   7 - filter((("E"."FIRST_NAME"='Steven' AND "E"."LAST_NAME"='King') OR "J"."JOB_TITLE"='President' OR  IS NOT NULL))
   8 - access("E"."DEPARTMENT_ID"="D"."DEPARTMENT_ID")
  12 - access("J"."JOB_ID"="E"."JOB_ID")
       filter("J"."JOB_ID"="E"."JOB_ID")
  18 - access("H"."EMPLOYEE_ID"=:B1)
  19 - access("J2"."JOB_ID"="H"."JOB_ID")
  20 - filter("J2"."JOB_TITLE"='President')

Query 3: Subquery Factor Union
This converts the 'OR' conditions into a union of three driving subqueries that return the matching department ids from a subquery factor (which could equally be an inline view), and then joins departments and locations.

QSD Subquery Factor Union

NCOUG-SQF

Query Subquery Factor Union

WITH driving_union AS (
SELECT e.department_id
  FROM employees e
 WHERE (e.first_name = 'Steven' AND e.last_name = 'King')
 UNION
SELECT e.department_id
  FROM jobs j
  JOIN employees e
    ON e.job_id        = j.job_id
 WHERE j.job_title     = 'President'
 UNION
SELECT e.department_id
  FROM jobs j
  JOIN job_history h
    ON j.job_id        = h.job_id
  JOIN employees e
    ON e.employee_id    = h.employee_id
 WHERE j.job_title     = 'President'
)
SELECT DISTINCT l.location_id, l.city
  FROM driving_union u
  JOIN departments d
    ON d.department_id 	= u.department_id
  JOIN locations l
    ON l.location_id 	= d.location_id

XPlan Subquery Factor Union

----------------------------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                            | Name             | Starts | E-Rows | A-Rows |   A-Time   | Buffers |  OMem |  1Mem | Used-Mem |
----------------------------------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                     |                  |      1 |        |      1 |00:00:00.01 |      29 |       |       |          |
|   1 |  HASH UNIQUE                         |                  |      1 |      8 |      1 |00:00:00.01 |      29 |  1156K|  1156K|  464K (0)|
|*  2 |   HASH JOIN                          |                  |      1 |      8 |      1 |00:00:00.01 |      29 |  1517K|  1517K|  366K (0)|
|*  3 |    HASH JOIN                         |                  |      1 |      8 |      1 |00:00:00.01 |      23 |  1517K|  1517K|  382K (0)|
|   4 |     VIEW                             |                  |      1 |      8 |      1 |00:00:00.01 |      17 |       |       |          |
|   5 |      SORT UNIQUE                     |                  |      1 |      8 |      1 |00:00:00.01 |      17 |  2048 |  2048 | 2048  (0)|
|   6 |       UNION-ALL                      |                  |      1 |        |      2 |00:00:00.01 |      17 |       |       |          |
|   7 |        TABLE ACCESS BY INDEX ROWID   | EMPLOYEES        |      1 |      1 |      1 |00:00:00.01 |       2 |       |       |          |
|*  8 |         INDEX RANGE SCAN             | EMP_NAME_IX      |      1 |      1 |      1 |00:00:00.01 |       1 |       |       |          |
|   9 |        NESTED LOOPS                  |                  |      1 |        |      1 |00:00:00.01 |       8 |       |       |          |
|  10 |         NESTED LOOPS                 |                  |      1 |      6 |      1 |00:00:00.01 |       7 |       |       |          |
|* 11 |          TABLE ACCESS FULL           | JOBS             |      1 |      1 |      1 |00:00:00.01 |       6 |       |       |          |
|* 12 |          INDEX RANGE SCAN            | EMP_JOB_IX       |      1 |      6 |      1 |00:00:00.01 |       1 |       |       |          |
|  13 |         TABLE ACCESS BY INDEX ROWID  | EMPLOYEES        |      1 |      6 |      1 |00:00:00.01 |       1 |       |       |          |
|  14 |        NESTED LOOPS                  |                  |      1 |        |      0 |00:00:00.01 |       7 |       |       |          |
|  15 |         NESTED LOOPS                 |                  |      1 |      1 |      0 |00:00:00.01 |       7 |       |       |          |
|  16 |          NESTED LOOPS                |                  |      1 |      1 |      0 |00:00:00.01 |       7 |       |       |          |
|* 17 |           TABLE ACCESS FULL          | JOBS             |      1 |      1 |      1 |00:00:00.01 |       6 |       |       |          |
|  18 |           TABLE ACCESS BY INDEX ROWID| JOB_HISTORY      |      1 |      1 |      0 |00:00:00.01 |       1 |       |       |          |
|* 19 |            INDEX RANGE SCAN          | JHIST_JOB_IX     |      1 |      1 |      0 |00:00:00.01 |       1 |       |       |          |
|* 20 |          INDEX UNIQUE SCAN           | EMP_EMP_ID_PK    |      0 |      1 |      0 |00:00:00.01 |       0 |       |       |          |
|  21 |         TABLE ACCESS BY INDEX ROWID  | EMPLOYEES        |      0 |      1 |      0 |00:00:00.01 |       0 |       |       |          |
|  22 |     VIEW                             | index$_join$_011 |      1 |     27 |     27 |00:00:00.01 |       6 |       |       |          |
|* 23 |      HASH JOIN                       |                  |      1 |        |     27 |00:00:00.01 |       6 |  1096K|  1096K| 1547K (0)|
|  24 |       INDEX FAST FULL SCAN           | DEPT_ID_PK       |      1 |     27 |     27 |00:00:00.01 |       3 |       |       |          |
|  25 |       INDEX FAST FULL SCAN           | DEPT_LOCATION_IX |      1 |     27 |     27 |00:00:00.01 |       3 |       |       |          |
|  26 |    VIEW                              | index$_join$_013 |      1 |     23 |     23 |00:00:00.01 |       6 |       |       |          |
|* 27 |     HASH JOIN                        |                  |      1 |        |     23 |00:00:00.01 |       6 |  1023K|  1023K| 1426K (0)|
|  28 |      INDEX FAST FULL SCAN            | LOC_CITY_IX      |      1 |     23 |     23 |00:00:00.01 |       3 |       |       |          |
|  29 |      INDEX FAST FULL SCAN            | LOC_ID_PK        |      1 |     23 |     23 |00:00:00.01 |       3 |       |       |          |
----------------------------------------------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - access("L"."LOCATION_ID"="D"."LOCATION_ID")
   3 - access("D"."DEPARTMENT_ID"="U"."DEPARTMENT_ID")
   8 - access("E"."LAST_NAME"='King' AND "E"."FIRST_NAME"='Steven')
  11 - filter("J"."JOB_TITLE"='President')
  12 - access("E"."JOB_ID"="J"."JOB_ID")
  17 - filter("J"."JOB_TITLE"='President')
  19 - access("J"."JOB_ID"="H"."JOB_ID")
  20 - access("E"."EMPLOYEE_ID"="H"."EMPLOYEE_ID")
  23 - access(ROWID=ROWID)
  27 - access(ROWID=ROWID)

Query 4: Outer Joins
This avoids existence subqueries using the idea that an outer join with a constraint that the joined record is not null, with a distinct qualifier to eliminate duplicates, can serve as a logical equivalent.

QSD Outer Joins

NCOUG-OJ

Query Outer Joins

SELECT DISTINCT l.location_id, l.city
  FROM employees e
  LEFT JOIN jobs j
    ON j.job_id        	= e.job_id
   AND j.job_title      = 'President'  
  LEFT JOIN job_history h
    ON h.employee_id    = e.employee_id
  LEFT JOIN jobs j2
    ON j2.job_id        = h.job_id
   AND j2.job_title     = 'President' 
  JOIN departments d
    ON d.department_id 	= e.department_id
  JOIN locations l
    ON l.location_id 	= d.location_id
 WHERE (e.first_name = 'Steven' AND e.last_name = 'King')
    OR j.job_id IS NOT NULL
    OR j2.job_id IS NOT NULL

XPlan Outer Joins

----------------------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                     | Name              | Starts | E-Rows | A-Rows |   A-Time   | Buffers |  OMem |  1Mem | Used-Mem |
----------------------------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT              |                   |      1 |        |      1 |00:00:00.01 |      36 |       |       |          |
|   1 |  HASH UNIQUE                  |                   |      1 |    106 |      1 |00:00:00.01 |      36 |  1156K|  1156K|  464K (0)|
|*  2 |   FILTER                      |                   |      1 |        |      1 |00:00:00.01 |      36 |       |       |          |
|*  3 |    HASH JOIN RIGHT OUTER      |                   |      1 |    106 |    109 |00:00:00.01 |      36 |  1269K|  1269K|  369K (0)|
|*  4 |     TABLE ACCESS FULL         | JOBS              |      1 |      1 |      1 |00:00:00.01 |       6 |       |       |          |
|*  5 |     HASH JOIN RIGHT OUTER     |                   |      1 |    106 |    109 |00:00:00.01 |      30 |  1134K|  1134K|  751K (0)|
|   6 |      VIEW                     | index$_join$_004  |      1 |     10 |     10 |00:00:00.01 |       6 |       |       |          |
|*  7 |       HASH JOIN               |                   |      1 |        |     10 |00:00:00.01 |       6 |  1096K|  1096K| 1331K (0)|
|   8 |        INDEX FAST FULL SCAN   | JHIST_EMPLOYEE_IX |      1 |     10 |     10 |00:00:00.01 |       3 |       |       |          |
|   9 |        INDEX FAST FULL SCAN   | JHIST_JOB_IX      |      1 |     10 |     10 |00:00:00.01 |       3 |       |       |          |
|* 10 |      HASH JOIN OUTER          |                   |      1 |    106 |    106 |00:00:00.01 |      24 |   858K|   858K| 1270K (0)|
|* 11 |       HASH JOIN               |                   |      1 |    106 |    106 |00:00:00.01 |      18 |  1063K|  1063K| 1252K (0)|
|* 12 |        HASH JOIN              |                   |      1 |     27 |     27 |00:00:00.01 |      12 |  1156K|  1156K| 1133K (0)|
|  13 |         VIEW                  | index$_join$_010  |      1 |     23 |     23 |00:00:00.01 |       6 |       |       |          |
|* 14 |          HASH JOIN            |                   |      1 |        |     23 |00:00:00.01 |       6 |  1023K|  1023K| 1450K (0)|
|  15 |           INDEX FAST FULL SCAN| LOC_CITY_IX       |      1 |     23 |     23 |00:00:00.01 |       3 |       |       |          |
|  16 |           INDEX FAST FULL SCAN| LOC_ID_PK         |      1 |     23 |     23 |00:00:00.01 |       3 |       |       |          |
|  17 |         VIEW                  | index$_join$_008  |      1 |     27 |     27 |00:00:00.01 |       6 |       |       |          |
|* 18 |          HASH JOIN            |                   |      1 |        |     27 |00:00:00.01 |       6 |  1096K|  1096K| 1547K (0)|
|  19 |           INDEX FAST FULL SCAN| DEPT_ID_PK        |      1 |     27 |     27 |00:00:00.01 |       3 |       |       |          |
|  20 |           INDEX FAST FULL SCAN| DEPT_LOCATION_IX  |      1 |     27 |     27 |00:00:00.01 |       3 |       |       |          |
|  21 |        TABLE ACCESS FULL      | EMPLOYEES         |      1 |    107 |    107 |00:00:00.01 |       6 |       |       |          |
|* 22 |       TABLE ACCESS FULL       | JOBS              |      1 |      1 |      1 |00:00:00.01 |       6 |       |       |          |
----------------------------------------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - filter((("E"."FIRST_NAME"='Steven' AND "E"."LAST_NAME"='King') OR "J"."JOB_ID" IS NOT NULL OR "J2"."JOB_ID" IS NOT NULL))
   3 - access("J2"."JOB_ID"="H"."JOB_ID")
   4 - filter("J2"."JOB_TITLE"='President')
   5 - access("H"."EMPLOYEE_ID"="E"."EMPLOYEE_ID")
   7 - access(ROWID=ROWID)
  10 - access("J"."JOB_ID"="E"."JOB_ID")
  11 - access("D"."DEPARTMENT_ID"="E"."DEPARTMENT_ID")
  12 - access("L"."LOCATION_ID"="D"."LOCATION_ID")
  14 - access(ROWID=ROWID)
  18 - access(ROWID=ROWID)
  22 - filter("J"."JOB_TITLE"='President')

Query Summary Table v11.2

Here is a summary of some statistics on the queries, run on an Oracle 11.2 XE instance. Query lines depends on formatting of course.

Query Buffers Table Instances XPlan Steps Query Lines
Literal 426 10 30 30
NoCOUG Example 152 6 20 23
Subquery Factor Union 29 6 29 25
Outer Joins 36 6 22 17

Oracle 12c

While the original version of this article, posted 25 August 2014, was based on Oracle 11.2, I later ran my script on Oracle 12.1, and noted that the 'literal' query now had a much-changed execution plan. In particular, the departments table had been 'factorised' out, appearing only once, and giving a much reduced buffer count of 31. It seems that this comes from an improvement in the transformation phase of query execution. The other queries did not show so much difference in plans, see the summary table below.

Execution Plan for Literal v12.1

-----------------------------------------------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                                    | Name               | Starts | E-Rows | A-Rows |   A-Time   | Buffers | Reads  |  OMem |  1Mem | Used-Mem |
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                             |                    |      1 |        |      1 |00:00:00.05 |      31 |      1 |       |       |          |
|*  1 |  HASH JOIN SEMI                              |                    |      1 |      7 |      1 |00:00:00.05 |      31 |      1 |  1645K|  1645K| 1432K (0)|
|   2 |   VIEW                                       | index$_join$_001   |      1 |     23 |     23 |00:00:00.01 |       8 |      0 |       |       |          |
|*  3 |    HASH JOIN                                 |                    |      1 |        |     23 |00:00:00.01 |       8 |      0 |  1368K|  1368K| 1566K (0)|
|   4 |     INDEX FAST FULL SCAN                     | LOC_CITY_IX        |      1 |     23 |     23 |00:00:00.01 |       4 |      0 |       |       |          |
|   5 |     INDEX FAST FULL SCAN                     | LOC_ID_PK          |      1 |     23 |     23 |00:00:00.01 |       4 |      0 |       |       |          |
|   6 |   VIEW                                       | VW_SQ_1            |      1 |      8 |      1 |00:00:00.05 |      23 |      1 |       |       |          |
|   7 |    MERGE JOIN SEMI                           |                    |      1 |      8 |      1 |00:00:00.05 |      23 |      1 |       |       |          |
|   8 |     TABLE ACCESS BY INDEX ROWID              | DEPARTMENTS        |      1 |     27 |     10 |00:00:00.01 |       4 |      0 |       |       |          |
|   9 |      INDEX FULL SCAN                         | DEPT_ID_PK         |      1 |     27 |     10 |00:00:00.01 |       2 |      0 |       |       |          |
|* 10 |     SORT UNIQUE                              |                    |     10 |      8 |      1 |00:00:00.05 |      19 |      1 |  2048 |  2048 | 2048  (0)|
|  11 |      VIEW                                    | VW_JF_SET$1236063A |      1 |      8 |      2 |00:00:00.05 |      19 |      1 |       |       |          |
|  12 |       UNION-ALL                              |                    |      1 |        |      2 |00:00:00.05 |      19 |      1 |       |       |          |
|  13 |        NESTED LOOPS                          |                    |      1 |        |      1 |00:00:00.05 |       9 |      1 |       |       |          |
|  14 |         NESTED LOOPS                         |                    |      1 |      6 |      1 |00:00:00.05 |       8 |      1 |       |       |          |
|* 15 |          TABLE ACCESS FULL                   | JOBS               |      1 |      1 |      1 |00:00:00.01 |       7 |      0 |       |       |          |
|* 16 |          INDEX RANGE SCAN                    | EMP_JOB_IX         |      1 |      6 |      1 |00:00:00.05 |       1 |      1 |       |       |          |
|  17 |         TABLE ACCESS BY INDEX ROWID          | EMPLOYEES          |      1 |      6 |      1 |00:00:00.01 |       1 |      0 |       |       |          |
|  18 |        TABLE ACCESS BY INDEX ROWID BATCHED   | EMPLOYEES          |      1 |      1 |      1 |00:00:00.01 |       2 |      0 |       |       |          |
|* 19 |         INDEX RANGE SCAN                     | EMP_NAME_IX        |      1 |      1 |      1 |00:00:00.01 |       1 |      0 |       |       |          |
|  20 |        NESTED LOOPS                          |                    |      1 |        |      0 |00:00:00.01 |       8 |      0 |       |       |          |
|  21 |         NESTED LOOPS                         |                    |      1 |      1 |      0 |00:00:00.01 |       8 |      0 |       |       |          |
|  22 |          NESTED LOOPS                        |                    |      1 |      1 |      0 |00:00:00.01 |       8 |      0 |       |       |          |
|* 23 |           TABLE ACCESS FULL                  | JOBS               |      1 |      1 |      1 |00:00:00.01 |       7 |      0 |       |       |          |
|  24 |           TABLE ACCESS BY INDEX ROWID BATCHED| JOB_HISTORY        |      1 |      1 |      0 |00:00:00.01 |       1 |      0 |       |       |          |
|* 25 |            INDEX RANGE SCAN                  | JHIST_JOB_IX       |      1 |      1 |      0 |00:00:00.01 |       1 |      0 |       |       |          |
|* 26 |          INDEX UNIQUE SCAN                   | EMP_EMP_ID_PK      |      0 |      1 |      0 |00:00:00.01 |       0 |      0 |       |       |          |
|  27 |         TABLE ACCESS BY INDEX ROWID          | EMPLOYEES          |      0 |      1 |      0 |00:00:00.01 |       0 |      0 |       |       |          |
-----------------------------------------------------------------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - access("VW_COL_1"="L"."LOCATION_ID")
   3 - access(ROWID=ROWID)
  10 - access("ITEM_1"="D"."DEPARTMENT_ID")
       filter("ITEM_1"="D"."DEPARTMENT_ID")
  15 - filter("J"."JOB_TITLE"='President')
  16 - access("J"."JOB_ID"="E"."JOB_ID")
  19 - access("E"."LAST_NAME"='King' AND "E"."FIRST_NAME"='Steven')
  23 - filter("J2"."JOB_TITLE"='President')
  25 - access("J2"."JOB_ID"="H"."JOB_ID")
  26 - access("H"."EMPLOYEE_ID"="E"."EMPLOYEE_ID")

Note
-----
   - this is an adaptive plan

Query Summary Table v12.1

Query Buffers Table Instances XPlan Steps Query Lines
Literal 31 10 27 31
NoCOUG Example 156 6 19 23
Subquery Factor Union 29 6 28 25
Outer Joins 45 6 22 17

Here is the v12.1 output:

NCOUG-3-121