同一查询中的 PostgreSQL nextval 和 currval

ADT*_*DTC 4 postgresql

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

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

SELECT NEXTVAL('seq_name'), NEXTVAL('seq_name');
Run Code Online (Sandbox Code Playgroud)

以上将给出 11、12(我再次想要 11 和 11)。

SELECT NEXTVAL('seq_name'), CURRVAL('seq_name');
SELECT NEXTVAL('seq_name'), LASTVAL();
Run Code Online (Sandbox Code Playgroud)

以上将给出 11, 10 OR给出一个NEXTVAL在当前会话中从未调用过的错误。[我知道为什么会发生错误:) ]

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

pet*_*erm 5

一个可能的解决方案

SELECT nextval nextval1, nextval nextval2
  FROM
(
  SELECT NEXTVAL('seq_name') nextval
) q
Run Code Online (Sandbox Code Playgroud)

这是SQLFiddle演示。

UPDATE插入而不是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
Run Code Online (Sandbox Code Playgroud)

  • 当你不能用`INSERT SELECT`替换`INSERT VALUES`时,没有任何情况(至少我不知道):) (2认同)