2012-06-29 16 views
8

次のクエリを実行して、ノードがテーブルにロードされるときに自動的にインクリメントするidを持つノードを挿入しようとしています。sqlのシーケンスエラー。シーケンス番号がここでは許可されていません

私は実行するたびにORA-02287: sequence number not allowed hereというエラーが表示されます。

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

私はこれが正常に動作し、私がしたい番号を返し

SELECT V1144ENGINE.S_PK_NODES.NEXTVAL from dual 

を実行しようとしています。

どうすればこの問題を回避できますか?私はOracle 11gを実行しています。

また、私はスプレッドシートでこれらを作成しているので、クエリがまだ1行で実行可能であっても、これを実行できるようにしたいと考えています。

答えて

22

SELECTを持っている必要はありません。単に

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

一般的に、しかし、あなたはあなたのINSERT文での値を提供している列の一覧を表示します。将来の開発者がテーブル内の列の順番を調べる必要がないように列を文書化するだけでなく、将来新しい列がテーブルに追加された場合に保護します。

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

関連するOracleのドキュメントの章では、[シーケンス疑似](http://docs.oracle.com/cd/E11882_01/server.112/e41084/pseudocolumns002.htm#SQLRF00253)です。 – user272735

関連する問題