|
9#
以OO的 211#的结点命名为基础:
SQL> with t1 as (
2 select 'A' START_NODE,'C' END_NODE from dual
3 union all
4 select 'A','E' from dual
5 union all
6 select 'A','M' from dual
7 union all
8 select 'C','D' from dual
9 union all
10 select 'C','F' from dual
11 union all
12 select 'E','F' from dual
13 union all
14 select 'E','G' from dual
15 union all
16 select 'G','O' from dual
17 union all
18 select 'G','M' from dual
19 union all
20 select 'D','M' from dual
21 union all
22 select 'D','O' from dual
23 union all
24 select 'F','O' from dual),
25 t2 as (
26 select 'O' START_NODE,'L' END_NODE from dual
27 union all
28 select 'O','H' from dual
29 union all
30 select 'O','N' from dual
31 union all
32 select 'L','K' from dual
33 union all
34 select 'L','J' from dual
35 union all
36 select 'H','J' from dual
37 union all
38 select 'H','I' from dual
39 union all
40 select 'I','B' from dual
41 union all
42 select 'I','N' from dual
43 union all
44 select 'K','N' from dual
45 union all
46 select 'K','B' from dual
47 union all
48 select 'J','B' from dual),
49 t as (
50 select start_node,end_node
51 from t1
52 union all
53 select end_node start_node, start_node end_node
54 from t1
55 union all
56 select start_node,end_node
57 from t2
58 union all
59 select end_node start_node, start_node end_node
60 from t2),
61 s as (
62 select level lvl,replace(sys_connect_by_path(start_node,','),',','') node_path
63 from t
64 where level >= 6
65 connect by nocycle prior start_node = end_node
66 start with start_node = 'A')
67 select count(distinct node_path)
68 from s
69 where substr(node_path,length(node_path),1) = 'B'
70 /
COUNT(DISTINCTNODE_PATH)
------------------------
324 |
|