SEQUENCEの値を変更

データをインポートしたあとにシーケンスオブジェクトを

テーブルの最大値に合わせて更新するプロシージャ。

 

DECLARE

  --スキーマ情報★都度書き換えること
  CONS_USERID   CHAR(12):=      'HOGE_SCHEMA';
  --変数
  WK_SEQ_NO     NUMBER;

BEGIN

  -------------------------------------------------------------------------------------
  -- 
  -------------------------------------------------------------------------------------

  --最新の連番の取得
  SELECT to_number(MAX(HOGE_NO)) INTO WK_SEQ_NO FROM TBL_HOGE;
  --シーケンス再作成
  EXECUTE IMMEDIATE 'DROP SEQUENCE TBL_HOGE_SEQ01';    
  EXECUTE IMMEDIATE 'CREATE SEQUENCE TBL_HOGE_SEQ01 START WITH ' || WK_SEQ_NO || ' INCREMENT BY 1 MINVALUE 1 MAXVALUE 99999 CYCLE CACHE 20 ORDER';     
  EXECUTE IMMEDIATE 'GRANT SELECT ON ' || CONS_USERID || '.TBL_HOGE_SEQ01 TO ' || SUBSTR(CONS_USERID,1,8) || 'UPDATE_ROLE';

END;
/

 

なお、Oracle18からはシーケンスのリセット機能があるため、DROP⇒CREATEはしなくてよくなる。

 

動作確認環境:Oracle 12c