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
うーん、カコワルイ。