Habiendo leído el tema de hoy
“SQL. Tareas entretenidas " , recordé que siempre había querido recomendar un excelente libro para el nivel avanzado de Oracle SQL de nuestro excelente especialista de Oracle, Alex Reprintsev -" El poder de Oracle SQL ". No solo es extremadamente útil en sí mismo para aquellos que desean conocer Oracle SQL a un alto nivel, ¡también es
gratis ! Además, hay versiones en ruso e inglés.
En general,
enlaces al libro en sí .
Y para
discutir el libro en sí con el autor .
Y para sembrar un par de ejemplos de tareas de él:
- Componentes conectados
hay un gráfico no dirigido (no direccional) definido por una lista de aristas y
requerido para conectar componentes.
Para los datos en la tabla a continuación:
create table edge(x1, x2) as select 10,20 from dual union all select 50,40 from dual union all select 20,30 from dual union all select 20,40 from dual union all select 60,70 from dual union all select 80,60 from dual union all select 20,90 from dual;
Se espera el siguiente resultado (el orden de numeración de los componentes no es crítico):
X GRP
- Ordenar dependencias
Ahora considere el problema en un gráfico dirigido (dirigido).
Hay una tabla con dependencias entre objetos que no contiene ciclos
dependencias Sin embargo, puede existir más de una ruta entre pares de vértices, por lo tanto
Tal estructura no se puede llamar un árbol.
create table d(name, referenced_name) as (select null, 'a' from dual union all select null, 'd' from dual union all select 'a', 'b' from dual union all select 'd', 'b' from dual union all select 'b', 'e' from dual union all select 'b', 'c' from dual union all select 'e', 'c' from dual);
Es necesario rodear todos los objetos en el número mínimo de pasos, mientras que en cada paso
Puede omitir solo aquellos objetos para los que se omiten todos los objetos dependientes. Es decir, en
el primer paso pasa por alto los objetos que no tienen dependencias; en el segundo paso, los que dependen
de los objetos del primer paso y así sucesivamente. En otras palabras, las dependencias de profundidad están numeradas.
- Rangos de cobertura
Supongamos que hay una tabla de la siguiente forma:
create table t_range(a, b) as (select 1, 15 from dual union all select 3, 17 from dual union all select 6, 19 from dual union all select 10, 21 from dual union all select 17, 26 from dual union all select 18, 29 from dual union all select 20, 32 from dual union all select 24, 35 from dual union all select 28, 45 from dual union all select 30, 49 from dual);
b> a para cada par a, b; un unico
Es necesario obtener los segmentos (1:15), (17:26), (28:45), es decir, comenzamos desde la línea con
mínimo a , y tome la siguiente línea de tal manera que a sea mayor que b de la línea actual y así
más lejos
- Mejores caminos
Para una tabla con una lista de directorios en el sistema de archivos, envíe solo aquellos que no tienen
subdirectorio
create table t_path(path) as select '/tmp/cat/' from dual union all select '/tmp/cata/' from dual union all select '/tmp/catb/' from dual union all select '/tmp/catb/catx/' from dual union all select '/usr/local/' from dual union all select '/usr/local/lib/liba/' from dual union all select '/usr/local/lib/libx/' from dual union all select '/var/cache/' from dual union all select '/var/cache/'||'xyz'||rownum||'/' from dual connect by level <= 1e6;
Para los datos indicados, el resultado será:
PATH