|
|
pl:prolog:prolog_lab:prolog_lab_rdbms [2009/05/11 19:24] wojnicki |
pl:prolog:prolog_lab:prolog_lab_rdbms [2019/06/27 15:50] |
====== LAB: Integracja z RDBMS ====== | |
| |
Celem laboratorium jest pokazanie możlwości integracji maszyny wnioskującej SWI Prolog z systemami zarządzania relacyjnymi bazami danych (RDBMS). | |
| |
Interackja taka jest możliwa z wykorzystaniem [[wp>ODBC]]. | |
| |
===== - Konfiguracja ODBC ===== | |
| |
Aby móc skorzystać z tzw. źródła danych ODBC, należy w domowym katalogu utworzyć plik o nazwie ''.odbc.ini'' oraz umieścić w nim poniższą treść: | |
| |
<code> | |
[prolog] | |
Description = PostgreSQL Unicode | |
Driver = PostgreSQL Unicode | |
Trace = No | |
TraceFile = | |
Database = prolog | |
Servername = borg.ia.agh.edu.pl | |
Username = | |
Password = | |
Port = 5432 | |
Protocol = 6.4 | |
ReadOnly = No | |
RowVersioning = No | |
ShowSystemTables = No | |
ShowOidColumn = No | |
FakeOidIndex = No | |
ConnSettings = | |
</code> | |
| |
Wartości pól ''Username'' oraz ''Password'' będą podane przez prowadzącego na zajęciach. | |
| |
Powyższe działąnia konfigurują połączenie z źródłem danych ODBC o nazwie ''prolog''. | |
Źródło to łączy się z systemem zarządzania relacyjnymi bazami danych PostgreSQL działającym na serwerze ''borg.ia.agh.edu.pl'', a konkretnie z bazą danych ''prolog''. | |
| |
| |
===== ODBC w SWI-Prolog ===== | |
| |
[[http://www.swi-prolog.org/pldoc/package/odbc.html|Dokumentacja]] dotycząca predykatów obsługujących połączenia ODBC z bazami danych. | |
| |
===== Połączenia ===== | |
| |
Do nawiązaywania połączenia z źródłem danych ODBC służy predykat ''odbc_connect/3''. | |
Pierwszym argumentem jest nazwa źródła danych (w poniższym przykładzie ''prolog''), drugim jest identyfikator połączenia, trzecim opcje. | |
| |
<code prolog> | |
odbc_connect('prolog', Polaczenie, | |
[open(once) | |
]). | |
</code> | |
| |
Przed zakończeniem korzystania z połączenia z źródłem danych należy wywołać predykat | |
''odbc_disconnect/1'', którego argumentem musi być identyfikator połączenia. | |
| |
<code prolog> | |
odbc_disconnect(Polaczenie). | |
</code> | |
| |
Zamiast identyfikatora połączenia można użyć synaonimu połączenia, korzystając z opcji ''alias'': | |
| |
<code prolog> | |
odbc_connect('prolog', _, | |
[ alias(prolog), | |
open(once) | |
]). | |
</code> | |
| |
Tak otwarte połączenie można zakończyć: | |
| |
<code prolog> | |
odbc_disconnect(prolog). | |
</code> | |
| |
===== Schemat Bazy Danych ===== | |
| |
Schemat bazy danych, dostępnej jako źródło danych ''prolog'' przedstawiony jest poniżej. | |
| |
<code sql> | |
CREATE TABLE klienci ( | |
idklienta varchar(10) NOT NULL, | |
haslo varchar(10) NOT NULL, | |
nazwa varchar(40) NOT NULL, | |
miasto varchar(40) NOT NULL, | |
kod char(6) NOT NULL, | |
adres varchar(40) NOT NULL, | |
email varchar(40), | |
telefon varchar(16) NOT NULL, | |
fax varchar(16), | |
nip char(13), | |
regon char(9) | |
); | |
| |
CREATE TABLE kompozycje ( | |
idkompozycji char(5) NOT NULL, | |
nazwa varchar(40) NOT NULL, | |
opis varchar(100), | |
cena numeric(7,2), | |
minimum integer, | |
stan integer | |
); | |
| |
| |
CREATE TABLE odbiorcy ( | |
idodbiorcy integer NOT NULL, | |
nazwa varchar(40) NOT NULL, | |
miasto varchar(40) NOT NULL, | |
kod char(6) NOT NULL, | |
adres varchar(60) NOT NULL | |
); | |
| |
| |
CREATE TABLE zamowienia ( | |
idzamowienia integer NOT NULL, | |
idklienta varchar(10) NOT NULL, | |
idodbiorcy integer NOT NULL, | |
idkompozycji char(5) NOT NULL, | |
termin date NOT NULL, | |
cena numeric(7,2), | |
zaplacone boolean, | |
uwagi varchar(200) | |
); | |
| |
| |
CREATE TABLE historia ( | |
idzamowienia integer NOT NULL, | |
idklienta varchar(10), | |
idkompozycji char(5), | |
wartosc numeric(7,2), | |
termin date | |
); | |
| |
</code> | |
| |
| |
===== Proste Zapytania ===== | |
| |
Zapytania można realizować korzystając z predykatu ''odbc_query/3''. | |
| |
Zapytanie zwracające jako wartości szukanych ''Nazwa'', ''Email'' wartości kolumn tabeli ''klienci''. | |
| |
<code prolog> | |
odbc_query(prolog, 'SELECT nazwa, email FROM klienci' ,row(Nazwa, Email), []). | |
</code> | |
| |
Ostatni argument ''odbc_query/4'' umożliwia przekazanie dodatkowych opcji, m.in. konwersje typów pomiędzy SQL a Prologiem (patrz [[http://www.swi-prolog.org/pldoc/doc_for?object=section(3%2c '2.2'%2c swi('%2fdoc%2fpackages%2fodbc.html'))|dokumentacja]]). | |
| |
===== Zapytania ===== | |
| |
Ile można kupić czekoladek za 100 zł. | |
| |
| |