18 Część VI Przegląd baz danych Oracle


#408
Część VI
Przegląd baz danych

#409
Rozdział 18.
Oracle

Omawianie różnych typów baz danych zaczniemy od Oracle'a. Baza ta przewijała się już wielokrotnie w poprzednich rozdziałach tej książki, głównie w licznych przykładach napisanych i przetestowanych przy jej użyciu. Oracle ma największy udział w rynku dostawców baz danych, głównie ze względu na bardzo długą obecność na tym rynku oraz dostępność swoich produktów dla różnych platform systemowych.
Bazy danych Oracle są użytkowane na wszelkiego rodzaju sprzęcie, poczynając od dużych komputerów typu mainframe, aż po systemy oparte na Windows NT -Oracle przystosował również swój produkt flagowy do systemu Linux. Oracle jest nie tylko dostępny dla różnych platform, ale również na każdej z nich pracuje dokładnie w taki sam sposób. Jest to możliwe dzięki dodatkowej warstwie abstrakcji wprowadzonej między serwerem bazy danych, a systemem operacyjnym. Dzięki tej warstwie podczas komunikacji z serwerem faktyczna platforma systemowa staje się nieistotna.
Każda odrębna baza danych Oracle jest określana mianem instancji (ang. instance). Instancja stanowi faktyczny proces serwera bazy danych wykonywany przez komputer. Każda jest w stanie obsługiwać wiele schematów, użytkowników, a nawet baz danych. Aplikacje komunikują się na ogół z bazami danych Oracle przy użyciu SQL*NET, czyli produktu, który pozwala dwóm komputerom wyposażonym w oprogramowanie Oracle komunikować się między sobą. Aby móc korzystać z SQL*NET, komputer musi mieć zainstalowane oprogramowanie klienta Oracle'a, które używa SQL*NET do komunikowania się z serwerem bazy danych.
Oczywiście, na bazie danych Oracle opartych jest wiele różnorodnych aplikacji. Programy zarządzania przedsiębiorstwami, systemy przetwarzania transakcji, serwery aplikacji WWW, a także wiele innych typów aplikacji przechowuje swoje dane w relacyjnych bazach danych.
W tym rozdziale ograniczymy się jednak wyłącznie do omówienia kilku narzędzi stworzonych specjalnie po to, aby móc łączyć się z bazą danych Oracle i wykonywać na niej zapytania SQL.
#410
SQL*PLUS

SQL*PLUS jest narzędziem Oracle'a, które umożliwia użytkownikom łączenie się z bazą danych i budowanie raportów. Interfejs SQL*PLUS ma formę wiersza poleceń służącego do wprowadzania zapytań oraz dopasowania otrzymanych wyników do własnych potrzeb. Mówiąc najprościej, wystarczy wpisać zapytanie SQL w wierszu poleceń, a po jego wykonaniu wyniki wyświetlane są wiersz po wierszu w tym samym oknie. Rysunek 18.1 przedstawia SQL*PLUS uruchomiony w oknie terminala.

Uruchamianie SQL*PLUS

W systemach UNIX, SQL*PLUS jest uruchamiany z poziomu powłoki przez wpisanie nazwy programu, SQL*PLUS. Przed uruchomieniem SQL*PLUS należy przygotować środowisko użytkownika, aby uzyskać dostęp do bibliotek Oracle'a. Komendy konfigurujące środowisko do pracy z Oracle'em powinny zostać udostępnione przez administratora bazy danych (można je znaleźć w skrypcie logującym użytkownika DBA).
--------------------------
Rysunek 18.1. SQL*PLUS uruchomiony w sesji terminala
Na rys.dyskietka na której obraz trudny do opisania
--------------------------

Uruchamiając SQL*PLUS w powłoce systemu UNIX, można umieścić w wierszu poleceń parametry logowania, unikając w ten sposób konieczności wpisywania ich po uruchomieniu programu. Dla potrzeb logowania program wyposażony został w trzy argumenty wiersza poleceń, umożliwiające przekazanie nazwy użytkownika bazy danych, hasła dostępu oraz nazwy bazy danych. Wprowadzenie hasła lub nazwy bazy danych jest niemożliwe bez podania nazwy użytkownika. Polecenie uruchomienia SQL*PLUS razem z informacją logowania ma następującą formę:

SQL*PLUS użytkownik/hasło@bazadanych

Zatem, aby zalogować się do bazy danych dinozaur jako użytkownik fred posługujący się hasłem flintstone, należy użyć następującego polecenia:

SQL*PLUS fred/flintstone@dinozaur
#411
Opcjonalnie, można pominąć nazwę bazy danych oraz hasło. Wszystkie trzy poniższe metody logowania są poprawne:

SQL*PLUS fred
SQL*PLUS fred/flintstone
SQL*PLUS fred@dinozaur

Nazwa bazy danych jest opcjonalna; w przypadku jej pominięcia użyta zostanie domyślna baza danych ustawiona w konfiguracji dla klienta Oracle. Nazwę bazy danych można wprowadzić w wierszu poleceń, tak jak pokazuje to rysunek 18.2.

--------------------------
Rysunek 18.2. Przekazywanie nazwy bazy danych doSQL*PLUS w wierszu poleceń
rysunek trudny do opisania
--------------------------

Z tekstu widocznego na rysunku 18.2 wynika, iż użytkownik development loguje się do bazy danych cent. W wierszu poleceń umieszczona została nazwa użytkownika razem z nazwą bazy danych. Rysunek 18.3 przedstawia SQL*PLUS w wersji Windows. Tutaj zamiast okna z wierszem poleceń, SQL*PLUS wyświetla okno dialogowe logowania, w które można wpisać nazwę użytkownika, hasło oraz bazę danych.

--------------------------
Rysunek 18.3. SQL*PLUS dla Windows
rysunek trudny do opisania
--------------------------

Korzystanie z SQL*PLUS

Po uruchomieniu SQL*PLUS wszelkie komendy wpisywane są bezpośrednio za znakiem zachęty SQL>. Wiele aplikacji umożliwia wprowadzanie zapytań bez jakiegokolwiek znaku końca polecenia. SQL*PLUS nie stosuje się do tej zasady i wymaga od użytkowników stosowania średnika na końcu każdego zapytania SQL - demonstruje to listing 18.1.
#412
--------------------------
Listing 18.1. Polecenia SQL w SQL*PLUS muszą posiadać na końcu średnik

SELECT movie_title
FROM Movies
WHERE movie_id IN (1, 2, 3)
ORDER BY movie_title;

MOVIE TITLE
--------------
Prince Kong
The Code Warrior
Vegetable House
--------------------------

Obecność średnika jest wymagana, ponieważ polecenia wpisywane w SQL*PLUS mogą zajmować kilka wierszy, w związku z czym niezbędny jest znacznik informujący o faktycznym końcu polecenia. Patrząc na wyrażenie z listingu 18.1 można łatwo zauważyć, że niektóre jego fragmenty mogą stanowić samodzielne zapytania SQL, programista potrzebuje zatem średnika do wskazania miejsca, w którym chce zakończyć wpisywanie wyrażenia. Weźmy pod uwagę dwa poniższe wyrażenia, stanowiące poprawne zapytania SQL:

SELECT tnovie_title
FROM Movies

SELECT movie_title
FROM Movies
WHERE movie_id IN (1, 2, 3)

