2012-06-29 14 views
8

Estoy tratando de ejecutar la siguiente consulta para insertar una cantidad de nodos con una identificación que se autoincrementa a medida que los nodos se cargan en la tabla.Sequence error in sql. No se permite el número de secuencia aquí

Sin embargo me sale el error, ORA-02287: sequence number not allowed here cada vez que lo ejecuto.

INSERT INTO V1144Engine.T_NODES VALUES 
    (
    (SELECT V1144ENGINE.S_PK_NODES.NEXTVAL FROM dual), 
    1, 
    'Chemistry of Life', 
    0,1, 
    SYSDATE, 
    NULL, 
    'CON.3.1', 
    NULL 
); 

He intentado funcionar

SELECT V1144ENGINE.S_PK_NODES.NEXTVAL from dual 

Esto funciona bien y devuelve el número que yo quiero.

¿Cómo puedo evitar esto? Me estoy ejecutando en Oracle 11g.

También sería muy apreciado si la consulta todavía se pudiera ejecutar en una línea, ya que estoy haciendo esto en una hoja de cálculo y me gustaría poder seguir haciéndolo.

Respuesta

22

No es necesario tener el interior SELECT. Simplemente

INSERT INTO V1144Engine.T_NODES 
    VALUES(V1144ENGINE.S_PK_NODES.NEXTVAL, 
     1, 
     'Chemistry of Life', 
     0, 
     1, 
     SYSDATE, 
     null, 
     'CON.3.1', 
     null); 

En general, sin embargo, desea enumerar las columnas que está proporcionando valores en su estado de cuenta INSERT. Eso no solo documenta las columnas para que un futuro desarrollador no tenga que buscar el orden de las columnas en una tabla, sino que lo protege si se agregan nuevas columnas a la tabla en el futuro.

INSERT INTO V1144Engine.T_NODES(<<list of columns>>) 
    VALUES(V1144ENGINE.S_PK_NODES.NEXTVAL, 
     1, 
     'Chemistry of Life', 
     0, 
     1, 
     SYSDATE, 
     null, 
     'CON.3.1', 
     null); 
+0

El capítulo correspondiente documentación de Oracle es [Secuencia pseudocolumnas] (http://docs.oracle.com/cd/E11882_01/server.112/e41084/pseudocolumns002.htm#SQLRF00253). – user272735

Cuestiones relacionadas