|
170ms, 数字不管
1-8全拆散
- var m number
- exec :m:=1912
- WITH
- p1(srcblock,destblock,tst,pathstr) AS (
- SELECT /*+ materialize no_merge */ a.n,b.n,a.st+b.st,cast(chr(a.n)||chr(b.n) as varchar2(100))
- from grid a , grid b
- where
- a.n=1 -- Start with first block
- and b.n in (a.n + 8)
- UNION ALL
- SELECT /*+ materialize */
- a.srcblock,b.n,
- a.tst + b.st,--st
- pathstr||chr(b.n)
- FROM p1 a , (select * from grid where mod(n,8) in (1)) b
- WHERE b.n in (
- a.destblock + 8
- ) and b.n!=1
- AND a.tst + b.st <=:M
- and instr(pathstr,chr(n))=0
- ),
- p2(srcblock,destblock,tst,pathstr) AS (
- SELECT /*+ materialize no_merge */ a.n,b.n,a.st+b.st,cast(chr(a.n)||chr(b.n) as varchar2(100))
- from grid a , grid b
- where mod(a.n,8) in (2)
- and b.n in (a.n + 8, a.n -8 )
- UNION ALL
- SELECT
- a.srcblock,b.n,
- a.tst + b.st,--st
- pathstr||chr(b.n)
- FROM p2 a , (select * from grid where mod(n,8) in (2)) b
- WHERE b.n in (
- a.destblock + 8 , a.destblock - 8
- )
- AND a.tst + b.st <=:M
- and instr(pathstr,chr(n))=0
- ),
- p3(srcblock,destblock,tst,pathstr) AS (
- SELECT /*+ materialize no_merge*/ a.n,b.n,a.st+b.st,cast(chr(a.n)||chr(b.n) as varchar2(100))
- from grid a , grid b
- where mod(a.n,8) in (3)
- and b.n in (a.n + 8, a.n -8 )
- UNION ALL
- SELECT
- a.srcblock,b.n,
- a.tst + b.st,--st
- pathstr||chr(b.n)
- FROM p3 a , (select * from grid where mod(n,8) in (3)) b
- WHERE b.n in (
- a.destblock + 8 , a.destblock - 8
- )
- AND a.tst + b.st <=:M
- and instr(pathstr,chr(n))=0
- ),
- p4(srcblock,destblock,tst,pathstr) AS (
- SELECT /*+ materialize no_merge*/ a.n,b.n,a.st+b.st,cast(chr(a.n)||chr(b.n) as varchar2(100))
- from grid a , grid b
- where mod(a.n,8) in (4)
- and b.n in (a.n + 8, a.n -8 )
- UNION ALL
- SELECT
- a.srcblock,b.n,
- a.tst + b.st,--st
- pathstr||chr(b.n)
- FROM p4 a , (select * from grid where mod(n,8) in (4)) b
- WHERE b.n in (
- a.destblock + 8 , a.destblock - 8
- )
- AND a.tst + b.st <=:M
- and instr(pathstr,chr(n))=0
- ),
- p5(srcblock,destblock,tst,pathstr) AS (
- SELECT /*+ materialize no_merge*/ a.n,b.n,a.st+b.st,cast(chr(a.n)||chr(b.n) as varchar2(100))
- from grid a , grid b
- where mod(a.n,8) in (5)
- and b.n in (a.n + 8, a.n -8 )
- UNION ALL
- SELECT
- a.srcblock,b.n,
- a.tst + b.st,--st
- pathstr||chr(b.n)
- FROM p5 a , (select * from grid where mod(n,8) in (5)) b
- WHERE b.n in (
- a.destblock + 8 , a.destblock - 8
- )
- AND a.tst + b.st <=:M
- and instr(pathstr,chr(n))=0
- ),
- p6(srcblock,destblock,tst,pathstr) AS (
- SELECT /*+materialize no_merge*/ a.n,b.n,a.st+b.st,cast(chr(a.n)||chr(b.n) as varchar2(100))
- from grid a , grid b
- where mod(a.n,8) in (6)
- and b.n in (a.n + 8, a.n -8 )
- UNION ALL
- SELECT
- a.srcblock,b.n,
- a.tst + b.st,--st
- pathstr||chr(b.n)
- FROM p6 a , (select * from grid where mod(n,8) in (6)) b
- WHERE b.n in (
- a.destblock + 8 , a.destblock - 8
- )
- AND a.tst + b.st <=:M
- and instr(pathstr,chr(n))=0
- ),
- p7(srcblock,destblock,tst,pathstr) AS (
- SELECT /*+materialize no_merge*/ a.n,b.n,a.st+b.st,cast(chr(a.n)||chr(b.n) as varchar2(100))
- from grid a , grid b
- where mod(a.n,8) in (7)
- and b.n in (a.n + 8, a.n -8 )
- UNION ALL
- SELECT
- a.srcblock,b.n,
- a.tst + b.st,--st
- pathstr||chr(b.n)
- FROM p7 a , (select * from grid where mod(n,8) in (7)) b
- WHERE b.n in (
- a.destblock + 8 , a.destblock - 8
- )
- AND a.tst + b.st <=:M
- and instr(pathstr,chr(n))=0
- ),
- p8(srcblock,destblock,tst,pathstr) AS (
- SELECT /*+materialize no_merge*/ a.n,b.n,a.st+b.st,cast(chr(a.n)||chr(b.n) as varchar2(100))
- from grid a , grid b
- where a.n=64
- and b.n in (a.n -8 )
- UNION ALL
- SELECT
- a.srcblock,b.n,
- a.tst + b.st,--st
- pathstr||chr(b.n)
- FROM p8 a , (select * from grid where mod(n,8) in (0)) b
- WHERE b.n in ( a.destblock - 8 )
- AND a.tst + b.st <=:M
- and instr(pathstr,chr(n))=0
- ),
- p12 as (
- select /*+ materialize no_merge use_concat ordered use_hash(a b) */ distinct b.destblock,a.tst+b.tst tst
- from p1 a,p2 b
- where
- b.srcblock in (
- a.destblock + 1 ,
- a.destblock - 7 ,
- a.destblock + 9
- )
- AND a.tst + b.tst <:M
- ),
- p13 as (
- select /*+ materialize no_merge ordered use_concat use_hash(a b) */ distinct b.destblock,a.tst+b.tst tst
- from p3 b , p12 a
- where
- b.srcblock in (
- a.destblock + 1 ,
- a.destblock - 7 ,
- a.destblock + 9
- )
- AND a.tst + b.tst <:M
- ),
- p14 as (
- select /*+ materialize no_merge ordered use_concat use_hash(a b) */ distinct b.destblock,a.tst+b.tst tst
- from p4 b , p13 a
- where
- b.srcblock in (
- a.destblock + 1 ,
- a.destblock - 7 ,
- a.destblock + 9
- )
- AND a.tst + b.tst <:M
- ) ,
- p87 as (
- select /*+ materialize no_merge use_concat ordered use_hash(a b) */ distinct b.destblock,a.tst+b.tst tst
- from p8 a,p7 b
- where
- b.srcblock in (
- a.destblock - 1 ,
- a.destblock + 7 ,
- a.destblock - 9
- )
- AND a.tst + b.tst <:M
- ),
- p86 as (
- select /*+ materialize no_merge ordered use_concat use_hash(a b) */ distinct b.destblock,a.tst+b.tst tst
- from p6 b , p87 a
- where
- b.srcblock in (
- a.destblock - 1 ,
- a.destblock + 7 ,
- a.destblock - 9
- )
- AND a.tst + b.tst <:M
- ),
- p85 as (
- select /*+ materialize no_merge ordered use_concat use_hash(a b) */ distinct b.destblock,a.tst+b.tst tst
- from p5 b,p86 a
- where
- b.srcblock in (
- a.destblock - 1 ,
- a.destblock + 7 ,
- a.destblock - 9
- )
- AND a.tst + b.tst <:M
- ),
- p18 as (
- select /*+use_hash(a b) */'Y' f from p14 a,p85 b
- where
- b.destblock in (
- a.destblock + 1 ,
- a.destblock - 7 ,
- a.destblock + 9
- ) and b.tst = :M - a.tst
- and rownum = 1
- )
- select nvl(max(f),'N') from p18
复制代码 |
|