Bez obecności średnika SQL*PLUS nie miałby możliwości wykrycia momentu, w którym powinien uruchomić zapytanie. Gdyby oczekiwał po prostu na poprawne wyrażenie, oba polecenia zostałyby wykonane, zanim programista zdążyłby wpisać całą treść zapytania.

Ładowanie skryptów SQL*PLUS

Zapytania SQL oraz polecenia dla SQL*PLUS można zapisywać w plikach zewnętrznych, a następnie wykonywać je z poziomu programu SQL*PLUS. Na przykład, jeżeli często wykonujemy zestaw kilku jednakowych zapytań, możemy zapisać je w pliku zewnętrznym, aby później uruchamiać go w dowolnej chwili przy użyciu komendy start.
Polecenie to wymaga argumentu w postaci pliku skryptowego przeznaczonego do wykonania. Jeżeli nazwa pliku kończy się rozszerzeniem .sql można je pominąć. Do załadowania pliku polecenia.sql wystarczy użyć następującego polecenia:

start polecenia

W przypadku pliku polecenia.txt, jego nazwa musi zostać wpisana w całości:

start polecenia.txt

Dwa kolejne listingi zawierają przykład demonstrujący to zagadnienie: listing 18.2 przedstawia zawartość pliku polecenia.sql, natomiast listing 18.3 stanowi zapis sesji SQL*PLUS w trakcie której plik ten został załadowany i uruchomiony.
#413
--------------------------
Listing 18.2. Plikpolecenia.sql

SELECT movie_title
FROM Movies
WHERE movie_id IN (3, 5, 7);

SELECT studio_name
FROM Studios
WHERE studio id = 1;
--------------------------
--------------------------
Listing 18.3. Sesja SQL*PLUS w której uruchomiony został plikpolecenia.sql

SQL> start polecenia

MOVIE_TITLE
--------------
SQL Strikes Back
Codependence Day
The Code Warrior

STUDIO_NAME
------------
Giant
--------------------------

Skrypt login.sql

W chwili uruchamiania SQL*PLUS wykonywany jest specjalny skrypt o nazwie login.sql. W pierwszej kolejności SQL*PLUS szuka tego skryptu w katalogu bieżącym, a jeżeli go tam nie ma, przeszukiwany jest katalog macierzysty Oracle'a. Jeżeli plik login.sql nie zostanie znaleziony w żadnym z tych miejsc, SQL*PLUS uznaje, że plik ten nie istnieje.
===================
Rada
Skrypt login.sql stanowi drobne odstępstwo od większości plików konfiguracyjnych systemu UNIX. W większości przypadków programy tego systemu szukają plików konfiguracyjnych (takich jak .profile, .emacs itp.) w katalogu domowym użytkownika. SQL*PLUS sprawdza obecność pliku login.sql w katalogu bieżącym. O ile zatem administrator nie utworzył globalnego pliku login.sql w katalogu macierzystym Oracle'a, przed uruchomieniem SQL*PLUS trzeba przejść do katalogu, w którym plik ten został przez nas umieszczony.
====================

Umieszczone w pliku login.sql polecenia programu SQL*PLUS (lub zapytania SQL) są wykonywane automatycznie w chwili uruchomienia tego programu.

Edycja poleceń SQL

Aby przejść do edycji ostatniego polecenia programu SQL*PLUS wystarczy wykonać komendę edit. Spowoduje ona wczytanie bieżącego wyrażenia SQL do edytora, który umożliwi wprowadzenie modyfikacji. O typie edytora użytego w systemie UNIX decyduje zmienna środowiskowa EDITOR. Jeżeli przypiszemy jej wartość
#414
/bin/vi, wyrażenie SQL zostanie wczytane do edytora vi. W przypadku braku jakiejkolwiek wartości w zmiennej EDITOR, użyty zostanie edytor ed. W środowisku Windows użycie polecenia edit spowoduje wywołanie Notatnika (notepad. exe).
=================
Rada
W środowisku Windows do zmiany domyślnego edytora można wykorzystać następujące polecenie programu SQL*PLUS:

DEFINE _EDITOR="C:\PROGRA~1\AKCESO~1\WORDPAD.EXE"

Polecenie to zmienia domyślny edytor na WORDPAD. Rodzaj edytora można wybrać samodzielnie, wpisując odpowiednią ścieżkę dostępu do programu, który od tej pory będzie używany aż do końca sesji SQL*PLUS. Zamiana edytora na stałe wymaga umieszczenia tego polecenia w pliku login.sql.

================
Przykład okna edytora uruchomionego z poziomu SQL*PLUS przedstawia rysunek 18.4 (w tym przypadku jest to edytor vi). Zauważ, że na końcu wyrażenia nie ma znaku średnika.

W tym przypadku, zamiast niego znajduje się tam pojedynczy znak slash (/) powodujący wykonanie bieżącego wyrażenia. Znaku slash można również użyć w wierszu poleceń (SQL>) do ponownego wykonania poprzedniego wyrażenia SQL lub do wykonania polecenia zapamiętanego po zakończeniu pracy edytora tekstu.

--------------------------
Rysunek 18.4. Edycja wyrażenia SQL z poziomu SQL*PLU
rysunek trudny do opisania
--------------------------

Zapisywanie danych w pliku

Polecenie spool służy w SQL*PLUS do zapisywania generowanych wyników w pliku (zamiast wyświetlania ich na ekranie). Po otwarciu pliku poleceniem spool, wszelkie dane wyprowadzane przez SQL*PLUS przesyłane są do pliku, aż
#415
do chwili kiedy przekierowanie to zostanie wyłączone. Aby zapisać generowane wyniki w pliku zapytania.out należy użyć następującego polecenia:

spool zapytania.out

Aby wstrzymać posyłanie wyników do pliku, należy wykonać polecenia spool off. Domyślnie w pliku zapisywane są wszelkie informacje wyświetlane przez SQL*PLUS na ekranie. Przyjrzyj się poleceniom zestawionym w listingu 18.4, a następnie zawartości pliku sqlplus.out z listingu 18.5.

--------------------------
Listing 18.4. Polecenia zapisywane w pliku

spool sqlplus.out;
SELECT studio_name FROM Studios;
SELECT movie_title FROM Movies
WHERE movie_id IN (1, 3, 5);
spool off;
--------------------------
--------------------------
Listing 18.5. Zawartość pliku sqlplus.out

SQL> SELECT studio_title
2 FROM Studios;

STUDIO_NAME
--------------
Giant
MPM
FKG
Delighted Artists
Metaversal Studios

SQL> SELECT movie_title
2 FROM Movies
3 WHERE movie_id IN (1, 3, 5);

MOVIE_TITLE
------------
Codependence Day
The Code Warrior
Vegetable House

SQL> spool off;
--------------------------

Jak widać, w pliku umieszczony został zapis całej sesji programu SQL*PLUS, z wyłączeniem początkowej komendy rozpoczęcia rejestracji (co wydaje się oczywiste, ponieważ rejestrowanie rozpoczyna się dopiero po wykonaniu tego polecenia). Zapisywanie wszystkich informacji generowanych przez SQL*PLUS nie zawsze jest konieczne. Jeżeli plik ma służyć na przykład do wymiany informacji zawartych w tabelach, nie ma potrzeby zaśmiecania go znakami zachęty, wyrażeniami SQL oraz innymi informacjami będącymi efektem ubocznym pracy programu.

