动态生成序列新值 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 中是相同的,但语法不同)。
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 中是相同的,但语法不同)。