获取表的最后一个值

时间:2013-02-20 11:01:12

标签: erlang

我有一个有这个记录的桌子人员:

-record(person, {id, firstname, lastname, address}).

我想开发一个函数,它将检索此表的最后一个id

我尝试使用此功能:

get_userId() ->
    Q = qlc:q([{X#person.id} || X <- mnesia:table(person)
                ]),
    case do(Q) of
        [{H}] ->
            {ok, H};
        [] ->
            {error, notfound}
    end.

我使用此代码进行测试

test()->
    case get_userId() of
         {ok, H}->io:format("~s~n",[H]);

         [] ->
            {error, notfound}
     end.

但我在进行测试时遇到错误

2> model:test().
** exception error: no case clause matching [{238},
                                             {82},
                                             {76},
                                             {257},
                                             {141},
                                             {2},
                                             {315},
                                             {336},
                                             {275},
                                             {88},
                                             {326},
                                             {211},
                                             {81},
                                             {333},
                                             {351},
                                             {214},
                                             {64},
                                             {265},
                                             {210},
                                             {90},
                                             {302},
                                             {98},
                                             {212},
                                             {197},
                                             {194},
                                             {132},
                                             {226},
                                             {3},
                                             {...}|...]
     in function  model:get_userId/0
     in call from model:test/0

1 个答案:

答案 0 :(得分:1)

问题是从do(Q)返回的值是包含许多元素的列表。您会在错误报告中看到它们。但是,与此值匹配的模式仅匹配带有一个元素的列表[{H}],没有元素的列表,空列表[]。因此,如果没有任何子句匹配,则会出现case_clause错误。