oracle - 如何将 Oracle DB 中的所有序列重置为值 0?

标签 oracle sequence reset

我想将所有序列重置为 0。这在某种程度上不起作用。能说说为什么吗?

create or replace
procedure reset_seq( p_seq_name in varchar2 )
is
    l_val number;
begin
    execute immediate
    'select ' || p_seq_name || '.nextval from dual' INTO l_val;

    execute immediate
    'alter sequence ' || p_seq_name || ' increment by -' || l_val || 
                                                          ' minvalue 0';

    execute immediate
    'select ' || p_seq_name || '.nextval from dual' INTO l_val;

    execute immediate
    'alter sequence ' || p_seq_name || ' increment by 1 minvalue 0';
end;
/

该脚本来自堆栈溢出,适用于单个序列。

begin
for i in (select sequence_name from dba_sequences where sequence_name like '%SEQ_PR%') LOOP
execute immediate 'reset_seq('||i.sequence_name||')';
end loop;
end;
/

这是我自己写的:)

错误报告 - ORA-00900: 无效的 SQL 语句 ORA-06512: 在第 3 行 00900. 00000 - “无效的 SQL 语句”

最佳答案

您不需要动态 SQL。

begin
for i in (select sequence_name from dba_sequences where sequence_name like '%SEQ_PR%') LOOP
  reset_seq(i.sequence_name);           --> this is just fine
end loop;
end;
/

示例(我使用 USER_SEQUENCES 代替):

SQL> select seq_pr1.nextval from dual;

   NEXTVAL
----------
         9

SQL> select seq_pr2.nextval from dual;

   NEXTVAL
----------
         8

SQL> begin
  2  for i in (select sequence_name from user_sequences where sequence_name like '%SEQ_PR%') LOOP
  3    reset_seq(i.sequence_name);
  4  end loop;
  5  end;
  6  /

PL/SQL procedure successfully completed.

SQL> select seq_pr1.nextval from dual;

   NEXTVAL
----------
         1

SQL> select seq_pr2.nextval from dual;

   NEXTVAL
----------
         1

SQL>

关于oracle - 如何将 Oracle DB 中的所有序列重置为值 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54477885/

相关文章:

oracle - 列不可为空延迟

r - 如何根据 R 中超过 1 列的条件对数据帧行重新排序?

oracle - Oracle应用程序中plsql代码中的序列生成器

c++ - 如何在 ORACLE DB 的结果集中返回空字符串(使用 sys_refcursor)

python - Pandas - 计算每个 id 中的值序列

javascript - 如何创建通用的 jquery 验证和重置函数调用

r - 如何在 R 中重置 par(mfrow)

javascript - Sumo 选择删除所有索引并重置

sql - 如何在 Oracle 的循环中重复 Select 语句?

c++ - 如何在 C++ 中使用 Sobol 序列生成分布良好的正态分布?