Both sides previous revision
Poprzednia wersja
Nowa wersja
|
Poprzednia wersja
|
pl:prolog:prolog_lab:prolog_lab_rdbms [2009/05/12 18:57] wojnicki styl |
pl:prolog:prolog_lab:prolog_lab_rdbms [2019/06/27 15:50] (aktualna) |
====== LAB: Integracja z RDBMS ====== | ====== 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). | Celem laboratorium jest pokazanie możlwości integracji maszyny wnioskującej SWI Prolog z systemami zarządzania relacyjnymi bazami danych (RDBMS). |
</code> | </code> |
| |
Wartości pól ''Username'' oraz ''Password'' będą podane przez prowadzącego na zajęciach. | **Uwaga**: |
| - Wartości pól ''Username'' oraz ''Password'' będą podane przez prowadzącego na zajęciach. |
| - Prawa dostępu do pliku ''.odbc.ini'' powinny być ustawione na 600. |
| |
Powyższe działania konfigurują źródło danych ODBC o nazwie ''prolog''. | Powyższe działania konfigurują źródło danych ODBC o nazwie ''prolog'' (''[prolog]''). |
Źródło to jest skojarzone z systemem zarządzania relacyjnymi bazami danych PostgreSQL działającym na serwerze ''borg.ia.agh.edu.pl'', a konkretnie z bazą danych o nazwie ''prolog''. | Źródło to jest skojarzone z systemem zarządzania relacyjnymi bazami danych PostgreSQL działającym na serwerze ''borg.ia.agh.edu.pl'', a konkretnie z bazą danych o nazwie ''prolog'' (''Database''). |
| |
| **Ćwiczenie** |
| |
| Sprawdź, czy źródło danych jest poprawnie skonfigurowane. W tym celu uruchom narzędzie ''isql'' umożlwiające wykonywanie zapytań w języku SQL na źródle ODBC: |
| |
| <code> |
| isql prolog |
| </code> |
| |
| Jeżeli połączenie powiodło się zostanie wyświetlony stosowny komunikat: |
| <code> |
| ~$ isql prolog |
| +---------------------------------------+ |
| | Connected! | |
| | | |
| | sql-statement | |
| | help [tablename] | |
| | quit | |
| | | |
| +---------------------------------------+ |
| SQL> |
| </code> |
| |
| Następnie wykonaj proste zapytanie np. ''SELECT nazwa FROM kompozycje;''. Rezultat powinien być zbliżony do tego poniżej: |
| |
| <code> |
| SQL> SELECT nazwa FROM kompozycje; |
| +-----------------------------------------+ |
| | nazwa | |
| +-----------------------------------------+ |
| | Bukiet 1 | |
| | Bukiet 2 | |
| | Bukiet 3 | |
| | Kosz 1 | |
| | Kosz rozyczek | |
| | Kosz mix | |
| | Kompozycja suszona | |
| | Koszyk gozdzikowy | |
| | Hiacynty w koszyku | |
| | Biala azalia | |
| | Rozowa azalia | |
| | Orchidea rozowa | |
| | Kosz z azalia | |
| | Wiazanka czerwona | |
| | Bukiecik serc | |
| | Ikebana z rozami | |
| | Kwitnacy kosz | |
| | Sloneczniki z lilia | |
| | Strelicje | |
| | Anturium latem | |
| +-----------------------------------------+ |
| SQLRowCount returns 20 |
| 20 rows fetched |
| SQL> |
| </code> |
| |
===== - ODBC w SWI-Prolog ===== | ===== - ODBC w SWI-Prolog ===== |
| |
| SWI Prolog umożliwia wykonywanie zapytań na źródłach ODBC. |
| Rezultaty zapytania (pojedynczy wiersz) uzgodniane są ze wskazanymi szukanymi. |
| Wartości kolejnych kolejnych wierszy dostępne są poprzez mechanizm nawrotów. |
| |
| Przed wykonaniem zapytania należy nawiązać połączenie ze skonfigurowanym źródłem ODBC. |
| |
[[http://www.swi-prolog.org/pldoc/package/odbc.html|Dokumentacja]] dotycząca predykatów obsługujących połączenia ODBC z bazami danych. | [[http://www.swi-prolog.org/pldoc/package/odbc.html|Dokumentacja]] dotycząca predykatów obsługujących połączenia ODBC z bazami danych. |
?- odbc_disconnect(prolog). | ?- odbc_disconnect(prolog). |
</code> | </code> |
| |
===== - Schemat Bazy Danych ===== | ===== - Schemat Bazy Danych ===== |
| |
</code> | </code> |
| |
| Kompletny {{:pl:prolog:prolog_lab:baza.sql.txt|skrypt}} z schematem i danymi. |
| |
===== - Wykonywanie zapytań ===== | ===== - Wykonywanie zapytań ===== |
| |
Zapytania można realizować korzystając z predykatu ''odbc_query/4'' (albo ''odbc_query/3'', patrz [[http://www.swi-prolog.org/pldoc/doc_for?object=section(3%2c '2.2'%2c swi('%2fdoc%2fpackages%2fodbc.html'))|dokumentacja]]). | Zapytania można realizować korzystając z predykatu ''odbc_query/4'' (albo ''odbc_query/3'', patrz [[http://www.swi-prolog.org/pldoc/doc_for?object=section(3%2c '2.2'%2c swi('%2fdoc%2fpackages%2fodbc.html'))|dokumentacja]]). |
Pierwszym argumentem jest identyfikator połączenia, drugim zapytanie w języku SQL, trzecim rezultat zapytania w postaci termu ''row/n'' (argumenty będą uzgodnione z wartościami w kolejnych kolumnach zwaracanych przez zapytanie), czwartym lista dodatkowych opcji. | Pierwszym argumentem jest identyfikator połączenia, drugim zapytanie w języku SQL, trzecim rezultat zapytania w postaci termu ''row/n'' (argumenty predykatu ''row/n'' będą uzgodnione z wartościami w kolejnych kolumnach zwaracanych przez zapytanie), czwartym lista dodatkowych opcji. |
| |
Przykładowe zapytanie zwracające jako wartości szukanych ''Nazwa'', ''Email'' wartości kolumn ''nazwa'' i ''email'' tabeli ''klienci'' będzi wyglądało następująco: | Przykładowe zapytanie zwracające jako wartości szukanych ''Nazwa'', ''Email'' wartości kolumn ''nazwa'' i ''email'' tabeli ''klienci'' będzi wyglądało następująco: |
| |
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]]). | 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]]). |
| |
| **Ćwiczenie** |
| |
| - Otwórz połączenie do bazy danych korzystając ze źródła danych ''prolog''. |
| - Wykonaj następujące zapytanie SQL: ''SELECT SUM(cena), miasto FROM zamowienia JOIN odbiorcy USING (idodbiorcy) GROUP BY miasto;'', przeglądnij wyniki. |
| - Zamknij połączenie. |
| |
===== - Proste zapytania ===== | ===== - Proste zapytania ===== |
Częstą rozterką kupojącego jest: mam określoną sumę pieniędzy, ale co moge za to kupić np.: | Częstą rozterką kupojącego jest: mam określoną sumę pieniędzy, ale co moge za to kupić np.: |
* Jakie i ile kompozycji można kupić za 200 zł? | * Jakie i ile kompozycji można kupić za 200 zł? |
| Takie zapytanie jest trudne lub wręcz niemożliwe do zaimplementowania za pomocą SQL. |
| |
**Ćwiczenie** | **Ćwiczenie** |
Zmodyfikuj kod programu z poprzedniego ćwiczenia, tak aby stanowił samodzielną aplikację. | Zmodyfikuj kod programu z poprzedniego ćwiczenia, tak aby stanowił samodzielną aplikację. |
Program po skonsultowaniu, powinien zapytać o kwotę i wyświetlić wszystkie możlwie kombinacje kompozycji kwiatowych, które można za podaną kwotę kupić, podając: identyfikator kompozycji, nazwę oraz cenę. | Program po skonsultowaniu, powinien zapytać o kwotę i wyświetlić wszystkie możlwie kombinacje kompozycji kwiatowych, które można za podaną kwotę kupić, podając: identyfikator kompozycji, nazwę oraz cenę. |
| |
| ====== Uwagi, komentarze, propozycje ====== |
| |
| Laboratorium jest za krótkie. Zostaje ok. 30 minut wolnego czasu. |
| |
| --- //[[szymek@adres.pl|Szymon Świerkosz]]// |