Pregunta SQL Oracle (Secuencias)
Necesitaria saber a traves de alguna query en Oracle, como teniendo unos registros cuyo campo clave es una secuencia, averigue si existe algún hueco en la secuencia para así aprovecharlo y no crear un código nuevo en la secuencia.
Venga, que sé que por aquí hay gente que tiene mano con el Sql :hola
Un abrazo!
Re: Pregunta SQL Oracle (Secuencias)
Buenas, Txema, investigando un poco, me he encontrado una buena respuesta, donde no recomiendan hacer lo que tú comentas, pero de todas maneras, aquí te adjunto tanto el enlace (en inglés) como la select:
http://asktom.oracle.com/pls/asktom/...:3225867788098
--Selects interesantes
--X es tu columna que hace de PK
--Select que saca todos los huecos
select x+1
from t
where NOT EXISTS ( select null
from t t2
where t2.x = t.x+1 )
--Select que saca sólo uno, y lo bloquea
select x+1
from t
where NOT EXISTS ( select null
from t t2
where t2.x = t.x+1 )
and rownum = 1
for update
Un saludo
Re: Pregunta SQL Oracle (Secuencias)
Iba a responderte pero veo que Tofolinos lo ha hecho perfectamente. La única duda de la subquery es el NULL. ¿Seguro que así funciona y no lo toma como que no existe?
Yo lo haría así, que es casi igual:
--Select que saca todos los huecos
select x+1
from t
where NOT EXISTS ( select 1
from t t2
where t2.x = t.x+1 )
Re: Pregunta SQL Oracle (Secuencias)
Acabo de encontrar un error en la Select. ¿Que pasa si hay un hueco de más de una posición? No funcionaría.
Ahora lo pienso y lo posteo.
De todos modos, ¿para qué quieres hacer eso, Chemita? No tiene utilidad y no es recomendable.
Re: Pregunta SQL Oracle (Secuencias)
¿Te vale una función? Te la hago de memoria, espero que no la cague. :sudor
FUNCTION CHEMITA RETURN NUMBER IS
CURSOR C IS
SELECT X + 1
FROM T T1
WHERE NOT EXISTS (SELECT 1 FROM T T2 WHERE T2.X = T1.X + 1);
N NUMBER;
BEGIN
OPEN C;
FETCH C INTO N;
CLOSE C;
RETURN N;
EXCEPTION
WHEN OTHERS THEN RAISE;
END CHEMITA;
Esto te devolverá la primera ocurrencia vacía. La ocupas y si la llamas otras vez te dará el suguiente.
Si tú eres el único que lanzas el script no debes tener problemas de concurrencia o bloqueos.
¿Te vale? :|
Re: Pregunta SQL Oracle (Secuencias)
Muy agradecido a ambos por la gran ayuda. Soys geniales. Me habeis dado muy buenas ideas y procuraré hoy mismo ponerlas en práctica.
Os debo una. Cualquier cosa que este en mi mano, no dudeis en pedirmelo.
Un abrazo!
Re: Pregunta SQL Oracle (Secuencias)
De nada, guapetón. ;)
Llevo trabajando, a mi pesar, en el mundo Oracle desde hace ya 6 años. No dudes en preguntar lo que sea.
Cita:
Cualquier cosa que este en mi mano, no dudeis en pedirmelo.
Esa cabeza de "Yo, Robot"....... :disimulo:lol
Re: Pregunta SQL Oracle (Secuencias)
De nada, hombre, a mandar. ;)
macasfaj, ya somos dos, yo también llevo sobre 6 años con esto de Oracle, por suerte, ahora estoy empezando a toquetear algo de java, a ver si cambio un poco de tercio!
La web en la que estaba una de las soluciones, la verdad es que siempre me ha servido muy útil, tiene muy buenas ideas y el tal Tom es un gurú de Oracle de lo mejorcito, incluso alguna vez me ha contestado preguntas directamente, y encima dando en el clavo..
La web es esta:
http://asktom.oracle.com/
saludillos oraclienses!
Re: Pregunta SQL Oracle (Secuencias)
Yo también tengo que ir pasando a Java, a ver.
Me apunto esa Web, no la conocía. Gracias. :)