SEQの手動カウントアップ


DBAを持っている人がいないのに、SEQの値がずれているのをなおさねばという時(誰かが手動でデータを作った?w)。


仕方がないので無理矢理カウントアップする力技。

SQL> SELECT SEQ_HOGE.CURRVAL FROM DUAL;

   CURRVAL
----------
     65637


SQL> SELECT MAX(HOGE_NO) FROM FOO;

MAX(HOGE_NO)
-------------
       167693


SQL> DECLARE
  2   P_CNT NUMBER; --SEQの実際の値
  3   M_CNT NUMBER; --現在のレコードの値
  4   RET NUMBER;   --TMP
  5   CNT NUMBER;   --カウンタ
  6  BEGIN
  7   SELECT SEQ_HOGE.CURRVAL INTO P_CNT FROM DUAL;
  8   SELECT MAX(HOGE_NO) INTO M_CNT FROM FOO;
  9   FOR CNT IN P_CNT..M_CNT LOOP
 10     SELECT SEQ_HOGE.NEXTVAL INTO RET FROM DUAL;
 11   END LOOP;
 12  END;
 13  /

PL/SQLプロシージャが正常に完了しました


SQL> SELECT SEQ_HOGE.CURRVAL FROM DUAL;

   CURRVAL
----------
    167694


うーん、カコワルイ。