在动态SQL中生成序列新值

时间:2018-07-24 17:26:13

标签: sql postgresql postgresql-9.6

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查询中一样?

1 个答案:

答案 0 :(得分:1)

您要将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中将是相同的,但是语法不同)。