1

1 つのステージング テーブルからレコードを取得し、Oracle 10g の実際のトランザクション テーブルに挿入する単一の挿入コマンドがあります。この挿入中に、ステージング領域に存在する値に関係なく、トランザクション テーブルの 1 つの列の値をインクリメントしたいと考えています。

SQLプログラミングで利用できるそのような「i++」の種類のオプションはありますか? 実際のトランザクション テーブルから最大値を取得してインクリメントできるようにします。

または、それを解決する別の方法はありますか?

4

1 に答える 1

0

シーケンスが使えます!シーケンスの詳細については、Oracleのドキュメントを参照してください。

シーケンスは、指定されたシーケンスで新しい番号を生成する独立したデータベースオブジェクトです。

例えば、あなたが単に言うなら

CREATE SEQUENCE tblid_seq;

tblid_seq1から始まり、1ずつ増加する、という名前の新しいシーケンスが作成されます。

nextvalシーケンスでcurrvalメソッドを使用できます。

たとえば、を使用するtblid_seq.nextvalたびに、増分値が取得されます。を使用するtblid_seq.currvalと、によって抽出された最後の値が取得されtblid_seq.nextvalます。

それの使い方?単純。SQLの場合:

INSERT INTO (tblid, val1) VALUES (tblid_seq.nextval, 'Some value');

PL / SQLトリガー、プロシージャ、関数、または匿名ブロックでは、以下を使用できます。

var1 := tblid_seq.nextval; -- var1 is of INTEGER data type.

シーケンスは、シーケンスで生成された値を使用しているテーブルを含め、他のデータベースオブジェクトから独立しています。シーケンスもトランザクションから独立しているため、シーケンス値をロールバックすることはできません。したがって、生成された値にギャップがあっても問題がない場合は、シーケンスを使用してください。

于 2013-03-15T09:15:25.320 に答える