Laboratorium 1
Transkrypt
Laboratorium 1
Bazy danych 2 – Laboratorium 1 SPOOL moj_plik zapisuje wszystkie wydane polecenia oraz ich wyniki do pliku moj_plik, np. spool 'c:\moj.txt' kończy wysyłanie danych do pliku SPOOL OFF uruchomienie skryptu z pliku moj_plik, np. @ 'c:\moj.txt' @ moj_ plik edycja bufora SQL w domyślnym edytorze edit CREATE TABLE tworzy strukturę tabeli wyświetla opis struktury tabeli DESCRIBE ALTER TABLE rozszerzanie i modyfikowanie schematu tabeli zmiana nazwy tabeli RENAME DROP TABLE usuwanie tabeli zmiana podłączenia do bazy CONNECT CONNECT USER_NAME DISCONNECT EXIT zmiana podłączenia do bazy dla użytkownika o nazwie user_name rozłączenie z bazą wyjście z programu Polecenia SQL mogą być rozmieszczone w kilku wierszach. Koniec polecenia SQL zakończ średnikiem. Dobrym zwyczajem jest umieszczanie klauzul od nowych linii. Nie wolno dzielić słowa pomiędzy wiersze. Dozwolone jest używanie małych lub wielkich liter, chyba że sprawdzamy zawartość pola. Dokumentacja Oracle 11 g pod adresem: http://docs.oracle.com/cd/E11882_01/appdev.112/e25519.pdf oraz http://docs.oracle.com/cd/B28359_01/server.111/b28286/toc.htm Literatura z zakresu Oracle w Bibliotece AJD/WMP. Zmiana hasła użytkownika: ALTER USER nazwa_użytkownika IDENTIFIED BY nowe_hasło; Opis wszystkich relacji bazy danych można odczytać odwołując się odpowiednim zapytaniem do perspektywy systemowej ALL_TABLES, a opis relacji danego użytkownika można odczytać za pomocą perspektywy USER_TABLES. SELECT table_name FROM USER_TABLES; Bazy danych 2 – Laboratorium 1 TWORZENIE TABEL create table nazwa_relacji ( nazwa_atrybutu typ (rozmiar) [default wartość domyślna] [ [ constraint nazwa_ogr.] ograniczenie_atr ], …, [ [ constraint nazwa_ogr.] ograniczenie_rel,…] ); Typy danych: number number ( r ) number ( r, n) liczby zapisane za pomocą cyfr (0-9), opcjonalnych znaków ( +, -, .); rozmiar liczby <= 38 cyfr rozmiar liczby <= r cyfr r łączna długość liczby, n liczba miejsc po przecinku ( jeśli n jest liczbą ujemną to wartość atrybutu jest zaokrąglana do n miejsc przed przecinkiem; char ( r) łańcuch znakowy o stałej długości; 1<= r <=255; varchar2 ( r) łańcuch znakowy o zmiennej długości; 1<= r <=2000; date od 1 stycznia 4712 p. n. e. do 31 grudnia 4712; long tak jak char; maks. długość łańcucha 2 GB - nie można definiować na nim indeksów ani ograniczeń integralności; - nie można wykorzystywać go w klauzulach: where, group by, order by, connect by, create table… as selecty… - w danej relacji co najwyżej jeden atrybut może być typu long; longraw dane dowolnego typu ( tj. obrazów, dźwięków); Ograniczenia: null wartości puste; not null bez wartości pustych; unique klucz unikalny relacji; primary key klucz podstawowy relacji (nie występuje przy ograniczeniu unique i odwrotnie); Bazy danych 2 – Laboratorium 1 foreign key | references referencja do klucza podstawowego lub unikatowego innej relacji ( do definicji klucza obcego); on delete cascade ograniczenie definiowane dla klucza obcego; przy usuwaniu krotki z relacji z kluczem podstawowym, usuwane są automatycznie krotki z relacji w której wartość klucza obcego jest równa wartości klucza podstawowego usuwanej krotki; check ( warunek) warunek, który musi być spełniony przez wszystkie wartości atrybutu; operatory ( =, <, !=, is null, like ( % - łańcuch o długości >= 0; _- pojedynczy between…and, in (…), and, or, not ); znak) Rozszerzanie i modyfikowanie schematu tabeli rozszerzanie i modyfikowanie schematu tabeli ALTER TABLE nazwa_tabeli ADD nazwa_atrybutu typ (rozmiar) [default wartość domyślna] [ [constraint nazwa_ogr] ograniczenie_atr ]; ADD [ constraint nazwa_ogr] ograniczenie_atr; dodanie kolumny do tabeli dodanie ograniczenia integralnościowego MODIFY nazwa_atrybutu typ (rozmiar) [default wartość domyślna] [ null | not null ]; modyfikowanie typu kolumny DISABLE | ENABLE unique | primary key | constraint nazwa_ogr [cascade] czasowe wyłączenie lub uaktywnienie ograniczenia integralnościowego DROP unique | primary key | constraint nazwa_ogr [cascade] usunięcie ograniczenia integralnościowego Zmiana nazwy tabeli rename stara_nazwa to nowa_nazwa; Usuwanie tabeli drop table nazwa_tabeli [cascade constraint]; , Bazy danych 2 – Laboratorium 1 Ćwiczenia: 1. Zdefiniować tabele zespol, etat i pracownik oschematach przedstawionych poniżej. zespol id_zesp nazwa number(2) klucz podstawowy varchar2(20) atrybut obowiązkowy nazwa placa_min placa_max varchar2(10) klucz podstawowy number(6,2) atrybut obowiązkowy, wartość > 0 number(6,2) atrybut obowiązkowy, wartość <= 5000 etat pracownik numer nazwisko etat szef pracuje_od placa podst placa_dod id_zesp • number(4) klucz podstawowy varchar2(15) atrybut obowiązkowy varchar2(10) klucz obcy referencja do atrybutu nazwa tabeli etat number(4) referencja do atrybutu numer tabeli pracownik date domyślna wartość daty bieżącej (sysdate lub current_date) number(6,2) wartość >0 number(6,2) domyślna wartość 0 number(2) klucz obcy referencja do atrybutu id_zesp tabeli zespol wyrażenia arytmetyczne - konstruowane są z nazw kolumn i literałów numerycznych z użyciem operatorów: dodawania (+), odejmowania (-), mnożenia (*) i dzielenia (/ ) (* i / maja wyższy priorytet od + i -; w przypadku operatorów o tej samej ważności wyrażenie wartościowane jest od lewej do prawej lub za pomocą nawiasów) • funkcje – przekształcają wartości kolumn i literałów, do których są stosowane (patrz plik Wybrane_funkcje_Oracle10g.pdf lub pod adresem http://docs.oracle.com/cd/B28359_01/server.111/b28286/toc.htm) • operator konkatenacji ( || ) - umożliwia łączenie wyświetlanych wartości różnych atrybutów w pojedyncze łańcuchy znaków • operatory algebraiczne: UNION, UNION ALL (sumy); INTERSECT (iloczynu); MINUS (różnicy) • Zapytanie hierarchiczne select... from... connect by prior... start with... order by... Klauzula connect by określa sposób łączenia wierszy relacji w drzewo. Na ogół występują po niej dwie kolumny, których identyczność, a dokładniej równość wartości w dwóch różnych wierszach, powoduje, że wiersze te łączy bezpośrednia krawędź konstruowanego drzewa. Słowo kluczowe prior występuje przy jednej z dwu kolumn klauzuli connect by. Precyzuje ono sposób konstrukcji drzewa – kolumna przy której występuje jest uważana za nadrzędną. W konstrukcji drzewa najpierw Bazy danych 2 – Laboratorium 1 jest pobierana wartość kolumny nadrzędnej, a następnie odszukiwane są wszystkie te wiersze, dla których wartość tę przyjmuje również kolumna podrzędna. W tworzonym drzewie wiersze te będą dziećmi wiersza, z którego pobrano wartość atrybutu nadrzędnego. W celu utworzenia drzewa wierszy jest konieczne wskazanie jego korzenia – klauzula start with. Po niej występuje warunek selekcjonujący wiersz, od którego rozpocznie się proces konstrukcji drzewa. Z procesem konstrukcji drzewa związana jest pseudokolumna level, której wartość określa poziom zagnieżdżenia poszczególnych węzłów drzewa. Przykład 1 select lpad(' ',2*(level-1)) || ' '||nazwisko||' '||etat s from pracownik connect by prior numer=szef start with szef is null order by id_zesp, level; Przykład 2 Najpierw zostanie odrzucony wiersz nie spełniający warunku klauzuli where. Następnie zostanie utworzone drzewo odwzorowujące zależności służbowe, z pominięciem poddrzewa wiersza nie spełniającego warunku podanego po operatorze and w klauzuli connect by. select id_zesp,numer,nazwisko from pracownik where nazwisko !='RAJSKI' connect by prior numer=szef and nazwisko !='PODGAJNY' start with szef is null order by id_zesp, level; ZMIENNE – umożliwiają parametryzowanie zapytań, które mogą być wielokrotnie wywoływane. Zmienne lokalne są poprzedzone znakiem &. Ich zasięg jest ograniczony do pojedynczego wykonania polecenia select, w którym zostały użyte. Zmienne globalne są poprzedzone znakami &&. Ich wartość może być określona jednokrotnie. Raz określona wartość zostaje zapamiętana w systemie i jest wykorzystywana przy każdorazowym odwołaniu się do reprezentującej ją zmiennej. Wprowadzane daty i napisy (jako wartości zmiennych lokalnych) muszą być ograniczone apostrofami. W celu uniknięcia wprowadzania apostrofów, możemy ograniczyć apostrofami samą zmienną. Podczas wykonywania polecenia jest również możliwe paramatryzowanie jego nazw kolumn, a nawet relacji. Przykład 3 select &kol1, &&kol2 from &relacja where id_zesp = &id_zesp and etat = '&&nazwa_etatu'; define – możemy sprawdzić, jakie zmienne sa zdefiniowane w systemie; define nazwa_zmiennej - możemy sprawdzić, czy zmienna została zdefiniowana w systemie; Bazy danych 2 – Laboratorium 1 define nazwa_zmiennej = wartość przez &. – możemy jawnie zdefiniować zmienną globalną. Odwołujemy się do niej Przykład 4 define; define kol2; define roczny_dochod = 'placa_pod*12'; Create [or replace] view nazwa_perspektywy [(atr1, atr2, ...)] as select ciało_polecenia_select [with check option]; Przykład 5 create view asystenci as select numer, nazwisko from pracownik where etat = 'asystent'; Przykład 6 create view pods_zesp(nazwa, placa_min,placa_max,placa_przec) as select nazwa, min(placa_pod), max(placa_pod), avg(placa_pod) from pracownik, zepsol where pracownik.id)zesp = zepsol.id_zesp group by nazwa; Aby usunąć perspektywy stosujemy polecenie: drop view nazwa_perspektywy; Licznik – jest obiektem, który automatycznie zwiększa swoją wartość po jego każdorazowym odczycie. Liczniki są używane zwykle do generowania unikalnych identyfikatorów wierszy. Licznik definiujemy poleceniem: create sequence [nazwa_użytkownika] nazwa_licznika [increment by liczba] [start with wartość_początkowa] [maxvalue wartość] [cycle/nocycle]; nazwa_użytkownika – jest opcjonalnym parametrem określającym użytkownika, który go utworzył. increment by – jest opcjonalnym parametrem określającym wartość o jaką będzie zwiększany licznik po każdym odczycie. start with – jest opcjonalnym parametrem określającym początkową wartość licznika cycle – powrót do wartości początkowej po osiągnięciu maksymalnej wartości maxvalue. Domyślnie licznik nie jest cykliczny. nextval – odczyt nowej wartości z licznika; curval – odczyt bieżącej wartości z licznika; Przykład 7 create sequence licznik increment by 1 start with 1 maxvalue 100 cycle;