特定のテーブルの最大値で始まるシーケンスを 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 に指定した値はデフォルトです。これらを省略しても同じ結果が得られます。