|
Pervasive PSQL は次のグローバル変数をサポートしています。
グローバル変数は 2 つの @ マーク(@@)で始まります。すべてのグローバル変数は、接続ごとの変数です。データベース接続ごとにそれぞれ固有の @@IDENTITY、@@ROWCOUNT、および @@SPID 値を持ちます。
この変数は、一番最後に挿入された IDENTITY 列値(IDENTITY または SMALLIDENTITY)の値を返します。値は符号付き整数値になります。初期値はヌルです。
この変数は単一列のみ参照することができます。ターゲット テーブルに 2 つ以上の IDENTITY 列が含まれている場合、この変数の値は、テーブルの主キーとなる IDENTITY 列を参照します。このような列が存在しない場合には、この変数の値はテーブル内の最初の IDENTITY 列を参照します。
一番最後の挿入が IDENTITY 列を含まないテーブルに対して行われたものであった場合、@@IDENTITY の値はヌルに設定されます。
現在の接続でレコードが挿入されていない場合はヌルを返し、そうでない場合は、一番最後に挿入された行の IDENTITY 列の値を返します。
一番最後に挿入された行の IDENTITY 列の値が 12 の場合はその行を返し、そうでない場合は行を返しません。
最後に挿入された行の IDENTITY 値を新しい行の C2 列に挿入します。
C1 列の値が最後に挿入された行の IDENTITY 列の値より 10 大きい場合は、C1 列をこの IDENTITY 値で更新します。
C1 列の値が最後に挿入された行の IDENTITY 列の値と等しい場合は、C1 列をヌル値で更新します。
以下の例では、ストアド プロシージャを作成し、それを呼び出します。プロシージャは、最後に更新された行の IDENTITY 列の値と入力値の合計を変数 V1 に設定します。プロシージャは次に、C1 列が V1 と等しい行をテーブルから削除し、その後で何行削除されたかを示すメッセージを出力します。
CREATE PROCEDURE TEST (IN :P1 INTEGER); BEGIN DECLARE :V1 INTERGER; SET :V1 = :P1 + @@IDENTITY; DELETE FROM t1 WHERE t1.c1 = :V1; IF (@@ROWCOUNT = 0) THEN PRINT '行は削除されませんでした'; ELSE PRINT CONVERT(@@ROWCOUNT, SQL_CHAR) + ' 行が削除されました'; END IF; END; CALL TEST (@@IDENTITY)
この変数は、現在の接続で一番最後に行った操作により影響を受けた行の数を返します。値は符号なし整数になります。初期値はゼロです。
@@ROWCOUNT 変数は、INSERT、UPDATE、または DELETE ステートメント後に使用した場合にのみ有効になります。
現在の接続で直前に行った操作により影響を受けたレコードがない場合はゼロを返し、そうでない場合は、直前の操作により影響を受けた行数を返します。
CREATE TABLE t1 (c1 INTEGER, c2 INTEGER) INSERT INTO t1 (c1, c2) VALUES (100,200) INSERT INTO t1(c1, c2) VALUES (300, @@ROWCOUNT) SELECT @@ROWCOUNT
結果:
4 番目の行で、@@ROWCOUNT 変数の値は 1 になります。これは、直前の INSERT 操作が影響を与えたのは 1 行だからです。
@@IDENTITY の例も参照してください。
この変数は、Pervasive PSQL 接続のために 8 バイトの整数値を返します。この整数は時刻の値と増分カウンターの組み合わせです。この変数は Pervasive PSQL 接続をそれぞれ一意に識別するために使用できます。
@@SESSIONID が値を返すには、データベース エンジンに接続されていることが必要です。データベース エンジンへの接続が失われた場合、変数は ID を返すことができません。
この例は、26552653137523
などの整数の ID を返します。
この変数(サーバー プロセス ID)は、Pervasive PSQL 接続のシステム スレッドの ID を示す整数値を返します。
データベース エンジンへの接続が失われた場合、SPID は ID を返すことができません。代わりに、ODBC が SqlState 08S01 を返します。
この例は、402
などの整数の ID を返します。
|