4

NEXTVAL一度呼び出して、返された値を複数回使用することを望んでいました。しかし、うまくいきません。

シーケンスが現在 10 であると仮定しますseq_name(クエリはリストされた順序ではなく、個別に実行されます)。

SELECT NEXTVAL('seq_name'), NEXTVAL('seq_name');

上記は11、12を与えます(11と11が再び必要です)。

SELECT NEXTVAL('seq_name'), CURRVAL('seq_name');
SELECT NEXTVAL('seq_name'), LASTVAL();

上記は、11、10 またはNEXTVAL現在のセッションで呼び出されなかったエラーを返します。[エラーが発生する理由はわかっています:) ]

NEXTVAL同じ SQL ステートメントでandを使用CURRVALして、同じ増分値 (この場合は 11) を再利用するために使用する方法はありますか? または、この問題の簡単な解決策はありますか?

4

1 に答える 1

6

可能な解決策

SELECT nextval nextval1, nextval nextval2
  FROM
(
  SELECT NEXTVAL('seq_name') nextval
) q

これがSQLFiddle のデモです。

UPDATEINSERT INTO ... VALUES使用する代わりに挿入するにはINSERT INTO ... SELECT

INSERT INTO Table1 (col1, col2, col3, col4, ...) 
SELECT nextval, nextval, 5, 'Text value', ...
  FROM
(
  SELECT NEXTVAL('seq_name') nextval
) q
于 2013-06-21T10:28:43.453 に答える