【问题标题】:Records in mnesia记忆中的记录
【发布时间】:2012-12-31 06:58:00
【问题描述】:

我在 Erlang mnesia 数据库中有以下小表。当我使用如下的dirty_select函数时:

mnesia:dirty_select(user, [{#user{id = '$1', name = martin}, [], ['$1']}]).

我得到错误:

* 1: record user undefined

用户表有一行,用户 id 作为主键,'martin' 作为用户名。 当我使用以下命令时,它运行良好:

mnesia:dirty_read(user, 1).

输出是:

[{user,1,martin}]

出现上述错误的原因可能是什么?

【问题讨论】:

    标签: erlang mnesia


    【解决方案1】:

    如果您在使用 erlang shell 时遇到此错误,则需要定义记录。记录是编译时构造,shell 无权访问它们的定义。

    1> rd(user, {id, name}).
    user
    2> #user{id=1, name="foo"}.
    #user{id = 1,name = "foo"}
    3> mnesia:dirty_select(user, [{#user{id = '$1', name = martin}, [], ['$1']}]).
    ...
    

    定义记录后,dirty_read 操作将使用记录语法打印结果。

    【讨论】:

    • 您也可以使用 rf/1 从源文件中读取定义,而不是使用 rd/2 定义记录。输入帮助()。在 shell 中获取更多信息。
    • 我认为您的意思是 rr/1 用于从文件中读取记录信息!无论如何,当我在选择命令之前从文件中读取记录信息时它可以工作,但这是解决这个问题的唯一方法吗?我的意思是,每次我需要向数据库发出查询时都需要读取记录信息吗?
    • 不,您需要在每个 shell 会话或更改时读取一次记录信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-05
    • 2020-10-25
    • 2012-01-03
    • 2012-09-14
    • 2011-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多