PostgreSQL nextval和currval在同一个查询中

时间:2013-06-21 10:20:52

标签: postgresql

我希望一次调用NEXTVAL并多次使用返回的值。但它不起作用。

假设序列seq_name现在为10(查询是独立执行的,而不是按列出的顺序执行):

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 OR 给出一个错误:NEXTVAL在当前会话中从未被调用过。 [我知道错误发生的原因:)]

有没有办法在同一个SQL语句中使用NEXTVALCURRVAL来获得相同的递增值(在本例中为11)以供重用?或者这个问题的简单解决方案?

1 个答案:

答案 0 :(得分:4)

可能的解决方案

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

这是 SQLFiddle 演示。

更新要插入代替INSERT 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