我正在尝试实现一个为 MNesia 生成动态查询的函数。

例如,当使用这些参数调用函数时;

dyn_query(list, person, [name, age], ["jack", 21])

我想查询 MNesia 到 列表 项目,其 名称 是“jack”, 年龄 person 表中是 21。

我试图通过使用 qlc:q(ListComprehension) 和 qlc:string_to_handle("ListComprehension") 来实现这一点。由于编译错误第一次失败,编译器没有让我使用函数而不是 ListComprehentions 和变量而不是像“Item#Table.Field”这样的记录名称。第二次失败,因为 erl_eval 无法处理记录并抛出像 {undefined_record, person} 这样的异常。

我应该使用哪种方法?我怎样才能解决这些问题?或者我应该使用不同的方法?

谢谢。

最佳答案

查看 mnesia:select/1 用于对表进行查询的匹配规范。 mnesia:table_info/2 用于找出表的列名(和列索引)。

匹配规范记录在 ERTS user guide on match specifications 中。我通常求助于使用 ets:fun2ms/1,这是一个方便的解析转换,可以在编译时从 erlang-looking 有趣的语法创建 matchspec。您可以直接从 shell 中使用它。

关于erlang - 如何为 MNesia 实现动态查询?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3021510/

10-13 06:41