Mnesia返回{aborted,no_transaction}

时间:2013-02-20 16:25:34

标签: erlang mnesia

我有一个名为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

为什么?我该怎么办呢?

2 个答案:

答案 0 :(得分:3)

错误消息exception exit: {aborted,no_transaction}非常清楚:该函数应该在事务上下文中调用,而您的代码不是。 如果您不需要事务,则可以使用mnesia:dirty_last / 1。 请注意,如果表类型为ordered_set,则mnesia:last / 1和mnesia:dirty_last / 1都有意义。对于其他类型,没有明确的订单定义。

答案 1 :(得分:1)

Ppolv给出了问题的线索:您需要在交易的上下文中调用mnesia函数,即mnesia'活动访问上下文'。没有测试它,但这样的东西应该工作:

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