我們在使用 Oracle 數據庫的時候,有時候會選擇使用自增序列作為主鍵。但是在開發過程中往往會遇到一些不規范的操作,導致表的主鍵值不是使用序列插入的。這樣在數據移植的時候就會出現各種各樣的問題。當然數據庫主鍵不使用序列是一種很好的方式,但是維護的是老代碼,所以並不能去修改它。於是寫一個腳本將當前表的序列更新為主鍵最大值 + 1。
DECLARE
vnumber NUMBER;
nnumber NUMBER;
BEGIN
SELECT ((SELECT max(ana_id) FROM ANA_QUALITYSPEC_MON) -
ANAQUALITYSPECMONSEQ.nextval)
INTO vnumber
FROM dual;
IF vnumber > 0 THEN
EXECUTE IMMEDIATE 'ALTER SEQUENCE ANAQUALITYSPECMONSEQ INCREMENT BY ' ||
vnumber;
SELECT ANAQUALITYSPECMONSEQ.nextval INTO nnumber FROM dual;
EXECUTE IMMEDIATE 'ALTER SEQUENCE ANAQUALITYSPECMONSEQ INCREMENT BY 1 cache 20';
END IF;
END;
本文由個人 hexo 博客 co2fe.com 遷移
date: 2017-08-15 20:21:08