私はこのテーブルを持っています:
-record(person, {id, firstname, lastname}).
-record(person_backup, {id, firstname, lastname}).
テーブル person_backup を次のように作成します。
create_backup()
mnesia:create_table(person_backup,[{disc_copies, [node()]},{attributes, record_info(fields, person)},
{record_name, person}]).
私もこの機能を持っています:
create_table_increment()->
mnesia:create_table(my_auto_inc,[{type,set}]).
person から person_backup にいくつかの変更を加えてデータを転送したい:
たとえば、テーブルの人物が次の場合:
13 asma chabani
14 nawel jirard
15 ahme bahri
テーブル person_backup は次のようになりました。
1 asma chabani
2 nawel jirard
3 ahme bahri
私はこのコードで試します:
test()->
Match=#person{_ = '_'}, %Will match all records
Fun = fun() ->
List = mnesia:match_object(Match),
lists:foreach(fun(X) ->
NextKey = mnesia:dirty_update_counter(my_auto_inc,lastrec,1),
Update = X#person_backup{id=NextKey,firstname = #person.firstname,lastname=#person.lastname},
mnesia:write(Update)
end, List)
end,
mnesia:transaction(Fun).
しかし、テストすると、次のエラーが発生します。
1> model:test().
{aborted,{combine_error,my_auto_inc,update_counter}}
私はこのコードでも試します:
test2()->
Match=#person{_ = '_'}, %Will match all records
Fun = fun() ->
List = mnesia:match_object(Match),
lists:foreach(fun(X) ->
NextKey = mnesia:dirty_update_counter(my_auto_inc,lastrec,1),
Update = X#person_backup{id=NextKey,firstname = #person.firstname,lastname=#person.lastname},
mnesia:write(Update)
end, List)
end,
mnesia:transaction(Fun).
そして、このエラーが表示されます:
model:test2().
{aborted,{{badrecord,person_backup},
[{model,'-test2/0-fun-0-',1},
{lists,foreach,2},
{mnesia_tm,apply_fun,3},
{mnesia_tm,execute_transaction,5},
{erl_eval,do_apply,5},
{shell,exprs,6},
{shell,eval_exprs,6},
{shell,eval_loop,3}]}}