2012-12-30 40 views
0

我在Erlang mnesia數據庫中有以下小表。當我使用dirty_select功能如下:mnesia中的記錄

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

我得到的錯誤:

* 1: record user undefined 

用戶表中有一行與用戶ID作爲主鍵和「馬丁」作爲用戶名。 當我使用下面的命令,它工作得很好:

mnesia:dirty_read(user, 1). 

,輸出是:

[{user,1,martin}] 

可能是什麼上述錯誤的原因是什麼?

回答

4

如果您在使用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操作將使用記錄語法打印結果。

+0

而不是使用rd/2定義記錄,也可以使用rf/1從源文件中讀取定義。鍵入help()。在shell中獲取更多信息。 – butter71

+1

我認爲你的意思是讀取文件中的記錄信息rr/1!無論如何,它在我在select命令之前從文件讀取記錄信息時起作用,但這是解決此問題的唯一方法嗎?我的意思是,每次我需要向數據庫發出查詢時,是否需要閱讀記錄信息? – coffeMug

+1

不,您需要在每個shell會話或更改時讀取一次記錄信息。 – yetihehe