Использование интерфейса Prolog ODBC - PullRequest
2 голосов
/ 14 сентября 2009

Я только учусь прологу. У меня есть задача впереди. Я должен вставить некоторые данные в базу данных, такую ​​как MySQL или MSSQL, используя Prolog ODBC INterface. Я знаю, что есть некоторые примеры предикатов ( SWI-PROLOG ), таких как

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

Я не знаю, как именно использовать эти предикаты и показать рабочий пример. Может кто-нибудь, пожалуйста, скажите мне, как именно использовать их для вставки данных в базу данных, как MySSQL или MSSQL из пролога. Может кто-нибудь сказать мне точные требования для достижения того же через ProLOG?

Любая помощь или информация будет принята с благодарностью.

Спасибо.

Ответы [ 3 ]

4 голосов
/ 23 сентября 2009

Спасибо за ваши ответы @ThomasH и @StarWind Software. Я мог бы найти решения, используя тот же код, который вы указали. Ну вот полная картина. Я уверен, что есть так много людей, которым нужна четкая картина связи между Прологом и Базой данных.

Примечания:

  1. Вы можете подключиться к любой базе данных из swi-prolog. Я использовал Oracle 10g и MySQL 5.
  2. Прежде всего, скачайте ODBC-интерфейс SWI-Prolog с здесь .

  3. В пакете ODBCProlog.dll и OracleProlog.dll есть два основных файла 'dll'

    Далее приведен пример кода, аналогичный приведенному выше. Я объясню разделы

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' имя dsn для mysql. Если вы не установили его в свою систему, вы можете скачать его с веб-сайта 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, то единственное изменение, которое изменяется:

<strong>

:- use_module(odbc).
</strong>

Остальное почти одинаково. Одна вещь, которую вы должны помнить, это то, что вам нужно использовать имя oracle INSTANCE при указании базы данных. Обычно в Oracle 10g имя экземпляра составляет 'orcl' , а для Oracle Express edition это соглашение:

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

Вы сможете подключиться к базе данных и отобразить результаты с помощью этого блока кода,

Надеюсь, это поможет.

1 голос
/ 14 сентября 2009

Существует более старый пример, встроенный в этот список рассылки (ищите 'test_1'). Я не работал с ним, но думаю, что se_greenslades - это имя экземпляра базы данных ODBC; Вы должны искать свои в вашей локальной настройке. После этого, я полагаю, вы используете обычные SQL-выражения (в odbc_prepare ?!) для вставки и обновления. Проверьте документы SWI, с которыми вы уже связаны, и поищите в Интернете базовое использование ODBC (я думаю, интерфейс SWI довольно стандартный).

Что вы имеете в виду под "ProLOG"?

0 голосов
/ 15 сентября 2009

А как насчет этого примера:

:- 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...