Kontrolowanie sposobu prezentowania wyników

Sposób prezentowania wyników w SQL*PLUS jest kontrolowany przez szereg ustawień. Pod tym względem najważniejsze są możliwości zmiany szerokości wiersza oraz liczby wierszy tworzących stronę, co ma bezpośredni wpływ na sposób formatowania
#416
danych przez SQL*PLUS. Wygląd "strony" danych generowanej przez SQL*PLUS zależy od ustawień trzech parametrów. Parametr linesize określa liczbę znaków w wierszu, zmienna pagesize wskazuje liczbę wierszy tworzących stronę, natomiast newpage decyduje o liczbie wierszy, jaka powinna oddzielać kolejne strony.
Podczas czytania tej książki spotkałeś się już z przypadkami, w których kolumny danych były automatycznie przenoszone do nowego wiersza, tak aby pomieścić całość wydruku na stronie o szerokości 80 znaków. Rozmiar kolumn w tabeli Movies jest większy, niż standardowa szerokość 80 znaków, zatem kiedy wszystkie pola tej tabeli zostaną wybrane jednocześnie, wygenerowana odpowiedź z całą pewnością nie zmieści się w limicie 80 kolumn. Przykład wydruku w programie SQL*PLUS z końcówkami wierszy automatycznie przeniesionymi do nowych linii przedstawia listing 18.6.

--------------------------
Listing 18.6. Wydruk danych o szerokości przekraczającej 80 znaków

SELECT *
FROM Movies
WHERE movie_id IN (1, 2)

MOVIE_ID MOVIE_TITLE STUDIO_ID DIRECTOR_ID GROSS BUDGET RELEASE_D
------------------------------------------------------------------------------
2 Prince Kong 2 10 - 3.25 01-MAY-79
1 Vegetable House 1 1 30 20 01-JAN-75
--------------------------

Zawartość kolumny daty emisji filmu wraz z nagłówkiem została automatycznie przeniesiona, tak aby umożliwić wyświetlenie całego rekordu. Domyślny rozmiar strony (pagesize) w SQL*PLUS wynosi 66 wierszy, natomiast parametr newpage posiada wartość 3. Mówiąc inaczej co 66 wierszy danych wstawiane są trzy wiersze puste. Polecenia służące do zmiany tych ustawień przedstawia listing 18.7.

--------------------------
Listing 18.7. Zmiana ustawień parametrów strony

set linesize 132
set pagesize 40
set newpage 2
--------------------------

SQL*PLUS pozwala również na odpowiednie sformatowanie danych wygenerowanych w odpowiedzi na zapytanie SQL. Domyślny sposób prezentowania danych przedstawia listing 18.8.

--------------------------
Listing 18.8. Domyślny sposób prezentowania wyników zapytania w SQL*PLUS

SELECT raovie_title
FROM Movies;

MOVIE_TITLE
------------
Vegetable House
Prince Kong
The Code Warrior
Codependence Day
#417
The Linux Files
SQL Strikes Back
The Programmer
Hard Code
The Rear Windows

10 rows selected
--------------------------

Oprócz faktycznych wyników zapytania, wyświetlana jest również nazwa kolumny oraz informacja o liczbie wierszy pobranych z bazy danych. Parametr heading umożliwia wyłączenie nagłówków, natomiast feedback zablokowanie informacji końcowej. Do wyłączenia obu parametrów służą następujące polecenia:

set feedback off
set heading off

Wydanie tych poleceń sprawi, że odpowiedź z listingu 18.8 zostanie pozbawiona dodatkowych informacji i przyjmie formę widoczną w listingu 18.9.

--------------------------
Listing 18.9. Wyniki zapytania pozbawione nagłówka i informacji końcowej

Vegetable House
Prince Kong
The Code Warrior
Codependence Day
The Linux Files
SQL Strikes Back
The Programmer
Hard Code
The Rear Windows
--------------------------

Tworzenie raportów w SQL*PLUS

Oprócz zadawania pytań do bazy danych, SQL*PLUS może również zostać wykorzystany jako narzędzie do tworzenia raportów na podstawie wyników zapytań. Do tego celu przeznaczonych jest kilka poleceń umożliwiających programistom wstawianie nagłówków i stopek oraz formatowanie zwracanych danych w celu ich prezentacji.

Tytułowanie raportów

Istnieje kilka poleceń przeznaczonych do tworzenia nagłówków. Pierwszym z nich jest komenda prompt, która nie robi nic innego poza wyświetleniem tekstu przekazanego jej jako argument. Działanie prompt jest bardzo podobne do polecenia echo w systemie UNIX lub print w wielu językach programowania. Tekst przeznaczony do wyświetlenia nie musi być umieszczany w cudzysłowach lub innych znakach ograniczających. Przykład działania polecenia prompt przedstawia listing 18.10.

--------------------------
Listing 18.10. Wyświetlanie tekstu przy użyciu polecenia prompt

SQL> prompt To jest zwykły tekst.
To jest zwykły tekst.
--------------------------
#418
Komendy ttitle i btitle służą do tworzenia tytułów wyświetlanych na górze oraz na dole każdej strony raportu. O częstotliwości wyświetlania tych nagłówków decyduje ustawienie pagesize, ponieważ to ono określa, jak często rozpoczynana jest nowa strona raportu. Tytuły są centrowane w oparciu o ustawienie atrybutu linesize. Jeżeli tekst za komendą ttitle zajmuje 40 znaków, a wartość linesize wynosi 80, początek tytułu znajdzie się w 21 kolumnie wydruku. W przeciwieństwie do polecenia prompt, btitle i ttitle wymagają umieszczenia nagłówków w pojedynczych cudzysłowach.
Położenie nagłówka względem strony można zmienić przy użyciu odpowiedniego atrybutu: LEFT, CENTER lub RIGHT. Atrybut ten należy umieścić za poleceniem btitle lub ttitle w sposób następujący:

btitle right 'Opracowanie JMT, Gliwice 2000'

Polecenie btitle (lub ttitle) może również zostać wywołane z kilkoma łańcuchami i atrybutami określającymi ich położenie występującymi na przemian (ze separatorem w postaci spacji):

btitle left 'Opracowanie JMT' right 'Gliwice 2000'

Oba fragmenty tekstu pojawią się w jednym wierszu, pierwszy z nich dosunięty do lewej krawędzi, a drugi do prawej.

Zmiana sposobu wyświetlania danych

Do zmiany sposobu prezentowania wyników zapytań służy polecenie column. Jak wiadomo, nazwy kolumn mogą być zmieniane przy użyciu operatora AS wewnątrz wyrażeń SELECT. Podczas korzystania z SQL*PLUS warto jednak skorzystać z polecenia column, posiadającego szereg dodatkowych opcji przeznaczonych do formatowania wyników zapytań. Polecenie to posiada trzy parametry sterujące: heading, format i wrap.
Parametr heading służy do zmiany nazwy nagłówka kolumny. Sposób jego użycia wygląda następująco:

column movie_title heading 'Movie Title'

Oczywiście, taki sam efekt można uzyskać wstawiając do zapytania fragment AS "Movie Ttitle", jednak użycie polecenia column w SQL*PLUS ma jeszcze inne zalety.

