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;

Podobne dokumenty