Oracle 11G release 2 introduce Recursive Subquery | Oracle 11g Release 2 introduces Recursive Subquery
1 Nov
Para los amantes de las bases de datos, y para los que son un tanto mas geek que el resto del mundo, Oracle 11g trae una nueva funcionalidad como nos cuentan en AMIS, esta funcionalidad son los Recursive Subquery, que según explican es una especie de sustituto para realizar conexiones con querys jerárquicos. La aplicación más sencilla que vieron ellos para demostrar como funcionan es la resolución de Sudokus.
Supongamos que tenemos el siguiente Sudoku.
Lo primero que hay es que convertir esa tabla en un String de la siguiente forma:
“53 7 6 195 98 6 8 6 34 8 3 17 2 6 6 28 419 5 8 79″
Y luego ejecutar en nuestro Sql plus
with x( s, ind ) as
( select sud, instr( sud, ‘ ‘ )
from ( select ’53 7 6 195 98 6 8 6 34 8 3 17 2 6 6 28 419 5 8 79′ sud from dual )
union all
select substr( s, 1, ind – 1 ) || z || substr( s, ind + 1 )
, instr( s, ‘ ‘, ind + 1 )
from x
, ( select to_char( rownum ) z
from dual
connect by rownum <= 9
) z
where ind > 0
and not exists ( select null
from ( select rownum lp
from dual
connect by rownum <= 9
)
where z = substr( s, trunc( ( ind – 1 ) / 9 ) * 9 + lp, 1 )
or z = substr( s, mod( ind – 1, 9 ) – 8 + lp * 9, 1 )
or z = substr( s, mod( trunc( ( ind – 1 ) / 3 ), 3 ) * 3
+ trunc( ( ind – 1 ) / 27 ) * 27 + lp
+ trunc( ( lp – 1 ) / 3 ) * 6
, 1 )
)
)
select s
from x
where ind = 0
/
Una vez realizado esto tendremos todos los números faltantes en nuestro Sudoku.