===============
Rada
Znak używany jako wskaźnik przejścia do nowego wiersza w nagłówku kolumny lub tytule może zostać zmieniony za pomocą ustawienia headsep. Np. polecenie:

set headsep #
zmienia ten znak na #.
==================
#419
Pierwsza, to możliwość wyraźnego odseparowania kodu związanego z prezentacją danych od kodu pobierającego dane z bazy. Poza tym komenda column heading jest odrobinę bardziej elastyczna od operatora AS. Umożliwia na przykład osadzanie w nagłówkach znaku nowego wiersza przy użyciu znaku | (mechanizm ten dział również w poleceniach ttitle i btitle).
Aby wstawić znak nowego wiersza do nagłówka kolumny movie_title, należałoby użyć następującej komendy:

column movie_title heading 'Movie|Title'

Polecenie column może również zostać użyte do zmiany sposobu formatowania danych w kolumnach. Do tego celu używany jest parametr sterujący format. Polecenie column format określa rodzaj danych w kolumnie, a także jej szerokość. Poniższe polecenie ustawia szerokość kolumny movie_title na 10 znaków:

column movie_title format a10

Litera a oznacza, że kolumna zawiera dane alfanumeryczne. W przypadku danych liczbowych można utworzyć wzorzec określający położenie każdej z cyfr:

column budget format 990.00

Zera wskazują miejsca kolumny, które obowiązkowo muszą zostać wypełnione liczbami (w przypadku braku wartości dla danej pozycji jest ona wypełniana zerem), dziewiątki z kolei wskazują miejsca, które powinny być wypełnione cyframi, ale niekoniecznie. Jeżeli dla danej pozycji nie istnieje wartość, pozostaje ona pusta.
W końcu można również określić sposób przenoszenia znaków w kolumnie, jeżeli umieszczona w niej wartość nie mieści się w jednym wierszu. Domyślne ustawienie powoduje przeniesienie dowolnego tekstu wykraczającego poza dopuszczalną szerokość kolumny do nowego wiersza. Jeżeli format kolumny ustalono na a10, a wartość ma długość 13 znaków, pierwsze 10 znaków pojawi się w pierwszym wierszu, a pozostałe trzy w drugim. Do określenia sposobu przenoszenia tekstu służą dwie opcje: word_wrapped i truncate. Polecenie zmiany sposobu przenoszenia tekstu wygląda następująco:

column movie_title truncate

Ustawienie word_wrapped przenosi do nowego wiersza tekst wykraczający poza szerokość kolumny. W przeciwieństwie jednak do ustawienia domyślnego, tekst nie jest dzielony w sposób dowolny, lecz na granicy słów.
Opcja truncate obcina wszelkie znaki nie mieszczące się w przewidzianej szerokości kolumny. Jeżeli kolumna ma format a10, a wartością przewidzianą do wyświetlenia jest 'The Code Warrior', faktycznie wyświetlony zostanie łańcuch'The Code W'.
Wszystkie ustawienia dotyczące wybranej kolumny mogą zostać użyte jednocześnie w pojedynczym poleceniu column. Poniżej znajduje się przykład takiego polecenia dla kolumny movie_title:

column movie_title heading 'Movie Title' format a10 truncate
#420
Przedstawiliśmy już wystarczająco dużo komend formatujących, aby można było przejść do konkretnego przykładu raportu. Raport opiera się na użyciu poleceń formatujących oraz zapytania SQL, które dostarcza danych. W poniższym przykładzie polecenia formatujące wraz z zapytaniem umieszczone zostały w pliku raport.sql, którego zawartość przedstawia listing 18.11. Gotowy raport widoczny jest w listingu 18.12.

--------------------------
Listing 18.11. Plik raport.sql

prompt 'Autor: Rafe Colburn'
ttitle 'Raport o dochodach filmów'
btitle '(Poufne)'

column movie_title heading 'Tytuł | Filmu' format a10 truncate
column budget heading 'Budżet! (w milionach)' format 990.00
column gross heading 'Brutto (w milionach)' format 990.00
column profit heading 'Zyski (w milionach)' format 990.00

set linesize 75

SELECT movie_title, budget, gross, gross - budget AS profit
FROM Movies;
--------------------------
--------------------------
Listing 18.12. Raport wygenerowany przez raport.sql

SQL> start example_report
Autor: Rafe Colburn
Input truncated to 12 characters

Thu May 20
Raport o dochodach filmów page 1

Tytuł Filmu Budżet (w milionach) Brutto(w milionach) Dochód (w milionach)
----------------------------------------------------
Vegetable 20.00 30.00 10.00
Prince Kon 3.25
The Code W 10.30 17.80 7.50
Bili Durna 10.10
Codependen 15.00 30.00 15.00
The Linux 22.20 17.50 -4.70
- - (Poufne) -

Thu May 20
Raport o dochodach filmów page 2

Tytuł Filmu Budżet (w milionach) Brutto(w milionach) Dochód (w milionach)
----------------------------------------------------
SQL Strike 5.00 10.00 5.00
The Hard The 50.00 45.30 -4.70
Progra Code 70.00 30.00 -47.00
The Rear W 5.00 -17.50 -32.50
- - (Poufne) -

10 rows selected.
------------------------------------

Przeanalizujmy krok po kroku działanie pliku raport.sql. W pierwszej kolejności drukowany jest komunikat 'Autor: Rafe Colburn', po czym ustalany jest górny i dolny nagłówek raportu. Dalsza część pliku składa się z sekwencji poleceń formatujących każdą z kolumn zwracanych przez zapytanie, łącznie z kolumną wirtualną utworzoną przy użyciu operatora AS.
#421
Wszystkie nagłówki zostały "złamane" na pół (znakiem |), a sposób wyświetlania ich zawartości został określony parametrem format. Kolumny numeryczne dopuszczają obecność trzech liczb przed przecinkiem i wymuszają drukowanie dwóch miejsc po przecinku (nawet jeśli mają to być zera). Dla kolumny movie_title ustawiony został format truncate.
Przedostatnia komenda ustala rozmiar strony raportu (parametr linesize) na 75 wierszy (zamiast wartości domyślnej, równej 80). Na końcu wykonane zostaje zapytanie, które wybiera trzy kolumny z tabeli Movies i tworzy dodatkową (wirtualną) kolumnę profit, zawierającą wynik operacji odjęcia budżetu filmu od jego dochodu brutto.

Inne polecenia formatowania danych

Komenda break on umożliwia podzielenie raportu na części w oparciu o wartości określonego pola. Jej działanie opiera się na współpracy z klauzulą ORDERY BY zapytania generującego raport. Raport jest dzielony przy każdej zmianie wartości w kolumnie użytej jako argument komendy break on. Działanie takie pozwala na przejrzyste grupowanie elementów według dowolnie wybranego kryterium. Składnia polecenia break on wygląda następująco:

break on kolumna [duplicate] skip numer

Kolumna użyta jako argument polecenia break on musi odpowiadać pierwszej kolumnie wyspecyfikowanej w klauzuli ORDER BY. Numer wskazuje liczbę wierszy, jaką należy wstawić pomiędzy każdą z grup tworzoną poleceniem break on. Opcjonalny parametr [duplicate] sprawia, że każda unikalna wartość kolumny umieszczonej w poleceniu break on będzie wyświetlana w każdym wierszu raportu. Domyślnie, w raporcie generowanym z użyciem break on, wartość taka wyświetlana jest tylko raz, w pierwszym wierszu, w którym się pojawia. Zbliżona do polecenia break on jest komenda compute sum, która powoduje dodanie wszystkich wartości w wybranej kolumnie dla każdej grupy i wyświetlenie wyniku na ekranie. Działanie to ma inny charakter niż połączenie klauzuli GROUP BY i funkcji agregującej, ponieważ wyniki zawierają wszystkie indywidualne rekordy będące wynikiem zapytania wraz z sumami w każdej grupie. Składnia polecenia compute sum jest następująca:

