9

次のクエリを実行して、ノードがテーブルにロードされると自動インクリメントする ID を持つ多数のノードを挿入しようとしています。

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行で実行可能である場合は、非常に高く評価されます。

4

1 に答える 1

23

インナーは必要ありません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);
于 2012-06-29T19:02:15.740 に答える