2013-02-20 2 views
1

У меня есть таблица Mnesia называется person, используя следующее определение записи:возвращает Mnesia {прервана, no_transaction}

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

Таблица содержит следующие значения:

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

Я хочу, чтобы извлечь последний id, который в моем случае .

Стараюсь с:

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

, но когда я проверить эту функцию у меня есть эта ошибка:

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

Почему это? Что я могу сделать с этим?

+0

Я думаю, что Эрл содержит функцию, которая возвращает последний объект в той же таблице –

+0

'Mnesia: последние/1' работ. Вы просто использовали это неправильно. Однако упорядочение не является хорошей особенностью мнезии. Вы не можете рассчитывать на его заказ. –

ответ

3

Сообщение об ошибке exception exit: {aborted,no_transaction} совершенно очевидно: ожидается, что функция будет вызвана в контексте транзакции, а ваш код - нет. Если вам не нужна транзакция, вы можете использовать mnesia: dirty_last/1 вместо этого. Обратите внимание, что как mnesia: last/1, так и mnesia: dirty_last/1 имеют смысл, если тип таблицы упорядочен_set. Для других типов не определен явный порядок.

1

Ppolv дает ключ к решению проблемы: вам нужно вызвать функции mnesia в контексте транзакции, то есть контекста доступа к деятельности mnesia. Не тестировал, но что-то вроде этого должно работать:

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