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.

250px-sudoku-by-l2g-20050714_svg

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
/

sqlplus

Una vez realizado esto tendremos todos los números faltantes en nuestro Sudoku.

¿Quién es Rhommel Lamas?

Escribo en Talfin desde el 2006, soy un fanático de la libertad de expresión en todos sus sabores, fanboy, amante de la cultura libre, cloud computing, dispositivos móviles y de la vida en general. Emprendedor de corazón, y developer de Closet, me encantan los videojuegos, y conocer el mundo. También escribo en: Techironic mi Web Personal: Rhommell, me puedes encontrar también en Twitter: @rhoml y Facebook .

No te pierdas