Спасибо за ваши ответы @ThomasH и @StarWind Software. Я мог бы найти решения, используя тот же код, который вы указали. Ну вот полная картина. Я уверен, что есть так много людей, которым нужна четкая картина связи между Прологом и Базой данных.
Примечания:
- Вы можете подключиться к любой базе данных из swi-prolog. Я использовал Oracle 10g и MySQL 5.
Прежде всего, скачайте ODBC-интерфейс SWI-Prolog с здесь .
В пакете 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>
Вы сможете подключиться к базе данных и отобразить результаты с помощью этого блока кода,
Надеюсь, это поможет.