テーブルの最大値から始まる Oracle シーケンスを作成するにはどうすればよいでしょうか? 質問する

テーブルの最大値から始まる Oracle シーケンスを作成するにはどうすればよいでしょうか? 質問する

特定のテーブルの最大値で始まるシーケンスを Oracle で作成しようとしています。なぜこれが機能しないのでしょうか?

CREATE SEQUENCE transaction_sequence
  MINVALUE 0
  START WITH (SELECT MAX(trans_seq_no)
     FROM TRANSACTION_LOG) 
  INCREMENT BY 1
  CACHE 20;

ベストアンサー1

PL/SQL を使用できる場合は、次を試してください (編集: Neil の xlnt の提案を組み込んで、次に高い値から開始します):

SELECT 'CREATE SEQUENCE transaction_sequence MINVALUE 0 START WITH '||MAX(trans_seq_no)+1||' INCREMENT BY 1 CACHE 20'
  INTO v_sql
  FROM transaction_log;

EXECUTE IMMEDIATE v_sql;

考慮すべきもう 1 つのポイント: CACHE パラメータを 20 に設定すると、データベースがダウンした場合にシーケンス内の最大 19 個の値が失われるリスクがあります。CACHE された値は、データベースの再起動時に失われます。シーケンスを頻繁にアクセスする場合、またはギャップをそれほど気にしない場合は、1 に設定します。

最後にもう 1 つ注意点があります。CACHE と INCREMENT BY に指定した値はデフォルトです。これらを省略しても同じ結果が得られます。

おすすめ記事