如何在mnesia中获取多行

时间:2015-02-13 11:25:25

标签: erlang ejabberd mnesia

{atomic,[R]}={atomic,[{ios,2,"hhh"},{ios,1,"hhh"}]}

这会产生错误。我们要做的是basicaaly从mnesia表中获取多行并使用case语句来处理任何错误(如果不存在我正在搜索的记录)。无论何时有一个或零对应于搜索到的项目的元组工作正常,但是当有多个元组时,它会抛出错误。下面是完整的代码

x( Artist) ->
Query = fun() ->
        mnesia:match_object({ios,'_', Artist } )
    end,
 X=case mnesia:transaction( Query) of
    {atomic,[R]} ->
io:format("Text found in Android : ~p~n", [R#ios.txt]) ;
    {atomic,[]} ->
        Id=1000, 
        io:format("No records with ID = ~p~n", [Id]);
   {aborted,{no_exists,ios}}->
          hi        
end,
X.

1 个答案:

答案 0 :(得分:1)

如果您的请求找到多行,答案是(我猜){atomic,List}其中List是包含多个元素的列表,因此无法与[R]匹配,这是一个单一的列表元件。

您可以做的是接收列表并遍历它以打印结果;

x( Artist) ->
Query = fun() ->
        mnesia:match_object({ios,'_', Artist } )
    end,
 case mnesia:transaction( Query) of
    {atomic,[]} ->
        Id=1000, 
        io:format("No records with ID = ~p~n", [Id]);
    {atomic,L} ->
        [io:format("Text found in Android : ~p~n", [R#ios.txt]) || R <- L] ;
    {aborted,{no_exists,ios}}->
          hi        
end.