Вопрос

Я просто изучаю пролог.У меня есть задача, стоящая передо мной.Мне нужно вставить некоторые данные в базу данных, такую как mysql или MSSQL, используя интерфейс Prolog ODBC.Я знаю, что есть несколько примеров предикатов (SWI-ПРОЛОГ) нравится

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

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

Мы были бы очень признательны за любую помощь или информацию.

Спасибо.

Это было полезно?

Решение

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

Примечания:

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

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

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

ПОДКЛЮЧЕНИЕ К MYSQL В PROLOG



:- 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, _, выкл.),

выводит инструкции 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 к имени псевдонима, которое понимается прологом как вызов insert для базы данных.

аналогично

emp_del(109, 1, 221),

Я думаю, остальное говорит само за себя.

Теперь следующая часть - если вам нужно подключиться к базе данных Oracle, то единственное утверждение, которое изменяется, это :



:- use_module(odbc).

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

"ваше полное имя компьютера: порт/XE", "имя пользователя", "пароль"

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

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

Другие советы

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

Что вы подразумеваете под словом "ПроЛОГ"?

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top