Sacar el máximo valor de una columna

Estoy desarrollando una aplicación en visual basic 6 y oracle 10, el detalle es el siguiente:
Debo generar un numero consecutivo para ir guardando ciertas "ordenes de servicio" la cuestión es que yo declare el campo que me guarda esos consecutivos como varchar debido a que en algún momento puede ser que se de un caso como "13-A y 13-B" si lo declaro como entero lo anterior no lo aceptaría obviamente por eso decidí que fuera varchar. Allí el problema ya que cuando busco el Max de ellos para generar el nuevo solo me funciona esto hasta el numero 10 ya que el 11 ya no me lo da si no que me sigue dando el 10 y allí se queda. Habrá algunamanera de convertir o no se usted sabrá,.

1 Respuesta

Respuesta
1
El problema es que está sacando el máximo ordenando por cadena de caracteres no el máximo numero.
Tratanando los números como juego de caracteres primero estaría el 1 luego el 10 luego el 2,3 y el máximo el 9.
Para evitar esto tendrías que convertir la cadena a numero con to_number(cadena) antes de hacer el max, pero tienes un problema que no puedes hacer to_number del campo completo si tienes un -B o -A porque dará error de numero invalido.
O bien haces un substr del trozo de cadena que contiene el numero y luego el to_number o no hacer to_number o anteponer ceros por la izquierda con la longitud del máximo numero que se pueda optener, anteponiendo los ceros quedara 001,002,003... 009,010,, 011 así el 10 y el 11 no quedará ordenado después del uno.
Gracias por tu pronto respuesta, sabes me parece muy bien lo que me dices de colocarle ceros a la izquierda, y creo que funcionaria pero mi pregunta es, si es posible que funcione hasta 10000 por ejemplo.
Otra cosa, me gustaría que me indicaras con una pequeña consulta como buscar el max antes convirtiendo con to_number, no harbria problemas con las letras ya que eso de colocarle la a o la b es si se diera el caso de que se repitiera por alguna causa la orden pero es poco probable, de todas maneras me gustaría que me indicaras si fuera posible como hacerlo..
Te lo agradeceré.
Buenas tardes.
Pues sería algo así
select max(to_number(nombre_campo)) +1
into :new.campo
 from nombre_tabla;
Recuerda que si la tabla no tiene ningún registro la conusta devolverá nulo y
nulo +1 = nulo
En verdad muchísimas gracias, su respuesta es perfecta, algunas cosillas que espero poder añadir yo pero gracias, en verdad,
Espero poder contar con su ayuda por cualquier aclaración o duna nueva dudad que se presente en otra cosa. Bendiciones

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas