0

一時テーブルにいくつかの行をバッチ挿入し、後で削除する必要があります。単一のトランザクションで挿入された行を明確に識別して削除できる一意の ID が必要です。どうすればこれを達成できますか?

前もって感謝します

バッチ挿入を使用して一時テーブルにいくつかの行を配置し、それを使用してデータベース内の他のテーブルとの結合などを行い、完了後にそれらの行を削除したいと考えています。したがって、データが使用されたら、それらを削除できるはずです。この一時テーブルを同時に使用しているユーザーが多い可能性があるため、単一の挿入で挿入された行を指定する一意の ID が必要です。これにより、他のユーザーがその時点で入力した行を削除せずに単純な削除ステートメントで削除できるようになります。 「xxx」

4

2 に答える 2

2

通常のアプローチは、シーケンスを使用して事前にバッチ ID を生成し、そのバッチ ID を INSERT ステートメントに提供することです。

create sequence seq_batchid;

declare
  l_BatchID number;
begin
  /* if you're using release 10 or earlier, use 
  select seq_batchid.nextval into BatchID from dual; 
  instead */  
  l_BatchID := seq_batchid.nextval; 

  INSERT INTO temp_table(BatchID, ...) (SELECT l_BatchID, ...)
end;
于 2013-02-12T07:45:50.423 に答える
0

Oracle シーケンスが機能する場合があります。ただし、それを確認するには、達成しようとしていることについてより多くの情報を提供する必要があります。テーブル構造も教えていただけると助かります。

于 2013-02-12T07:29:26.630 に答える