分享一个简单回滚seq的过程

xiaoxiao1984 2009-09-11 07:12:29

CREATE OR REPLACE PROCEDURE reset_sequence(v_seq_name_in IN VARCHAR2,
v_init_value_in IN NUMBER) IS
v_seq_curr_value NUMBER;
v_increment_by NUMBER;
v_min_value NUMBER;
v_last_value NUMBER;
BEGIN
-- get seq min value and increment
SELECT min_value, increment_by
INTO v_min_value, v_increment_by
FROM user_sequences
WHERE sequence_name = upper(v_seq_name_in);
-- get seq current value
EXECUTE IMMEDIATE 'select ' || v_seq_name_in || '.nextval from dual'
INTO v_seq_curr_value;
-- rollback seq
IF (v_init_value_in > v_min_value)
THEN
v_seq_curr_value := v_init_value_in - v_seq_curr_value - 1;
ELSIF (v_init_value_in = v_min_value)
THEN
v_seq_curr_value := v_init_value_in - v_seq_curr_value;
ELSE
v_seq_curr_value := v_min_value - v_seq_curr_value;
END IF;
EXECUTE IMMEDIATE 'alter sequence ' || v_seq_name_in || ' increment by ' ||
v_seq_curr_value || ' nocache';
EXECUTE IMMEDIATE 'select ' || v_seq_name_in || '.nextval from dual'
INTO v_seq_curr_value;
-- check if it is less than min value
LOOP
EXECUTE IMMEDIATE 'select ' || v_seq_name_in || '.currval from dual'
INTO v_last_value;
EXIT WHEN v_last_value >= v_init_value_in - v_increment_by;
EXECUTE IMMEDIATE 'select ' || v_seq_name_in || '.nextval from dual'
INTO v_last_value;
END LOOP;
EXECUTE IMMEDIATE 'alter sequence ' || v_seq_name_in || ' increment by ' ||
v_increment_by || ' cache 20';
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line(SQLERRM);
END reset_sequence;
...全文
120 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
雨青 2009-09-19
  • 打赏
  • 举报
回复
Mark...
freeupman 2009-09-18
  • 打赏
  • 举报
回复
学习了 果然是高手
-无-为- 2009-09-16
  • 打赏
  • 举报
回复
学习了

SELECT min_value, increment_by
INTO v_min_value, v_increment_by
FROM user_sequences
WHERE sequence_name = upper(v_seq_name_in);
zhaoweiting0609 2009-09-13
  • 打赏
  • 举报
回复
问一下,用save point,和rollback point可不可以回滚seq?
zhaoweiting0609 2009-09-13
  • 打赏
  • 举报
回复
mark
yubin88 2009-09-13
  • 打赏
  • 举报
回复
学习
jiaruimin11 2009-09-12
  • 打赏
  • 举报
回复
up
小灰狼W 2009-09-11
  • 打赏
  • 举报
回复
那是,占完沙发才有闲工夫回头
shiyiwan 2009-09-11
  • 打赏
  • 举报
回复
1,2都被你抢了
小灰狼W 2009-09-11
  • 打赏
  • 举报
回复
坐个沙发,哈``
小灰狼W 2009-09-11
  • 打赏
  • 举报
回复
记录学习

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