compute sum of kolumna on kolumna_podziału

Użycie polecenia compute sum wymaga wyspecyfikowania dwóch kolumn: kolumny, której wartości mają być sumowane oraz kolumny stanowiącej kryterium grupowania. Polecenie dzielące wyniki zapytania zgodnie z wartością pola studio_id i sumujące wartości budżetów we wszystkich grupach (studiach filmowych) wygląda następująco:

compute sum of budget on studio_id

Kolejny przykład stanowi rozszerzenie skryptu z listingu 18.11 o polecenie sumowania wartości we wszystkich trzech kolumnach zwróconych przez zapytanie. Samo zapytanie ma formę złączenia, co umożliwia pobranie nazwy studia dla każdego filmu i pogrupowanie rekordów według nazwy studia. Nowy kod raportu znajduje się w listingu 18.13, a wyniki jego działania w listingu 18.14.
#422
------------------------------------
Listing 18.13. Nowy skrypt SQL*PLUS = nowy_raport.sql

prompt 'Autor: Rafe Colburn'
ttitle 'Raport o dochodach filmów'
btitle '(Poufne)'

column movie_title heading 'Tytuł | Filmu* format a10 truncate
column budget heading 'Budżet|(w milionach)' format 990.00
column gross heading 'Brutto|(w milionach)' format 990.00
column profit heading 'Dochód | (w milionach)' format 990.00
column studio_name heading 'Studio' format a10 truncate
break on studio_name skip 2
compute sum of budget on studio_name
compute sum of gross on studio_name
compute sum of profit on studio_name

set linesize 75
set pagesize 35

SELECT studio_name, movie_title, budget, gross - budget AS profit
FROM Movies, Studios
WHERE Movies.studio_id = Studios.studio_id
ORDER BY studio name;
-------------------------------
-------------------------------
Listing 18.14. Raport wygenerowany przez nowy raport.sql

Autor: Rafe Colburn
Input truncated to 21 characters

Thu May 20
Raport o dochodach filmów page 1


Studio Tytuł Filmu Budżet(w milionach) Brutto (w milionach) Dochód(w milionach)
-------------------------------------
Delighted Bili Durha 10.10
SQL Strike 5.00 10.00 5.00
The Progra 50.00 45.30 -4.70
************* ------------ -------- ---------
sum 65.10 55.30 0.30

FKG The Code W 10.30 17.80 7.50
Hard Code 77.00 30.00 -47.00
*********** ------------ ------- ---------
sum 87.30 47.80 -39.50

Giant Vegetable 20.00 30.00 10.00
Codependen 15.00 30.00 15.00
The Rear W 50.00 17.50 -32.50
************ ------------ --------- --------
sum 85.00 77.50 -7.50

MPM Prince Koń 3.25
The Linux 22.20 17.50 -4.70
*********** ------------ ------- --------
sum 25.45 17.50 -4.70
- (Poufne) - -

10 rows selected.
--------------------------------

Jak widać wynik zapytania zawiera podsumowanie kolumn dla każdej grupy. Do raportu można również dołączyć podsumowanie końcowe, w tym celu do polecenia break on należy dodać parametr on report:

break on studio_name skip 2 on report
#423
=================
Rada
W całym skrypcie dopuszczalne jest użycie tylko jednego polecenia break on. Jeżeli w kodzie znajdzie się drugie polecenie tego typu (lub zostanie one użyte więcej niż jeden raz w trakcie sesji SQL*PLUS), ustawienia poprzedniego polecenia break on zostaną nadpisane.
==================

Teraz dla każdej kolumny, która powinna znaleźć się w podsumowaniu końcowym, trzeba jeszcze wydać polecenie compute on w następującej postaci:

compute sum of budget on report
compute sum of gross on report
compute sum of profit on report

Po dodaniu tych poleceń do przedstawionego wcześniej skryptu, raport zostanie uzupełniony o następujący fragment danych:

----- -------- ------
sum 262.85 198.10 -51.40


Widoki systemowe Oracle'a

Oracle, tak jak większość wysoce zaawansowanych baz danych, przechowuje wszelkie dane konfiguracyjne w tabelach będących częścią systemu. Tabele systemowe zawierają informacje o użytkownikach, schematy wszystkich tabel w bazie, a także szereg innych danych konfiguracyjnych. Aby umożliwić dostęp do tych informacji, w bazie danych Oracle istnieje szereg widoków pozwalających przeglądać zawartość tabel systemowych. Rozdział ten jest za mały, aby można było w nim omówić wszystkie tabele i widoki systemowe, dlatego ograniczymy się jedynie do kilku wybranych, z którymi najprawdopodobniej będziesz miał do czynienia najczęściej.
====================
Rada
Opis wybranej tabeli (listę nazw jej kolumn wraz typami danych) można obejrzeć z poziomu SQL*PLUS używając polecenia DESC. Poniższe polecenie zwraca schemat tabeli Studios:

DESC Studios

wynik jej działania jest następujący

Name Null? Type
--------------------------------
STUDIO_ID NOT NULL NUMBER
STUDIO_NAME VARCHAR2(20)
STUDIO_CITY NOT NULL VARCHAR2(20)
STUDIO_STATE NOT NULL CHAR(2)

Polecenie to pozwala między innymi przeglądać strukturę tabel systemowych, co może pomóc w lepszym zrozumieniu zagadnień omawianych w tym podrozdziale.
=================
#424
Baza danych Oracle wyposażona jest w trzy główne grupy widoków systemowych: ALL, DBA i USER. Oprócz tego są jeszcze inne widoki, których nie da się podciągnąć pod żadną z tych kategorii, ale stanowią one mniejszość.
Wszystkie trzy grupy zawierają te same podstawowe widoki, jedyna różnica między nimi polega na podzbiorze zwracanych przez nie wierszy bazy danych.
Widoki DBA zawierają informacje o wszystkich obiektach istniejących w systemie. Na przykład DBA_TABLES przechowuje specyfikację każdej z tabel systemu. Aby móc wysyłać zapytania do widoków DBA, użytkownik musi posiadać przywilej SELECT_ANY_TABLE, który na ogół przyznawany jest użytkownikom z prawami dostępu DBA (administratorom). Wszystkie widoki DBA rozpoczynają się od przedrostka DBA. Nie będą one omawiane w tym rozdziale, ponieważ dostęp do nich mają wyłącznie administratorzy systemu. Z punktu widzenia programisty o wiele bardziej interesujące są widoki ALL i USER.
Widoki ALL obejmują swoim zasięgiem obiekty dostępne dla bieżącego użytkownika bazy danych, łącznie z obiektami innych użytkowników, których użytkownik bieżący ma prawo używać. Widoki USER zawierają wyłącznie obiekty będące faktyczną własnością bieżącego użytkownika. Tak więc widok ALL_TABLES przechowuje wszystkie tabele do których użytkownik ma dostęp, natomiast USER_TABLE - tabele będące własnością tego użytkownika.
W tabeli 18.1 umieszczona została lista kilku ważniejszych widoków, które mogą okazać się przydatne. Lista ta zawiera widoki z przedrostkiem USER, ale równie dobrze mogłyby to być widoki typu ALL lub DBA. Jedyna różnica między nimi polega na zasięgu widoczności obiektów w danym typie widoku.

