在prolog和db2之间加载数据

在prolog和db2之间加载数据,prolog,Prolog,我只是在学序言。我面前有一项任务。我必须使用Prolog ODBC接口将一些数据插入到数据库中,如Db2 express c v9.7.1。通过SWI PROLOG home文档,我知道有一些示例谓词(SWI-PROLOG) 打开wordnet: odbc_connect('WordNet',_, [用户(一月), 密码(xxx), 别名(wordnet), 打开(一次) ]). 我不知道如何准确地使用这些谓词并显示一个工作示例。有谁能告诉我,一旦我将prolog和Db2之间的连接从eclip

我只是在学序言。我面前有一项任务。我必须使用Prolog ODBC接口将一些数据插入到数据库中,如Db2 express c v9.7.1。通过SWI PROLOG home文档,我知道有一些示例谓词(SWI-PROLOG)

打开wordnet: odbc_connect('WordNet',_, [用户(一月), 密码(xxx), 别名(wordnet), 打开(一次) ]). 我不知道如何准确地使用这些谓词并显示一个工作示例。有谁能告诉我,一旦我将prolog和Db2之间的连接从eclipse sdk win 32中删除,我该如何准确地使用它们将数据插入到Db2 express C v9.7.1之类的数据库中。按地址给我写信intriguer@alice.it.

任何帮助或信息都将不胜感激


谢谢。

几年前我做过类似的事情;数据库是关于学术关系/信息的,我使用prolog和ODBC(加上图形用户界面的xpce)

首先,我打开了与数据库的连接:

fconn(C):-
    odbc_connect('academia_info', C, [user(academia_info_user), 
                  password(secret), alias(academia_info), open(once)]).
open(once)用于避免重新连接到db,C是一个处理程序

然后我使用这个谓词提交查询:

%run_statement(+SQL,-Row)
rs( SQL, Row):-
   fconn(Connection),
   odbc_query(Connection, SQL, Row).
如果我想要所有的解决方案,我就这么做了

%returns all solutions (findall)
%rsall(+SQL,-Rows)
rsall(SQL, Rows):-
    findall(Row,rs(SQL,Row), Rows).
例如:

rsall('SELECT * FROM institution', D).
prep('UPDATE professor SET title = ? WHERE id IN (SELECT professor.id FROM professor, researcher, "hadPosition" WHERE professor.id = researcher.id AND professor.id = "hadPosition".researcher_id AND hadPosition.title = ? AND professor.title=? GROUP BY professor.id HAVING sum("hadPosition".end_date - "hadPosition".start_date) > ?*365 )',
         [varchar,varchar,varchar, integer],_, [MT, LT,LT, Y]).
此谓词准备SQL查询:

prep(SQL, Type, Row,Values):-
    fconn(Connection),
    odbc_prepare(Connection, SQL, Types,Q), %uses the types of the parameters to prepare Q
    odbc_execute(Q,Values,Row). %executes Q by replacing the parameters with their values
例如:

rsall('SELECT * FROM institution', D).
prep('UPDATE professor SET title = ? WHERE id IN (SELECT professor.id FROM professor, researcher, "hadPosition" WHERE professor.id = researcher.id AND professor.id = "hadPosition".researcher_id AND hadPosition.title = ? AND professor.title=? GROUP BY professor.id HAVING sum("hadPosition".end_date - "hadPosition".start_date) > ?*365 )',
         [varchar,varchar,varchar, integer],_, [MT, LT,LT, Y]).
其中?s被值[MT,LT,LT,Y]替换

这里我删除了一些东西

delete(ID,Table):-
    swritef(S,'DELETE FROM %t WHERE id = ?', [Table]),
    prep(S, [integer], _ , [ID]).
准备语句以插入新值(稍后执行):

顺便说一句,odbc_查询返回具有以下格式行的值(D1、D2、D3、…、Dn) 因此,您可能需要将其转换为列表

我希望上面的例子能有所帮助。。虽然我有点忘记了细节:/ 无论如何,整个项目都可以找到,但代码不是那么可读