一个简单重建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
------解决方案--------------------最好不要重建序列,否则所有用到序列的存储过程都会失效
最好通过修改序列负增长,达到序列重置的目的