0

2 つのテーブルsms_sentsms_sent_backupがあります

sms_sent と sms_sent_backup の形式は次のとおりです。

 -record(sms_sent, {id, text}).
  -record(sms_sent_backup, {id, text}).

sms_sent には、この値が mnesia に含まれています

1     test1

2     test2

3     test3

sms_sent_backup には、この値が mnesia に含まれています。

8     hi

9     hello

sms_sent_backup の最後の ID (値9 ) を取得する関数を開発したい。その後、 sms_sent のすべての ID を変更したい。この ID の新しい値は、前の値 + 値 9 (の最後の ID) sms_sent_backup)

つまり、sms_sent の新しい形式は次のとおりです。

10     test1

11     test2

12     test3

sms_sent_backupの最後のキーを取得しようとしましたが、このエラーが発生しました

 1> model:testkey().
** exception exit: {aborted,no_transaction}
     in function  mnesia:abort/1

私はこの関数でテストします:

testkey()->
    LastKey = mnesia:last(sms_sent_backup).

しかし、 sms_sent_backup にはキーが含まれていますが、順序どおりではないと言いたいです

たとえば、sms_sent_backupには次の値が含まれます。

    8     hi

    9     hello

    11     hi1

    10     hello1

だから私はこの値を持つ必要があります: テーブル sms_sent_backupから11

4

1 に答える 1

0

これを行うには複数の方法があります

  1. sms_sent_backupテーブルのタイプがordered_setの場合は、次のように実行できますLastKey = mnesia:last(sms_sent_backup).。これにより、最後のキー値が得られます。後で、新しいレコードを挿入しながらLastKey+1を実行できます。

  2. 各挿入中に、キーの値をローカル状態に保存し、次のレコードの挿入に使用します。初めて、mnesia:foldlを実行して最大のものを見つけることができます。

  3. を使用して独自のmnesiaカウンターテーブルを作成しmnesia:create_table(my_auto_inc,[{type,set}]).ます。バックアップテーブルへの挿入中NextKey = mnesia:dirty_update_counter(my_auto_inc,lastrec,1).に、新しいレコードの挿入に使用できる操作を実行できます。

于 2013-02-19T17:29:23.623 に答える