MatchHead在Mnesia选择

时间:2013-04-10 16:08:14

标签: erlang mnesia

我在使用mnesia:select/2时遇到了一些问题,但我认为它们与MatchHead有关。在我的代码中,我有以下记录:

-record(pet_info, {name, id, type}).

我在Mnesia表(即pet_table)中使用此记录放置了一些值。我检查过他们实际上是在使用tv:start())。

我想检索所有ID,但我的代码总是返回一个empyt列表。

这是我的代码的重要部分

F = fun() ->
            Pet = #pet_info{id = '$1', _ = '_'},
            mnesia:select(pet_table, [{Pet, [], ['$1']}])
    end,
Reply = case mnesia:transaction(F) of
            {atomic, ResultOfFun} ->
                ResultOfFun;
            {aborted, _Reason} ->
                {error, aborted}
        end,
Reply.

你能告诉我错误在哪里吗?

1 个答案:

答案 0 :(得分:0)

我找到了解决问题的方法。

该表创建为:

mnesia:create_table(pet_table, [{disc_copies, [node()]},
                                {type, set},
                                {attributes, record_info(fields, pet_info)}])

这不起作用。

另一方面,通过将表的名称更改为与其工作的记录相同的名称。

mnesia:create_table(pet_info, [{disc_copies, [node()]},
                                {type, set},
                                {attributes, record_info(fields, pet_info)}])