2012-06-29 14 views
8

Tôi đang cố chạy truy vấn sau đây để chèn một số nút có id tự động tăng khi các nút được tải vào bảng.Lỗi trình tự trong sql. Số thứ tự không được phép ở đây

Tuy nhiên tôi gặp lỗi, ORA-02287: sequence number not allowed here bất cứ khi nào tôi chạy nó.

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 
); 

Tôi đã cố gắng chạy

SELECT V1144ENGINE.S_PK_NODES.NEXTVAL from dual 

này hoạt động tốt và trả về số mà tôi muốn.

Làm cách nào để giải quyết vấn đề này? Tôi đang chạy trên Oracle 11g.

Ngoài ra, nó sẽ được đánh giá cao nếu truy vấn vẫn còn chạy trên một dòng như tôi đang làm cho chúng trong một bảng tính và vẫn muốn có thể làm như vậy.

Trả lời

22

Không cần phải có bên trong SELECT. Đơn giản chỉ cần

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

Nói chung, tuy nhiên, bạn muốn liệt kê các cột mà bạn đang cung cấp các giá trị cho trong bản Tuyên Bố INSERT của bạn. Điều đó không chỉ ghi lại các cột để một nhà phát triển trong tương lai không phải tra cứu thứ tự các cột trong bảng, nó bảo vệ bạn nếu các cột mới được thêm vào bảng trong tương lai.

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

Các liên quan chương tài liệu Oracle là [Chuỗi Pseudocolumns] (http://docs.oracle.com/cd/E11882_01/server.112/e41084/pseudocolumns002.htm#SQLRF00253). – user272735