0

CRecordSet (Visual C++ 6.0) があり、ODBC を使用して postgresql 8.0.8 に接続しています。

__

問題: シリアル ID (自動インクリメント) を使用してテーブルに行を挿入し、挿入後に ID を取得したいと考えています。

このバージョンの PGsql ではサポートされていない RETURNING キーワードは使用できませんが、currval('sequence') は使用できます。

ただし、私のコードでは、デフォルトのクエリを実行してから、それをオーバーライドして currval() でクエリを実行する必要があります。

私が理解していることから、CRecordSet::Open() を再度呼び出すことによってのみクエリをオーバーライドできます。これにより、新しいセッションが作成され、currval() が役に立たなくなります。

__

では、どのように SQL をオーバーライドし、Open() ではなく Requery() を介してこの新しいクエリを実行できますか?

4

2 に答える 2

1

私が理解している限り、currval() は接続固有ではありません。新しい接続で正しい値を取得する必要があります。INSERT ステートメントの最後に「select currval()」を追加することもできます。

INSERT INTO mytable VALUES (1); SELECT currval('mysequence');
于 2009-06-05T21:49:35.633 に答える
0

currval() を使用します。これはセッション固有であり、並行性に対して安全です。構文は上記の Imraan Parker の回答にあります。

ただし、新しいセッションでは、この情報を安全に取得する方法はありません。

于 2012-09-29T03:27:56.900 に答える