miércoles, 18 de enero de 2012

ORA-02287: sequence number not allowed here

Comencemos por la causa del mismo., curre cuando intentamos utilizar una secuencia donde no está permitido hacerlo.

Para ser un poco más explícitos, NO podemos utilizar secuencias en los siguientes casos:

- Dentro de una sentencias SELECT:

* En la claúsula WHERE

* En las claúsulas GROUP BY u ORDER BY
* En una claúsula DISTINCT
* Utilizando UNION o INTERSECT o MINUS
* En un Sub-Query

- En una VISTA o SNAPSHOT
- En una condición de DEFAULT o CHECK de una tabla

(Cabe aclarar que existen más excepciones pero que estas son las mas representativas)

Algunas posibles soluciones para nuestro problema serian:

- Si necesitamos utilizar nuestra secuencia en un WHERE o bien un ORDER BY o un Sub-Query, lo que hacemos es asignarla a una variable previa y dicha variable es la que podemos utilizar en los caso mencionados.

- Si necesitamos utilizar la secuencia para ser insertada tras la creación de las filas de una tabla lo que podemos hacer es utilizar un trigger "before insert" para que realice el trabajo.

- Si quisiéramos una secuencia en una vista podríamos crear la mismas sin la secuencia y luego al momento de llamarla utilizarla (ej: select a, b, "secuencia" from "nuestra vista").

- Si quisiéramos usar la secuencia en un query con una DISTINCT lo que podemos hacer es utilizar este en un Sub-Query y la secuencia en el query principal

Espero que les haya servido

Saludos!
Gondalf.

No hay comentarios:

Publicar un comentario