загрузить данные между прологом и db2 - PullRequest
2 голосов
/ 14 февраля 2010

Я только учусь прологу. У меня есть задача впереди. Я должен вставить некоторые данные в базу данных, такую ​​как Db2 express c v9.7.1, используя Prolog ODBC INterface. Я знаю, что есть несколько примеров предикатов (SWI-PROLOG) по документации swi-prolog home

open_wordnet: - odbc_connect ('WordNet', _, [пользователь (январь), пароль (ххх), псевдоним (WordNet), открытые (один раз) ]). Я не знаю, как именно использовать эти предикаты и показать рабочий пример. Может кто-нибудь, пожалуйста, скажите мне, как именно я могу использовать их для вставки данных в базу данных, такую ​​как Db2 express C v9.7.1, когда установил соединение между prolog и db2 из eclipse sdk-win 32. Напишите мне по адресу mail intriguer @ alice. это.

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

Спасибо.

1 Ответ

1 голос
/ 29 апреля 2011

несколько лет назад я сделал что-то подобное;база данных была об академических отношениях / информации, и я использовал пролог и ODBC (плюс xpce для графического интерфейса).

сначала я открыл соединение с базой данных:

fconn(C):-
    odbc_connect('academia_info', C, [user(academia_info_user), 
                  password(secret), alias(academia_info), open(once)]).

открыто (один раз)используется, чтобы избежать повторного подключения к БД, а C является обработчиком

, затем я использовал этот предикат для отправки запросов:

%run_statement(+SQL,-Row)
rs( SQL, Row):-
   fconn(Connection),
   odbc_query(Connection, SQL, Row).

и, если мне нужны все решения, я сделал это

%returns all solutions (findall)
%rsall(+SQL,-Rows)
rsall(SQL, Rows):-
    findall(Row,rs(SQL,Row), Rows).

например:

rsall('SELECT * FROM institution', D).

этот предикат подготавливает запрос SQL:

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

например:

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]

здесь я удаляю некоторые вещи

delete(ID,Table):-
    swritef(S,'DELETE FROM %t WHERE id = ?', [Table]),
    prep(S, [integer], _ , [ID]).

готовим оператор для вставки новых значений (он выполняется позже):

prep('INSERT INTO professor (id, title) VALUES (?,?)', [integer, varchar], _, [ID,T]).

Кстати, odbc_query возвращает значение со следующей строкой формата (D1, D2, D3, ...., Dn), поэтому, возможно, вам придется преобразовать его в список.

Я надеюсь, чтоприведенные выше примеры могут помочь ... хотя я и забыл подробности: / в любом случае, весь проект можно найти здесь но код яне так читабельно

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