load data between prolog and db2
我只是在学习prolog。我前面有一个任务。我必须使用 Prolog ODBC 接口将一些数据插入到像 Db2 express c v9.7.1 这样的数据库中。我知道文档 swi-prolog home
中有一些示例谓词(SWI-PROLOG)
open_wordnet :-
odbc_connect('WordNet', _,
[用户(一月),
密码(xxx),
别名(wordnet),
打开(一次)
])。
我不知道如何准确地使用这些谓词并展示一个工作示例。谁能告诉我,一旦在 eclipse sdk-win 32 中建立了 prolog 和 db2 之间的连接,我该如何准确地使用这些将数据插入数据库,例如 Db2 express C v9.7.1。请写信给我,地址是邮件 intriguer@alice。它。
任何帮助或信息将不胜感激。
谢谢。
几年前我做过类似的事情;该数据库是关于学术关系/信息的,我使用了 prolog 和 ODBC(加上 xpce 用于 gui)。
首先我打开了一个到数据库的连接:
1 2 3 |
open(once) 用于避免重新连接到数据库,C 是处理程序
然后我使用这个谓词提交查询:
1 2 3 4 | %run_statement(+SQL,-Row) rs( SQL, Row):- fconn(Connection), odbc_query(Connection, SQL, Row). |
如果我想要所有解决方案,我会这样做
1 2 3 4 | %returns all solutions (findall) %rsall(+SQL,-Rows) rsall(SQL, Rows):- findall(Row,rs(SQL,Row), Rows). |
例如:
1 | rsall('SELECT * FROM institution', D). |
这个谓词准备一个 SQL 查询:
1 2 3 4 | 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 |
例如:
1 2 | 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]
这里我删除了一些东西
1 2 3 |
准备一个插入新值的语句(稍后执行):
1 |
btw odbc_query 返回具有以下格式的值 row(D1,D2,D3,....,Dn)
所以也许你必须把它转换成一个列表。
我希望上面的例子可能会有所帮助..虽然我有点忘记了细节:/
无论如何,整个项目都可以在这里找到,但是代码不是那么可读