-------------------------
Tabela 18.1. Ważniejsze widoki systemowe Oracle'a

Widok Opis
USER_CATALOG Zawiera wszystkie obiekty będące w posiadaniu użytkownika: tabele, widoki, sekwencje i synonimy
USER_CONSTRAINTS Definicje więzów integralności nałożonych na tabele użytkownika
USER_DEPENDENCIES Zależności pomiędzy obiektami posiadanymi przez użytkownika. Tablica ta udostępnia związki kluczy obcych pomiędzy tabelami utworzonymi z użyciem klauzuli REFERENCES
USER_INDEXES Indeksy założone na tablicach użytkownika
USER_LOBS Duże obiekty przechowywane w tabelach użytkownika. Tablica ta przechowuje obiekty typu CLOB, BLOB i NCLOB, ale nie BFILE, ponieważ są to obiekty znajdujące się poza bazą danych
USER_ROLE_PRIVS Role, które zostały przyznane bieżącemu użytkownikowi
USER_SEQOENCES Sekwencje należące do bieżącego użytkownika
USER_SOURCE Kod źródłowy wszystkich procedur należących do bieżącego użytkownika
USER_SYNONYMS Synonimy należące do bieżącego użytkownika
USER_TABLES Tabele posiadane przez bieżącego użytkownika
#425
USER_TRIGGERS Wyzwalacze będące własnością bieżącego użytkownika
USER_USERS Różnorodne informacje dotyczące bieżącego użytkownika, między innymi jego identyfikator, data utworzenia konta, data wygaśnięcia konta, itp.
USER_VIEWS Widoki będące własnością bieżącego użytkownika
-------------------------

Korzystanie z widoków systemowych

Ponieważ widoki systemowe sąjedynym źródłem informacji na temat obiektów zapisanych w bazie danych, to właśnie do nich trzeba się odwołać w przypadku gdy, zapomnieliśmy nazwy jednej z tabel lub chcielibyśmy sprawdzić, które widoki utworzyliśmy samodzielnie. Listing 18.15 przedstawia polecenie pozwalające pobrać listę tabel będących naszą własnością.

-------------------------
Listing 18.15. Zapytanie zwracające listę tabel należących do bieżącego użytkownika

SELECT DISTINCT table_name
FROM User_Tables

TABLE_NAME
-----------------
ARTICLES
ARTICLE_KEYWORDS
CITY_STATE
EXAMPLE
KEYWORDS
LOCATIONS
MOVIES
PEOPLE
SOME_NAMES
SORTME
STOCKPRICE
STUDIOS
STUDIOS_COPY
TEMPERATURES
TEST
UNIONS
USER_KEYWORDS
-------------------------

W zapytaniu użyte zostało słowo kluczowe DISTINCT, które w przypadku User_ Tables jest bez znaczenia, ponieważ przechowuje ona dokładnie po jednym wierszu dla każdej tabeli użytkownika. Istnieją jednak tabele, w których zasada ta nie jest spełniona. Przykładem może być tabela User_source przechowująca kod źródłowy procedur, po jednym wierszu na każdą linijkę kodu. Zatem do utworzenia listy wszystkich procedur niezbędne jest użycie słowa kluczowego DISTINCT.
Zapytania odwołujące się do tabel systemowych mogą również zostać wykorzystane w programach do automatycznego generowania kodu SQL. Za przykład niech posłuży projekt, który wymaga wywoływania szeregu procedur napisanych w języku PL/SQL. Używając Perla można napisać program, który połączy się z bazą danych i wyśle zapytanie do widoku ALL_SOURCE, otrzymując w odpowiedzi
#426
argumenty przekazywane do określonej procedury (lub procedur). Posiadając takie informacje, program wygeneruje następnie kod niezbędny do wywołania danej procedury, oszczędzając tym samym autorowi sporej ilości żmudnej pracy.
==================
Uwaga
Pisząc własne aplikacje można skorzystać z szeregu narzędzi, które łączą się z bazą danych Oracle i wydobywają informacje z różnych widoków systemowych. Jednym z takich narzędzi jest TOAD (Tool for Oracle Application Developers) - program automatycznie budujący listę tabel, widoków i innych obiektów należących do użytkownika. Umożliwia on również wykonywanie zapytań i przeglądanie wyników. Więcej informacji na ten temat znaleźć można pod adresem http://www.toadsoft.com. Oprócz TOAD istnieją również inne programy tego typu, które warto przetestować, szczególnie jeżeli z programowaniem dla Oracle'a mamy do czynienia na co dzień.
==================

Sekwencje

Większość baz danych oferuje pewnego rodzaju mechanizm generujący wartości używane jako klucz główny tabeli. W wielu przypadkach są to tzw. pola auto-inkrementujące. Oracle realizuje to zadanie w sposób odbiegający od rozwiązań przyjętych w innych systemach. Podczas gdy większość baz danych wymaga utworzenia kolumny o specjalnym typie danych (powodującym automatyczne zwiększanie wartości każdym wstawieniu wiersza), Oracle stosuje sekwencje, będące niczym innym jak licznikami zwiększanymi za każdym razem, gdy pobierana jest z nich wartość.
Składnia polecenia tworzącego sekwencję wygląda następująco:

CREATE SEQUENCE nazwa_sekwencji
INCREMENT BY liczba
START WITH liczba

Każdej sekwencji nadawana jest nazwa, wartość o jaką będzie ona zwiększana przy każdym pobraniu wartości oraz liczba stanowiąca punkt startowy sekwencji. Poniższy przykład (listing 18.16) tworzy sekwencję dla pola studio_field w tabeli studios.

-------------------------
Listing 18.16. Tworzenie nowej sekwencji

CREATE SEQUENCE studio_id_seq
INCREMENT BY 1
START WITH 100

Sequence created.
-------------------------

Do pobierania nowych unikalnych wartości z sekwencji służy konstrukcja nazwa sekwencji.Nextval. Teraz przy każdym wstawieniu nowego wiersza do tabeli studios, identyfikator studia będzie pobierany z sekwencji - listing 18.17. Wynik działania tego polecenia (nowy wiersz w tabeli studios) przedstawia listing 18.18.
#427
-------------------------
Listing 18.17. Polecenie wstawienia wiersza z wartością pochodzącą z sekwencji

