代码之家  ›  专栏  ›  技术社区  ›  Oto Shavadze

在动态sql中生成序列新值

  •  1
  • Oto Shavadze  · 技术社区  · 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 回复  |  直到 6 年前
        1
  •  1
  •   piezol    6 年前

    你在附加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中是相同的,但语法不同)。