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。你只是用错了。然而,排序并不是记忆的一个好特征。您可能不想依赖它的顺序。