项目中有时候需要随机条件的组合来做分析,排列组合可以保证不遗漏什么条件,下面是一个用pl / sql 实现的排列组合.
1 procedure zuhe(n number, 2 arrvar out t_arrchar) is 3 idx number; 4 m number; 5 x number := 1; 6 type arrayty is table of number index by binary_integer; 7 -- nlarr nlarrarty; 8 -- arr arrayty; 9 p arrayty; 10 a arrayty; 11 tmps varchar2(1000); 12 begin 13 for i in 1 .. n 14 loop 15 a(i) := i; 16 end loop; 17 for i in 1 .. n 18 loop 19 p(i) := i; 20 end loop; 21 for i in 0 .. n 22 loop 23 m := i; 24 begin 25 idx := 1; 26 p(idx) := 1; --//取第一个元素 27 while (true) 28 loop 29 if (p(idx) > n) then 30 --//取到底了,回退 31 if (idx = 1) then 32 --//各种情况取完了,不能再回退了 33 exit; 34 end if; 35 --} 36 idx := idx - 1; --;//回退到前一个 37 p(idx) := p(idx) + 1; --//替换元素 38 -- } 39 elsif (idx = m) then 40 --//取够了,输出 41 for i in 1 .. m 42 loop 43 tmps := tmps || to_char(a(p(i))); 44 end loop; 45 arrvar(x) := tmps; 46 tmps := null; 47 p(idx) := p(idx) + 1; --//替换元素 48 x := x + 1; 49 else 50 --{//多取一个元素 51 idx := idx + 1; 52 p(idx) := p(idx - 1) + 1; 53 --} 54 end if; 55 end loop; 56 end; 57 end loop; 58 /* for i in 1 .. arrvar.count 59 loop 60 dbms_output.put_line(to_char(arrvar(i))); 61 end loop;*/ 62 end;