oracle序列创建以后,如果想重置序列从0开始,逐渐递增1,可以采用如下存储过程:
createorreplace
procedurereset_seq(p_seq_nameinvarchar2)
is
l_valnumber;
begin
executeimmediate
'select'||p_seq_name||'.nextvalfromdual'INTOl_val;
executeimmediate
'altersequence'||p_seq_name||'incrementby-'||l_val||
'minvalue0';
executeimmediate
'select'||p_seq_name||'.nextvalfromdual'INTOl_val;
executeimmediate
'altersequence'||p_seq_name||'incrementby1minvalue0';
end;
存储过程创建以后,调用该存储过程,参数是要重置的序列名称:
callreset_seq(‘test_seq’);
使用下面的SQL语句查询需要重置的序列:
SELECTa.sequence_name序列名称,
a.min_value序列最小值,
to_char(to_number(a.max_value))序列最大值,
a.last_number序列当前值,
CASEa.last_numberWHEN1THEN'--不需要重置;'ELSE
'CALLseq_reset('''||a.sequence_name||''');'END重置序列脚本,
'DROPSEQUENCE'||a.sequence_name删除序列脚本,
'RENAME'||a.sequence_name||'TO{newname}'重命名脚本
FROMUSER_SEQUENCESaWHEREa.last_number<>1
ORDERBYa.sequence_nameASC;
|