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查询中一样?
答案 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中将是相同的,但是语法不同)。