Type of Table
、およびレコードで更新するフィールドに大きく依存します。残念ながら、あなたは私たちにあなたのテーブルについてのいくつかの詳細を教えてくれませんでした。たとえば、特定のフィールドに基づいて複数のレコードを更新しているとします。
テーブルtransaction
名としてこの単語を使用することはお勧めしません。しかし、学習の目的で、続けましょう。擬似コード:
次のすべてのレコードを取得します:Obj#transaction.field == Key
次に、Foreachで次のように設定します。Obj#transaction.field == Key2
次に、この例に基づいて検討します
Query List Comprehension
-include_lib( "stdlib / include / qlc.hrl")。
select(Q)->
ケースmnesia:is_transaction()of
false->
F = fun(QH)-> qlc:e(QH)end、
mnesia:activity(transaction、F、[Q]、mnesia_frag);
true-> qlc:e(Q)
終わり。
gen_update(FilterFun、UpdateFun)->
A = select(qlc:q([R || R <-mnesia:table(transaction)、FilterFun(R)== true]))、
[UpdateFun(X)|| X <-A]、
わかった。
update_by_key(OldKey、NewKey)->
FilterFun = fun(#transaction {key = OldKey})-> true;
(_)-> false
終わり、
UpdateFun = fun(T)->
NewT = T#transaction {key = NewKey}、
mnesia:write(NewT)、
わかった
終わり、
gen_update(FilterFun、UpdateFun)、
わかった。
それはそれをする必要があります。関数を見てください:
gen_update
。私は以前
funs
、任意の形式に従ってフィルタリングする汎用オブジェクトと、更新を行う別のオブジェクトを作成していました。
fun
これで、引数としてレコードを受け取る限り、任意の選択肢を作成できます。この方法は
set
、実行している内容によっては、タイプのテーブルに適用できる場合があることに注意してください。で更新する場合は
primary key
、いくつかの新しい変更を加える必要があります。