PEAR::DBで、直前のinsertでauto incrementされたseqを取得するのは、どうやって行うのでしょうか?

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2006/05/14 15:37:22
  • 終了:2006/05/15 15:17:33

回答(1件)

id:bonlife No.1

回答回数421ベストアンサー獲得回数752006/05/14 23:03:49

ポイント60pt

「直前のinsertでauto increment」というのはnextId()を使って行うauto incrementのことですよね。

SEQUENCEの現在値を取得する方法はPEAR::DBでは提供されていないようです。

(nextID()が実装できるのであれば、currID()などという関数で実装できそうな気がしますが…。)

直前でINSERTしたtableの列のMAXを取得することで代用できないでしょうか。

nextId()のサンプル「Example 33-1. Using nextId()」のようにauto incrementした場合、以下のようにMAXでidの最大値を取得すれば良いと思います。

(パラレルに多数の処理が実行され、INSERTとMAXを取得するSELECTの間に別のINSERTが入ってしまうと、正しい値を取得できませんのでご注意ください。)

$res =& $db->query('SELECT MAX(id) FROM myTable');

以下、参考情報です。

PostgreSQLやOracleではSEQUENCEを使えるので、CURRVAL擬似列を使えばSEQUENCEの現在値を求められますが、MySQLの場合はSEQUENCEの機能が存在しないので、SEQUENCE用にauto_incrementの列を持ったテーブルを作り、nextIDはLAST_INSERT_ID+1を使っています。auto_incrementの機能もない場合(ODBCなど)、integerの列にidという項目の値をUPDATEでid=id+1しています。

id:takeuchi_k

ありがとうございます。

2006/05/15 15:17:20

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません