动态生成序列新值 sql

Generate sequence new values in dynamic sql

create sequence seq;

create table test(
    col int
);


do $$
begin
    EXECUTE 'INSERT INTO test
    (col)
    select '||nextval('seq')||' from generate_series(1,5)' ;
end;
$$ language plpgsql

这对所有 5 行产生相同的值,似乎 nextval('seq') 只执行了一次。

问题:如何在动态 sql 中生成序列新值,因为它在正常 SQL 查询中工作?

您将 netval 的 结果 附加到字符串(这是您的动态查询)。

所以这和你这样做完全一样:

(...)
    EXECUTE 'insert into test 
    (col) 
    select 91533 from generate_series(1,5)';
(...)

相反,您必须将从序列中获取数字作为动态查询的一部分。

(...)
    EXECUTE 'INSERT INTO test
    (col)
    select nextval(''seq'') from generate_series(1,5)';
(...)

(我不知道 postgres,但这更像是一个一般的 dbms 问题。它在 Oracle 中是相同的,但语法不同)。