{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.
答案 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.