2

我只是在学习序言。我前面有一个任务。我必须使用 Prolog ODBC 接口将一些数据插入到 mysql 或 MSSQL 等数据库中。我知道有一些示例谓词(SWI-PROLOG),例如

open_wordnet :-
    odbc_connect('WordNet', _,
                 [ user(jan),
                   password(xxx),
                   alias(wordnet),
                   open(once)
                 ]).

我不知道如何准确地使用这些谓词并展示一个工作示例。谁能告诉我如何准确地使用这些将数据从 prolog 插入到 MySQL 或 MSSQL 等数据库中。谁能告诉我通过 ProLOG 实现相同目标的确切要求?

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

谢谢你。

4

3 回答 3

4

感谢您对@ThomasH 和@StarWind Software 的回复。我可以使用您指出的相同代码找出解决方案。好吧,这是一张完整的图片。我相信有很多人需要清楚地了解从 Prolog 到数据库的连接。

笔记:

  1. 您可以从 swi-prolog 连接到任何数据库。我使用了 Oracle 10g 和 MySQL 5。
  2. 首先从这里下载“SWI-Prolog”ODBC 接口。

  3. 包“ODBCProlog.dll”和“OracleProlog.dll”中有两个主要的“dll”文件

    接下来,这是与上面相同的示例代码。我将解释这些部分

PROLOG 中的 MYSQL 连接



:- use_module(oracle).
go :-
    db_open('mysql5', 'root', 'admin'),    
    db_import('EMP'('EMPID', 'EMPNAME'), emp),
    %%db_flag(show_query, _, off),

    db_query(emp(EMPID, EMPNAME), emp(EMPID, EMPNAME)),
    %% Run the query.
    get_result,
    %% Modify the database.
    %%emp_ins(109, 1, 221),
    %%test_del(109, 1, 221),
    %% Commit changes.
    db_transaction(commit),
    db_close.

%% Retrieve all records over backtracking.
get_result:-
    emp(EMPID, EMPNAME),
    write_ln([EMPID, EMPNAME]),
    fail.
get_result.

现在解释部分:

db_open('mysql5', 'root', 'admin'),

第一部分'mysql5' mysql 的dsn 名称。如果您没有在系统中安装它,您可以从 MySQL 网站下载它。下一个是用户名和密码。

db_flag(show_query, _, off),

在输出中打印 SQL 语句。评论它将阻止它输出 SQL 查询。

db_import('EMP'('EMPID', 'EMPNAME'), emp),

这里“EMP”是数据库中的实际表名,“emp”是它的别名。以这种方式创建很重要,否则它将无法正常工作。

db_query(emp(EMPID, EMPNAME), emp(EMPID, EMPNAME)),

接下来查询数据库,上面的调用 'db_query' 将采用 2 个参数。您可以像 JOIN 语句一样使用它查询两个表。如果您只使用查询一个表,则有必要提供两次相同的查询,因为此调用需要两个参数。

您是否需要在数据库中插入任何内容取消注释

emp_ins(109, 1, 221),

这个约定只不过是您将 _ins 添加到别名中,序言理解它是对数据库的插入调用。

相似地

emp_del(109, 1, 221),

我想其余的都是不言自明的。

现在,下一部分是如果您需要连接到 Oracle 数据库,那么唯一更改的语句是:



:- use_module(odbc).

其余的都差不多。您必须记住的一件事是在指定数据库时需要使用 oracle INSTANCE 名称。通常在 Oracle 10g 中,实例名称是“orcl”,而对于 Oracle Express 版本,约定是:

'your full computer name:port/XE','username','password'

您将能够使用此代码块连接到数据库并显示结果,

希望这可以帮助。

于 2009-09-23T14:50:31.870 回答
1

此邮件列表对话中嵌入了一个较旧的示例(查找“test_1”)。我没有使用过它,但我猜se_greenslades是 ODBC 数据库实例名称;您必须在本地设置中查找您的。在那之后,我猜你使用普通的 SQL 语句(在 odbc_prepare 中?!)进行插入和更新。检查您已经链接到的 SWI 文档,并在 Internet 上搜索基本的 ODBC 用法(我认为 SWI 界面非常标准)。

“ProLOG”是什么意思?

于 2009-09-14T10:21:24.230 回答
0

这个例子怎么样:

:- use_module(oracle).

go :-
    db_open('Your Database Name', 'scott', 'tiger'),
    db_import('DEPT'('DEPTNO', 'DNAME', 'LOC'), dept),
    db_import('EMP'('EMPNO', 'ENAME', 'JOB', 'MGR', 'HIREDATE', 'SAL', 'COMM', 'DEPTNO'), emp),
    %% Uncomment it, if you do not want to see SQL statements.
    %% db_flag(show_query, _, off),
    db_query(empinfo(EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO, DNAME, LOC),
        (   emp(EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO),
            dept(DEPTNO, DNAME, LOC)
        )
    ),
    get_result,
    db_close.

get_result:-
    empinfo(EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO, DNAME, LOC),
    write_ln([EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO, DNAME, LOC]),
    fail.
get_result.

取自这里:http ://www.geocities.com/SiliconValley/Bit/1116/PrologSQLex01.html

于 2009-09-15T08:26:25.190 回答