Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Erlang 如何实现MNesia的动态查询?_Erlang_Mnesia - Fatal编程技术网

Erlang 如何实现MNesia的动态查询?

Erlang 如何实现MNesia的动态查询?,erlang,mnesia,Erlang,Mnesia,我正在尝试实现一个函数,为MNesia生成动态查询 例如,当使用这些参数调用函数时 dyn_query(list, person, [name, age], ["jack", 21]) 我想查询列表中姓名为“jack”且年龄为21岁的项目的记忆 我试图通过使用qlc:q(ListComprehension)和qlc:string_to_handle(“ListComprehension”)来实现这一点。第一次失败是因为编译错误,编译器不允许我使用函数代替ListEncriptions和变量代替

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

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

dyn_query(list, person, [name, age], ["jack", 21])
我想查询列表中姓名为“jack”且年龄为21岁的项目的记忆

我试图通过使用qlc:q(ListComprehension)和qlc:string_to_handle(“ListComprehension”)来实现这一点。第一次失败是因为编译错误,编译器不允许我使用函数代替ListEncriptions和变量代替记录名,如“Item#Table.Field”。第二次失败,因为erl_eval无法处理记录,并抛出了类似{undefined_record,person}的异常

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


谢谢。

查看用于查询表的匹配规范。查找表的列名(和列索引)有两种方法

匹配规范记录在中。我通常使用它,这是一种方便的解析转换,可以在编译时从看起来有趣的erlang语法创建matchspec。您可以直接在shell中使用它。

您可以尝试使用“exprecs”。现将其解释如下:

阅读描述:

转换添加了访问器函数 用于实例化、检查和 修改记录,而无需 引入编译时依赖关系 在模块之间


该页提供了示例。看看这是否有帮助。

记录是编译时构造,不能在运行时动态使用。基本上,在编译时,所有记录都转换成元组,看起来像{person,“jack”,21}。从这一点来看,当您说Item#Table.Field时,运行库无法了解您的要求。有关记录的更多详细信息,请参阅。