2009-08-07 20 views
8

Tengo un problema con el uso de mi secuencia dentro de una declaración SELECT.Secuencia dentro de SQL Select

SELECT 
    c.cust_name, 
    c.site, 
    customer_id_seq.nextval  
FROM 
    customer c 
WHERE 
    c.customer_id IS NULL 
ORDER BY 
    c.site_code ASC 
; 

me da un error:

  1. 00000 - "sequence number not allowed here" *Cause: The specified sequence number (CURRVAL or NEXTVAL) is inappropriate here in the statement. *Action: Remove the sequence number.

Es probablemente algo obvio que estoy haciendo mal y espero que esto será una respuesta fácil.

+0

Esto se parece a Oracle. ¿Está bien? Podría querer agregar una etiqueta. – JosephStyons

Respuesta

14

No puede usar secuencias en consultas con ORDER BY.

Retire la ORDER BY o poner en en una subconsulta:

SELECT q.*, customer_id_seq.nextval  
FROM (
     SELECT c.cust_name, 
       c.site 
     FROM customer c 
     WHERE c.customer_id IS NULL 
     ORDER BY 
       c.site_code ASC 
     ) q 
+2

Esto es correcto y una de las limitaciones. Si desea extraer secuencias para los registros en un orden particular, mueva la consulta (con el fin por) a una vista en línea y seleccione los contenidos + la secuencia de ese –

+0

'@ ChrisCM': buen punto, agregando. Gracias. – Quassnoi

+0

Gracias por la ayuda en este chicos, lo aprecio. – fras85

1

para IBM Imformix

En una instrucción SELECT, no se puede especificar NEXTVAL o CURRVAL en los siguientes contextos:

  • En la lista de proyección cuando se utiliza la palabra clave DISTINCT
  • En el dónde, Cláusulas GROUP BY, u ORDER BY
  • En una subconsulta
  • Cuando se utiliza UNION oper ator combina instrucciones SELECT
1

¿Por qué no usar rownum en lugar de ir a buscar los valores de la secuencia?

+0

Sí, me preguntaba por qué estaba usando una secuencia aquí. No parece apropiado ... –

+0

La mayoría de los clientes en la base de datos ya tienen ID, así que debo continuar desde ese número en adelante. Estoy insertando estos resultados en otra tabla. Gracias de nuevo. – fras85