INSERT INTO Studios
VALUES
(studio_id_seq.NextVal, 'Temp Studio', 'Houston1, 'TX')

1 row created.
-------------------------
-------------------------
Listing 18.18. Wiersz z identyfikatorem pochodzących z sekwencji

SELECT
FROM Studios

STUDIO_ID STUDIO_NAME STUDIO_CITY ST
-------------------------
1 Giant Los Angeles CA
2 MPM Burbank CA
4 FKG Apex NC
3 Delighted Artists Austin TX
5 Metaversal Studios Los Angeles CA
100 Temp Studio Houston TX
-------------------------

Wśród wierszy wybranych z tabeli widać rekord wstawiony poleceniem z listingu 18.17. Sekwencja została utworzona tuż wcześniej, dlatego identyfikator studia posiada wartość początkową sekwencji. Następny rekord wstawiony z użyciem studio_id_ seq.NextVal będzie posiadał wartość 101, itd. Należy zauważyć, że sekwencje nie są związane z żadną konkretną tabelą lub kolumną bazy danych. Ta sama sekwencja może np. posłużyć do generowania kluczy głównych w kilku tabelach jednocześnie. Każde odwołanie do studio_id_seq.NextVal spowoduje pobranie z niej kolejnej (unikalnej) wartości, niezależnie od tego, gdzie sekwencja ta zostanie użyta.

=================
Rada
Każde odwołanie do atrybutu NextVal powoduje zwrócenie wartości przez sekwencję i zwiększenie jej wewnętrznego licznika. Stanie się tak również w wyniku polecenia:

SELECT studio_id_seq.NextVal
FROM Dual

Uzyskany w ten sposób identyfikator zostanie utracony, ponieważ nie został nigdzie przypisany. Działanie takie można jednak wykorzystać do określenia identyfikatora, jaki nadany zostanie rekordowi wstawianemu do bazy danych. Kolejną wartość sekwencji można zapisać w zmiennej, która następnie użyta zostanie w wyrażeniu INSERT (gdy będziemy gotowi do wstawienia nowego wiersza do bazy danych). Standardowe pola auto-inkrementujące nie posiadają takiej możliwości.
===============

Można również uzyskać bieżącą wartość sekwencji, stosując atrybut CurrVal, po pobraniu pierwszej wartości atrybutem Nextval (nie można pobrać wartości bieżącej przed użyciem NextVal, ponieważ wartość taka nie istnieje, dopóki nie zostanie pobrana pierwsza wartość sekwencji). Użycie CurrVal (listing 18.19) powoduje zwrócenie wartości sekwencji wygenerowanej podczas ostatniego użycia Nextval, ale nie zwiększa wartości samej sekwencji.
#428
-------------------------
Listing 18.19. Pobieranie bieżącej wartości sekwencji

SELECT studio_id_seq.NextVal
FROM Dual

NEXTVAL
--------
101

SELECT studio_id_seq.CurrVal
FROM Dual

CURRVAL
-----------
101
-------------------------

Synonimy

Synonimy udostępniają prosty mechanizm, dzięki któremu użytkownicy mogą korzystać z tabel i widoków innych użytkowników w taki sposób, jakby należały one do ich własnej przestrzeni nazw. Załóżmy dla przykładu, że istnieje dwóch użytkowników Piotr i Paweł - obaj mają wzajemny dostęp do swoich tabel. Jeżeli Piotr jest właścicielem tabeli Movies, a Paweł chce wykonać na niej zapytanie, musi zrobić to w sposób następujący:

SELECT *
FROM Piotr.Movies

Jeśli Paweł korzysta bardzo często z tabeli Movies należącej do Piotra, może utworzyć dla niej synonim w swoim własnym obszarze nazw. Synonim jest po prostu wskaźnikiem do tabeli lub widoku będącego własnością innego użytkownika, eliminującym potrzebę poprzedzania nazw tabel nazwą ich właściciela. Do utworzenia synonimu tabeli Piotr.Movies Paweł korzysta z następującego wyrażenia SQL:

CREATE SYNONYM Movies FOR Piotr.Movies;

Po utworzeniu synonimu, Paweł może zadawać pytania do tabeli Movies leżącej w jego własnej przestrzeni nazw i otrzymywać wiersze pochodzące z tabeli Piotr .Movies. Synonimy mogą być tworzone zarówno pomiędzy różnymi użytkownikami, jak i różnymi bazami danych. Oczywiście tworzenie synonimu dla danego zasobu ma sens jedynie wtedy, gdy użytkownik ma do niego prawo dostępu.
Użytkownicy o przywilejach DBA mogą tworzyć synonimy publiczne. Synonim publiczny nie różni się niczym od zwykłego synonimu poza tym, że należy do lokalnej przestrzeni nazw wszystkich użytkowników.
Do jego utworzenia (w tym przykładzie dla tablicy Piotr.Movies) użytkownik DBA korzysta z następującego polecenia:

CREATE PUBLIC SYNONYM Movies FOR Piotr.Movies

Od teraz wszyscy użytkownicy bazy danych mogą się odwoływać do tej tablicy, tak jakby stanowiła ich własność. Tworzenie synonimów publicznych jest szczególnie opłacalne, kiedy administrator chce zaimportować do lokalnej bazy danych tabele z innej bazy i udostępnić je wszystkim użytkownikom.
#429
Typy danych w Oracle'u

Tabela 18.2. przedstawia kompletną listę typów danych obsługiwanych przez system Oracle.

-------------------------
Tabela 18.2. Typy danych w Oracle 'u.

Typ danych Opis
char (rozmiar) Pole znakowe o ustalonej długości. Jeżeli dane zajmująmniej miejsca niż
rozmiar tego pola, jest ono uzupełniane znakami pustymi

date Przechowuje datę i czas poczynając od 1 stycznia 4712 roku p. n. e. do 31
grudnia 4712 roku n.e. (w Oracle'u 8i największą możliwą datą jest 31 grudzień 9999 n. e.)

Decimal Synonim typu number, nie umożliwia specyfikowania rozmiaru pola

Float Synonim typu number

integer Numeryczny typ danych przeznaczony wyłącznie dla liczb całkowitych

integer (rozmiar) Wartość całkowita o ilości znaków nie większej niż rozmiar. Należy
pamiętać, że rozmiar oznacza fizyczną szerokość pola w znakach, a nie liczbę bajtów rezerwowaną dla tego pola w pamięci

Long Duży obiekt znakowy o rozmiarze nie większym niż 2 GB (podobny do typu clob)

long raw Duży obiekt binarny, mogący pomieścić do 2 GB danych (podobny do typu blob)

long varchar Synonim typu long

Mislabel 4-bajtowa reprezentacja bezpiecznej etykiety systemu operacyjnego

number Podstawowy typ numeryczny Oracle'a. Przechowuje liczby o długości do 40 cyfr, wyłączając znak i wartość dziesiętną.

number (rozmiar) Typ numeryczny o ustalonym rozmiarze

number (rozmiar, p) Typ numeryczny o ustalonym rozmiarze i precyzji

number (*) Synonim typu number

smallint Synonim typu number. Pomimo swojej nazwy, może przechowywać liczby zmiennoprzecinkowe

raw (rozmiar) Przechowuje dane binarne o wielkości w bajtach nie większej niż rozmiar. Maksymalny rozmiar to 255

raw mislabel Bezpieczna etykieta systemu operacyjnego w formacie binarnym

rowid Identyfikuje w sposób unikalny wszystkie wiersze w tabelach Oracle'a. Każda tabela posiada pseudokolumnę o nazwie i typie danych rowid

varchar2 (rozmiar) Podstawowy typ znakowy o zmiennej długości, który może pomieścić maksymalnie do 4000 znaków

varchar (rozmiar) Typ Varchar wychodzi z użytku w Oracle'u, zastępuje go varchar2
#430
biob Obiekt binarny o rozmiarze do 4 GB

clob Obiekt znakowy o rozmiarze do 4 GB

nclob Obiekt znakowy umożliwiający stosowanie kilkubajtowych tablic znaków o rozmiarze do 4 GB

bfile Wskaźnik do zewnętrznego pliku binarnego znajdującego się w systemie plików
-------------------------


Zasoby na temat Oracle'a w sieci WWW

Szukając informacji na temat Oracle'a należy zacząć od odwiedzenia strony domowej producenta pod adresem http://www.oracle.com. Podobnie do większości stron dużych firm, witryna Oracle'a została zaprojektowana głównie jako serwis rozpowszechniający informacje marketingowe, ale nie brakuje tam również szczegółowych danych dotyczących produktów Oracle'a oraz odnośników do informacji dodatkowych.
Osoby szukające informacji technicznych powinny skierować się raczej bezpośrednio na stronę główną sieci technologicznej Oracle'a (Oracle Technology Network) pod adres http://technet.oracle.com. Oferuje ona nie tylko możliwość ściągnięcia wersji oprogramowania Oracle'a, ale również pełne wersje elektroniczne dokumentacji oraz inne cenne informacje, przydatne w szczególności dla programistów. Jedyne ograniczenie, to obowiązek rejestracji (nie związany z żadnymi opłatami).
Wśród materiałów dostępnych w sieci są również niektóre z publikacji Oracle'a, między innymi Oracle Magazine (http://www.oramag.com) i Oracle Internet Developer (http://www.oracle.com/ideveloper).
Również omijając oficjalne strony Oracle'a można znaleźć garść interesujących rzeczy. Niesamowicie dużą ilość użytecznych informacji oferuje strona zatytułowana The Underground Oracle Frequently Asked Questions Web Site (Nieoficjalna strona najczęściej zadawanych pytań na temat Oracle'a) - http://www.orafaq.org. Witryna ta może się poszczycić dobrze przygotowaną stroną odnośników, zawierającą między innymi listę grup użytkowników Oracle'a na całym świecie, a także szereg list e-mailowych przeznaczonych dla programistów i administratorów korzystających z Oracle'a.
Lista odnośników znajduje się pod adresem http://www. orafaq.com/faqlink.htm.
#431
Osoby szukające szybkiej pomocy poprzez Internet mogą zwrócić się ze swoimi pytaniami do jednej z grup dyskusyjnych poświęconych Oracle'owi. Problemy techniczne baz danych Oracle omawiane są w trzech głównych grupach:
* comp.databases.oracle.misc;
* comp.databases.oracle.server;
* comp.databases.oracle.tools.

W praktyce

Oracle jest najczęściej używaną relacyjną bazą danych na świecie. Według raportu Dataquest z marca 1999 roku wykorzystanie baz danych Oracle w systemach Windows NT wynosiło 46.1%, natomiast w systemach UNIX 60.9 %. Ze względu na popularność Oracle'a, większość aplikacji baz danych jest budowana w pierwszej kolejności z myślą o współpracy właśnie z tym systemem, niezależnie od obsługi innych typów baz danych. Niemal wszelkie oprogramowania klasy "enterprise" posiada wbudowaną obsługę baz Oracle. Z drugiej strony, produkty Oracle'a cieszą się dobrą reputacją ze względu na skalowalność i stabilność, wyróżniającą je na tle konkurencji.
Jak wspomniano na wstępie tego rozdziału, jedną z głównych zalet Oracle'a jest fakt, iż bazy danych tej firmy mogą pracować na wielu różnych platformach systemowych, a co ważniejsze, platforma, na której uruchomiona została baza danych jest niewidoczna dla aplikacji komunikujących się z serwerem bazy. Oracle przejmuje na siebie wszelkie obowiązki związane z przechowywaniem danych oraz komunikowaniem się z aplikacjami przy użyciu standardowych protokołów sieciowych. O ile tylko system operacyjny obsługuje odpowiedni protokół, Oracle jest w stanie wykorzystać go do komunikacji z aplikacjami wykonywanymi przez odległe serwery.
Oracle jest uznawany za lidera w przemyśle bazodanowym pod względem oferowanych możliwości, ale niekoniecznie pod względem ceny. Produkty Oracle'a są niezwykle drogie - przynajmniej w porównaniu do umiarkowanych cen innych baz danych, takich jak Microsoft SQL Server. Ponadto Oracle praktykuje bizantyjską strukturę wyceny swoich produktów, którą zaadaptowali również dystrybutorzy oprogramowania, przez co określenie faktycznej ceny produktów Oracle'a staje się niemożliwe (znają ją prawdopodobnie wyłącznie przedstawiciele handlowi Oracle'a).
Licencje na uproszczone produkty Oracle'a można zakupić w sklepie internetowym Oracle'a, pod adresem: http://oraclestore.oracle.com.
Jeżeli nasze wymagania w zakresie bazy danych nie są zbyt wygórowane, poszukiwanie odpowiedniego rozwiązania możemy rozpocząć od odwiedzenia sklepu internetowego, a dopiero potem zwrócić się do biura handlowego Oracle'a.
Po zakupieniu serwera bazy danych Oracle oraz dodatkowych komponentów oprogramowania, całość trzeba zainstalować i uruchomić, a następnie nadzorować przez
#432
cały okres pracy. Istnieje powód, dla którego administratorzy baz danych Oracle są jednymi z najlepiej opłacanych pracowników w przemyśle komputerowym. Oracle jest produktem niezwykle skomplikowanym. Pomimo, że bazy danych Oracle są bardzo stabilne, utrzymanie serwera w najwyższej możliwej wydajności nie jest zadaniem łatwym.
Porównywanie baz danych Oracle'a do produktów takich jak Microsoft SQL Server pod względem kosztów administrowania jest w pewnym sensie nie fair, ze względu na skalowalność baz Oracle, pozwalającą im obsługiwać naprawdę duże zadania. Bazy danych Oracle mogą być wykorzystywane do realizacji zadań stawiających wysokie wymagania, którym nie jest w stanie sprostać wiele innych baz - wymaga to jednak czujnej opieki administratora bazy danych. Oracle nie jest jedynym producentem stojącym na szczycie przemysłu bazodanowego pod względem skalowalności, ale znajduje się w ścisłej czołówce.
Decyzja co do wyboru bazy danych, szczególnie gdy wymagania dyktują rozwiązania w zakresie cenowym Oracle'a, jest na ogół poza zasięgiem skromnego programisty baz danych. Dlatego też przeważająca większość osób zajmujących się pisaniem aplikacji współpracujących z bazami Oracle, nie wybierała tej bazy. Fakt ten jest prawdziwy w odniesieniu do większości platform baz danych. Koszt przestawienia się z jednej relacyjnej bazy danych na inną jest bardzo wysoki, dlatego też dostawca oprogramowania jest zazwyczaj wybierany na bardzo długi okres czasu.

Wyszukiwarka

Podobne podstrony:
22 Część VII Udostępnianie baz danych w sieci WWW Podsta
Projekt z baz danych część 1 Stokowska Paula
Wprowadzenie do baz danych
Podstawy baz danych zajecia 2 z SQL Tabela Biblioteka
2004 11 Porównanie serwerów relacyjnych baz danych Open Source [Bazy Danych]
IWZ 2 Podstawy baz danych
Analiza baz danych na temat materiałów betonopodobnych
wprowadzenie do baz danych
system baz danych
Administrator baz danych!3101

więcej podobnych podstron