|
8# 不带函数的SQL
SQL> with t as (select level n from dual connect by level < 50),
2 s(lvl,n_list,n_sum,n_mul,n_last) as (select 1,
3 cast(n as varchar2(100)),
4 n,
5 n,
6 n
7 from t
8 union all
9 select s.lvl + 1,
10 s.n_list||','||t.n,
11 s.n_sum + t.n,
12 s.n_mul*t.n,
13 t.n
14 from s,t
15 where s.n_sum + t.n <= 50
16 and s.n_last < t.n
17 and (select sum(case when mod(regexp_substr(s.n_list,'[^,]+',1,level),t.n)
18 *mod(t.n,regexp_substr(s.n_list,'[^,]+',1,level)) <> 0
19 then 1
20 else 0
21 end)
22 from dual
23 connect by level <= regexp_count(s.n_list,',',1) + 1
24 ) = regexp_count(s.n_list,',',1) + 1
25 )
26 select max(s.n_mul) from s where n_sum = 50;
MAX(S.N_MUL)
------------
240240
|
|