2016-04-06 4 views
-3
query(USER, PWD, DB, QUERY, Columns, Rows) :- 
    atom_concat('-p', PWD, PPWD), 
    process_create(path(mysql), ['-u', USER, PPWD, '-D', DB, '-e', QUERY], [stdout(pipe(Out)),stderr(std)]), 
    read_record(Out, Columns), 
    read_records(Out, Rows). 

read_record(Out, Fields) :- 
    read_line_to_codes(Out, Codes), 
    Codes \= end_of_file, 
    atom_codes(Line, Codes), 
    atomic_list_concat(Fields, '\t', Line). 

read_records(Out, [Record|Rs]) :- 
    read_record(Out, Record), 
    !, read_records(Out, Rs). 
read_records(Out, []) :- 
    close(Out). 

assertz(Clause). 
+0

これは明らかにMySQL用に書かれています。データベース。あなたのデータベースはMySQLですか? 'USER'はあなたのdbユーザー名で、' PWD'はユーザーのパスワード、 'DB'はデータベース名、' QUERY'は実行したいクエリです。それを試すために他に何を知っておく必要がありますか?ここでの他の文脈の中の文「assertz(Clause)。」は意味を持たない。 – lurker

+0

テーブルの名前と列の名前はどこに置くのですか? – AAAA

+0

これはすべてクエリー文字列に組み込まれています。 QUERYはMySQLのクエリです。これは、表示しているコードがどのように構造化されているかを示します。 – lurker

答えて

1

あなたは本当に意味をなさない。データベースに適用することで、一連の根本的な事実があると仮定し、この述語のセットをそれと共に実行できることを望みます。

これが当てはまる場合は、プロローグで統一について読み上げる必要があります。

1

私は私のコメントで述べたように、DBはデータベース名、PWDは、ユーザーのパスワードで、USERは、データベースのユーザー名であることは明らかだが、QUERYは、実行するクエリです。 QUERYは、実行したい完全なMySQLクエリ文字列です。クエリに関するすべての情報(どのテーブル、どのフィールド、および条件を含む)がそのクエリ文字列に含まれているか。これは標準のMySQLクエリ文字列です。入力したユーザー名とパスワードには、QUERYで指定するクエリを実行するための適切な権限があることがわかります。

たとえば、mydbというMySQLデータベースがあるとします。 仮定もそのmydb表は次のようになりますどのmytableと呼ばれています:

id foo bar 
-- --- --- 
1 ick poo 
2 oh  yeah 

そして、あなたのMySQLデータベースmydbは、パスワードを持つユーザーfredfreds=passwordによってアクセス可能であることをさらに仮定します。

?- query('fred', 'freds=password', 'mydb', 'select * from mytable', Cols, Rows). 

が得られますどの:

Cols = ['id', 'foo', 'bar'] 
Rows = [['1', 'ick', 'poo'], ['2', 'oh', 'yeah']] 

するか、あなたが行うことができますが得られます

?- query('fred', 'freds=password', 'mydb', 'select id, bar from mytable limit 1', Cols, Rows). 

を次に、あなたが見せていることPrologのコードで次のクエリを行うことができます。

Cols = ['id', 'bar'] 
Rows = [['1', 'poo']] 
関連する問題