Ver Mensaje Individual
  #2  
Antiguo 09-09-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Reputación: 30
jachguate Va por buen camino
En casos como este, en que veo que la cantidad de caracteres por nivel no es fija, podes hacer una función que te devuelva el nivel de un código en particular (contando los puntos, por ejemplo).

Se me ocurre algo como: (tené en cuenta que no he verificado el código).

Código:
Create or replace function NivelDelCodigo(codigo in VarChar2) return number 
IS

Nivel Number;

Begin
  if codigo is Null Then
    return(0);
  nivel := 1;
  Loop
    if InStr(codigo, '.', 1, nivel) > 0 Then
      nivel := nivel + 1;
    else
      exit;
    end if;
  end Loop;
  return(nivel);
end;
/
Una vez hecho esto, es tan simple como:
Código SQL [-]
Select *
  from tabla
 where NivelDelCodigo(codigo) = 2;

Claro que esto no es óptimo... y la sentencia será lenta en tablas con mucha información... en ese caso, es mejor guardar en un campo el nivel del código, crear indices que lo involucren de acuerdo a las consultas que haremos y utilizar este campo en los predicados.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita