日期:2014-05-17  浏览次数:20963 次

一个简单重建SEQUENCE的存储过程
CREATE OR REPLACE PROCEDURE EAM.PROC_RESET_SEQUENCES IS
TSQL VARCHAR(200);
CURSOR CUR_SEQ IS SELECT SEQUENCE_NAME FROM USER_SEQUENCES;
CUR_SEQ_ITEM CUR_SEQ%ROWTYPE;
BEGIN
OPEN CUR_SEQ;
LOOP
  FETCH CUR_SEQ INTO CUR_SEQ_ITEM;
  EXIT WHEN CUR_SEQ%NOTFOUND;
  TSQL := 'DROP SEQUENCE ' || CUR_SEQ_ITEM.SEQUENCE_NAME;
  EXECUTE IMMEDIATE TSQL;
  TSQL := 'CREATE SEQUENCE ' || CUR_SEQ_ITEM.SEQUENCE_NAME || ' INCREMENT BY 1 MAXVALUE 99999999999999999999';
  EXECUTE IMMEDIATE TSQL;
END LOOP;
CLOSE CUR_SEQ;
END PROC_RESET_SEQUENCES;
/

------解决方案--------------------
这是何必呢,有什么业务要用到这样的存储过程吗?
------解决方案--------------------
lz想干嘛,业务里面重建sequence不是就乱套了么
------解决方案--------------------
测试库上用的吧
既然名称放到CUR_SEQ_ITEM
那么DROP 和create语句里面的CUR_SEQ_ITEM.SEQUENCE_NAME就应该用CUR_SEQ_ITEM代替了。
------解决方案--------------------
http://topic.csdn.net/u/20111030/10/14d9cee1-6cca-41cc-85c8-867f891a00c8.html
------解决方案--------------------
做项目的时候,做库迁移的时候用,EXPDP、impdp
------解决方案--------------------
最好不要重建序列,否则所有用到序列的存储过程都会失效
最好通过修改序列负增长,达到序列重置的目的

探讨

业务需要。定时触发因为序列不能重设start,所以重建喽