Erlang Mnesia返回{已中止,没有事务}

Erlang Mnesia返回{已中止,没有事务},erlang,mnesia,Erlang,Mnesia,我有一个名为person的记忆表,使用以下记录定义: -record(person, {id, firstname, lastname, phone}). 该表包含以下值: 12 alen dumas 97888888 13 franco mocci 55522225 14 ali othmani 44444449 我想检索最后一个id,在我的例子中是14 我尝试: test()-> Key=mnes

我有一个名为
person
的记忆表,使用以下记录定义:

-record(person, {id, firstname, lastname, phone}).
该表包含以下值:

    12  alen     dumas      97888888
    13  franco   mocci      55522225
    14  ali      othmani    44444449
我想检索最后一个id,在我的例子中是14

我尝试:

test()->
    Key=mnesia:last(person).
但是当我测试这个函数时,我有一个错误:

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

为什么呢?对此我能做些什么?

错误消息
异常退出:{aborted,no_transaction}
非常清楚:函数应该在事务上下文中调用,而代码不是。 如果不需要事务,可以使用mnesia:dirty_last/1。
请注意,如果表格类型为ordered\u set,则mnesia:last/1和mnesia:dirty\u last/1都有意义。对于其他类型,没有定义明确的顺序。

Ppolv给出了问题的线索:您需要在事务上下文中调用mnesia函数,即mnesia“活动访问上下文”。没有测试过,但类似的东西应该会起作用:

test()->
      Getlastperson = fun() -> Key=mnesia:last(person) end,
      mnesia:activity(transaction, Getlastperson).   

我认为erlang包含一个函数,它返回同一个表中的最后一个对象
mnesia:last/1
works。你只是用错了。然而,排序并不是记忆的一个好特征。您可能不想依赖它的顺序。