2

person次のレコード定義を使用して、という名前の Mnesia テーブルがあります。

-record(person, {id, firstname, lastname, phone}).

表には次の値が含まれます。

    12  alen     dumas      97888888
    13  franco   mocci      55522225
    14  ali      othmani    44444449

私の場合は 14である最後のIDを取得したい。

私は試してみます:

test()->
    Key=mnesia:last(person).

しかし、この関数をテストすると、次のエラーが発生します。

** exception exit: {aborted,no_transaction}
     in function  mnesia:abort/1

何故ですか?私はそれについて何ができますか?

4

2 に答える 2

4

エラーメッセージexception exit: {aborted,no_transaction}は非常に明確です。関数はトランザクションコンテキストで呼び出されることが期待されていますが、コードは呼び出されません。トランザクションが必要ない場合は、代わりにmnesia:dirty_last/1を使用できます。テーブルタイプがordered_setの場合、mnesia:last / 1とmnesia:dirty_last/1の両方が意味を持つことに注意してください。他のタイプの場合、明示的な順序は定義されていません。

于 2013-02-20T19:07:00.237 に答える
1

Ppolv は問題の手がかりを与えてくれます: トランザクションのコンテキスト、つまり mnesia 'アクティビティ アクセス コンテキスト' で mnesia 関数を呼び出す必要があります。テストされていませんが、次のようなものが機能するはずです:

test()->
      Getlastperson = fun() -> Key=mnesia:last(person) end,
      mnesia:activity(transaction, Getlastperson).   
于 2014-11-15T20:25:21.010 に答える