SCOPE_IDENTITY を使用して、INSERT がすべて 1 回の実行で発生した直後に、特定の INSERT に対して生成された ID を取得する SQL Server 用の生の SQL クエリがいくつかあります…</p>
INSERT into Batch(
BatchName,
BatchType,
Source,
Area
) Values (
@strBatchName,
@strType,
@strSource,
@intArea
);
SELECT SCOPE_IDENTITY() BatchID;
質問は:
Oracle データベースでこれを行う最善の方法は何ですか?
これは、標準 SQL を介して Oracle で実行できますか、またはこれを切り替えてストアド プロシージャを使用し、ストアド プロシージャの本体に同様のものを配置する必要がありますか?
ストアド プロシージャである必要がある場合、最後に生成されたシーケンス番号を取得するための事実上の標準的な方法は何ですか。複数のスレッドで実行が重複する可能性があることを考慮して、このメカニズムは正しい生成された ID を取得し、必ずしも最後に生成された絶対的な ID ではありません。
2 つが同時に実行される場合、それぞれがそれぞれの呼び出しから生成された正しい ID を返す必要があります。呼び出しがマルチスレッド化されているため、SQL Server の「@@IDENTITY」を使用していないことに注意してください。
プラットフォーム間で管理する方がはるかに簡単なので、可能であれば生のSQLとして保持したいと思います(DBMS識別タグで区切られた各プラットフォームのSQLブロックを含む単一のファイル)。ストアド プロシージャは、私が管理するのに少し手間がかかりますが、それが唯一の方法である場合は、そのようにすることもできます。