You are on page 1of 378

Oracle Database 10g:

Podstawy jĊzyka SQL II

m
PodrĊcznik uczestnika kursu • Tom I
y
d e
c a
e A
c l
r a
O ly
l & On
D17111PL21

n a e
Wydanie 2.1
GrudzieĔ 2006
t e r U s
D51459
I n
c l e
r a
O
Autor Copyright © 2007, Oracle. Wszelkie prawa zastrzeĪone.

Priya Vennapusa Niniejsza dokumentacja zawiera informacje stanowiące chronioną wáasnoĞü firmy
Oracle Corporation. Podano je na warunkach umowy licencyjnej, okreĞlającej
ograniczenia dotyczące ich uĪywania i udostĊpniania. Są one takĪe chronione przez
Wspóápraca i weryfikacja obowiązujące prawo autorskie. Zabrania siĊ odtwarzania (ang. reverse engineering)
techniczna oprogramowania. JeĞli ta dokumentacja jest dostarczana agencji rządowej USA
naleĪącej do Departamentu Obrony, jest objĊta „ograniczonymi prawami” i ma
Brian Boxx zastosowanie nastĊpujące oĞwiadczenie:
Andrew Brannigan Restricted Rights Legend
Zarko Cesljas
Use, duplication or disclosure by the Government is subject to restrictions for
Marjolein Dekkers commercial computer software and shall be deemed to be Restricted Rights software
Joel Goodman under Federal law, as set forth in subparagraph (c)(1)(ii) of DFARS 252.227-7013,
Nancy Greenberg Rights in Technical Data and Computer Software (October 1988).
Stefan Grenstad Niniejszej dokumentacji ani Īadnej jej czĊĞci nie wolno powielaü przy uĪyciu
Rosita Hanoman jakichkolwiek Ğrodków w Īadnej formie bez uprzedniej pisemnej zgody firmy Oracle
Angelika Krupp Corporation. KaĪde inne powielanie narusza prawo autorskie i moĪe byü Ğcigane
przez prawo cywilne lub karne.
Christopher Lawless
Malika Marghadi JeĞli ta dokumentacja jest dostarczana agencji rządowej USA nienaleĪącej do
Departamentu Obrony, jest objĊta „ograniczonymi prawam”, zgodnie z przepisami
Priya Nathan FAR 52.227-14, Rights in Data-General, wáącznie z poprawką III (lipiec 1987).
Ruediger Steffan
Zastrzega siĊ, Īe informacje zawarte w niniejszej dokumentacji mogą, bez
powiadomienia, ulec zmianie. W wypadku pojawienia siĊ jakichkolwiek wątpliwoĞci
Wydawca dotyczących dokumentacji prosimy o pisemny kontakt z dziaáem Education Products,
Oracle Corporation, 500 Oracle Parkway, Redwood Shores, CA 94065. Firma Oracle
Hemachitra K Corporation nie gwarantuje, Īe ta dokumentacja nie zawiera báĊdów.

lub zastrzeĪonymi znakami towarowymi firmy Oracle Corporation.

m y
Oracle i wszelkie odwoáania do produktów Oracle są znakami towarowymi

i mogą byü nazwami towarowymi odpowiednich wáaĞcicieli.

d e
Wszystkie inne nazwy produktów i firm są uĪywane wyáącznie w celu
lu identyfikacji

c a
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Spis treĞci

WstĊp

W Wprowadzenie
Cele W-2
Cele kursu W-3
Omówienie kursu W-4
Podsumowanie W-6

1 Kontrolowanie dostĊpu uĪytkowników


Cele 1-2
Kontrolowanie dostĊpu uĪytkowników 1-3
Uprawnienia 1-4
Uprawnienia systemowe 1-5
Tworzenie uĪytkowników 1-6
Systemowe uprawnienia uĪytkownika 1-7
Nadawanie uprawnieĔ systemowych 1-8
Co to jest rola 1-9
Tworzenie ról i nadawanie im uprawnieĔ 1-10
Zmiana hasáa 1-11
Uprawnienia obiektowe 1-12
m y
Nadawanie uprawnieĔ obiektowych 1-14
Przekazywanie uprawnieĔ 1-15
d e
Sprawdzanie nadanych uprawnieĔ 1-16
Odbieranie uprawnieĔ obiektowych 1-17 c a
Podsumowanie 1-19

e A
ûwiczenie 1: Omówienie 1-20

c l
2 Zarządzanie obiektami schematu
Cele 2-2
r a
Instrukcja ALTER TABLE 2-3
O ly
Dodawanie kolumny 2-5
Modyfikowanie kolumny 2-6
l & On
Usuwanie kolumny 2-7

n a e
Opcja SET UNUSED 2-8
Dodawanie wiĊzów:
e r
w: skáadnia
t s
skáadnia 2-10
U 2- 0
Dodawanie wi
ON DELETE n
wiĊzów
Ċzów 2-11

I
ETE CASCADE 2-12

c l e
Odraczanie wiĊzów
czanie wi
Usuwanie wiĊzów
wiĊzó
Ċzów 2-13
2-14

r a
Wyáączanie
Wyáą
Wáą
czanie wiĊzów
ączanie
Wáączanie
cza
ączanie
wi
wiĊzów
wi
2-15
2-16
O WiĊzy
Wi kaskadowe 2-18
Omówienie indeksów 2-20

iii
Instrukcja CREATE INDEX z klauzulą CREATE TABLE 2-21
Indeksy funkcyjne 2-23
Usuwanie indeksu 2-25
DROP TABLE ... PURGE 2-26
Instrukcja FLASHBACK TABLE 2-27
Tabele zewnĊtrzne 2-29
Tworzenie katalogu dla tabeli zewnĊtrznej 2-31
Tworzenie tabeli zewnĊtrznej 2-33
Tworzenie tabeli zewnĊtrznej za pomocą moduáu ORACLE_LOADER 2-35
Tworzenie zapytaĔ dla tabel zewnĊtrznych 2-37
Podsumowanie 2-38
ûwiczenie 2: Omówienie 2-39

3 Praca z bardzo duĪymi zbiorami danych


Cele 3-2
Operowanie danymi za pomocą zapytaĔ podrzĊdnych 3-3
Kopiowanie wierszy z innej tabeli 3-4
Wstawianie danych do kolumn wybranych przez zapytanie podrzĊdne 3-5
Pobieranie danych z uĪyciem zapytania podrzĊdnego jako Ĩródáa danych 3-7
Aktualizowanie dwóch kolumn za pomocą zapytania podrzĊdnego 3-8
Aktualizowanie wierszy na podstawie wartoĞci w innej tabeli 3-9
Usuwanie wierszy na podstawie wartoĞci w innej tabeli 3-10
m y
e
Korzystanie ze sáowa kluczowego WITH CHECK OPTION w instrukcjach DML 3-11
d
Omówienie funkcji jawnych wartoĞci domyĞlnych 3-12
Korzystanie z jawnych wartoĞci domyĞlnych 3-13
c a
Typy wielotabelowych instrukcji INSERT 3-16
e A
Omówienie wstawiania wielotabelowego za pomocą instrukcji INSERT 3-14

Wielotabelowe instrukcje INSERT 3-17


c l
r a
Bezwarunkowa instrukcja INSERT ALL 3-19
Warunkowa instrukcja INSERT ALL 3-20

O ly
Warunkowa instrukcja INSERT FIRST 3-22
Przestawna instrukcja INSERT 3-24 4
Instrukcja MERGE 3-27
l & On
Scalanie wierszy 3-29 9
n a e
Instrukcja MERGE: skáadnia 3-28

Zapytanie z klauzulą e r
ĝledzenie zmian danych 3-31

t U s
przykáad
lauzulą wersji: p ad 3-32

I n
Klauzula VERSIONS BETWEEN
BET 3-344

c e
Podsumowanie
umowanie 3-35
l
wiczenie 3: Om
ûwiczenie Omówienie 3-36

r a
4 Tworzenie raportów przez grupowanie wzajemnie powiązanych danych

O Cele 4-2
Omówienie
O funkcji grupowych 4-3

iv
Omówienie klauzuli GROUP BY 4-4
Omówienie klauzuli HAVING 4-5
Klauzula GROUP BY z operatorami ROLLUP i CUBE 4-6
Operator ROLLUP 4-7
Operator ROLLUP: przykáad operator CUBE 4-9
Operator CUBE: przykáad 4-10
Funkcja GROUPING 4-11
Funkcja GROUPING: przykáad 4-12
Operator GROUPING SETS 4-13
Operator GROUPING SETS: przykáad 4-15
Kolumny záoĪone 4-17
Kolumny záoĪone: przykáad 4-19
Konkatenowanie zbiorów grup 4-21
Konkatenowanie zbiorów grup: przykáad 4-22
Podsumowanie 4-23
ûwiczenie 4: Omówienie 4-24

5 Zarządzanie danymi w róĪnych strefach czasowych


Cele 5-2
Strefy czasowe 5-3
Parametr sesji TIME_ZONE 5-4
Funkcje CURRENT_DATE, CURRENT_TIMESTAMP i LOCALTIMESTAMP 5-5
m y
Funkcja CURRENT_DATE 5-6
d e
Funkcja CURRENT_TIMESTAMP 5-7
Funkcja LOCALTIMESTAMP 5-8
c a
Funkcje DBTIMEZONE i SESSIONTIMEZONE 5-9
Typ danych TIMESTAMP 5-10
e A
Typy danych TIMESTAMP 5-11
c l
Pola TIMESTAMP 5-12

r a
RóĪnica miĊdzy typem DATE i TIMESTAMP 5-13

O ly
Typ danych TIMESTAMP WITH TIMEZONE
Typ danych TIMESTAMP WITH TIMEZONE:
ONE 5-14
MEZONE: przykáad
przykáad 5-15

l & On
Typ danych TIMESTAMP WITH LOCAL TIMEZ ZONE 5-16
TIMEZONE
Typ danych TIMESTAMP WITH
Typy danych INTERVAL
n a e TIMEZONE: przykáad
ITH LOCAL TIMEZONE:
L 5-18
T przy 5-17

Pola INTERVAL 5-20

t
Typ danych INTERVAL e r U s
NTERVAL YEAR TO MONTH 5-21
5
Typ danych
I n
ch INTERVAL YEAR
Y ONT przykáad 5-22
TO MONTH:

c l e
Typ danych INTERVAL
INTERVA DAY TO SECOND 5-23
Typ danych INTERVAL
INT DAY TO SECOND: przykáad 5-24

r a
Funkcja EXTRACT
EXT 5-25

O
v
Funkcja TZ_OFFSET 5-26
Konwertowanie wartoĞci typu TIMESTAMP za pomocą funkcji FROM_TZ 5-28
Konwertowanie na wartoĞü typu TIMESTAMP za pomocą funkcji TO_TIMESTAMP
i TO_TIMESTAMP_TZ 5-29
Konwertowanie przedziaáów czasu za pomocą funkcji TO_YMINTERVAL 5-30
Korzystanie z funkcji TO_DSINTERVAL: przykáad 5-31
Czas letni 5-32
Podsumowanie 5-34
ûwiczenie 5: Omówienie 5-35
6 Pobieranie danych za pomocą zapytaĔ podrzĊdnych
Cele 6-2
Wielokolumnowe zapytania podrzĊdne 6-3
Porównania kolumn 6-4
Zapytanie podrzĊdne z porównaniem sparowanym 6-5
Zapytanie podrzĊdne z porównaniem niesparowanym 6-6
WyraĪenia skalarnych zapytaĔ podrzĊdnych 6-7
Skalarne zapytania podrzĊdne: przykáady 6-8
Skorelowane zapytania podrzĊdne 6-10
Korzystanie ze skorelowanych zapytaĔ podrzĊdnych 6-12
Korzystanie z operatora EXISTS 6-14
WyĞwietlanie pracowników, którzy mają co najmniej jednego podwáadnego 6-15
WyĞwietlanie dziaáów, w których nikt nie pracuje 6-16
Skorelowane zapytanie podrzĊdne aktualizujące (UPDATE) 6-17
m y
Skorelowane zapytanie podrzĊdne usuwające (DELETE) 6-20
d e
Korzystanie ze skorelowanego zapytania podrzĊdnego aktualizującego 6-18
18

Korzystanie ze skorelowanego zapytania podrzĊdnego usuwającego


Klauzula WITH 6-22 a
o 6-21
c
Klauzula WITH: przykáad 6-23
Podsumowanie 6-25
e A
ûwiczenie 6: Omówienie 6-27
c l
7 Hierarchiczne pobieranie danych
Cele 7-2 r a
O ly
Przykáadowe dane w tabeli EMPLOYEES S 7-3
Naturalna struktura drzewa 7-4
Zapytania hierarchiczne 7-5
l & On
Przechodzenie drzewa 7-6

n a e
6

Przechodzenie drzewa

t e r
Przechodzenie drzewa od doáu
doáu do góry

U s
zewa od góry do
óry 7-8
doáu
o do áu 7-9
WyĞwietlanie poziomu wierszy za pomocą
pomocą pseudokolumny
ps LEVEL 7-10
Formatowanie
Ucinanie
nie gaáĊziI n
anie raportów hierarchicznych
gaáĊzi 7-13
hie ych za
z pomocą pseudokolumny LEVEL i funkcji LPAD 7-11

c l e
Podsumowanie
dsumowanie 7-14
ûwiczenie 7: O
ûwiczenie
7
Omówienie 7-15

r a
O
vi
8 Obsáuga wyraĪeĔ regularnych
Cele 8-2
Omówienie wyraĪeĔ regularnych 8-3
Metaznaki 8-4
Korzystanie z metaznaków 8-5
Funkcje wyraĪeĔ regularnych 8-7
Funkcja REGEXP: skáadnia 8-8
Wykonywanie podstawowych wyszukiwaĔ 8-9
Sprawdzanie istnienia wzorca 8-10
Wydobywanie podnapisów: przykáad 8-11
ZastĊpowanie wzorców 8-12
WyraĪenia regularne i wiĊzy sprawdzania 8-13
Podsumowanie 8-14
ûwiczenie 8: Omówienie 8-15

Dodatek A: Rozwiązania üwiczeĔ

Dodatek B: Opisy i dane tabel

Dodatek C: Tworzenie zaawansowanych skryptów


Cele C-2
Korzystanie z jĊzyka SQL do tworzenia skryptów SQL C-3
Tworzenie podstawowego skryptu C-4
m y
Kontrolowanie Ğrodowiska systemowego C-5
d e
Zasady ogólne C-6
Umieszczanie zawartoĞci tabeli w pliku C-7
c a
Tworzenie dynamicznych predykatów C-9
Podsumowanie C-11
e A
Dodatek D: Skáadniki architektury Oracle
c l
Cele D-2
r a
O ly
Architektura bazy danych Oracle: omówienie
Fizyczna architektura bazy danych D-4
enie D-3

Pliki kontrolne D-5


l & On
Pliki dziennika powtórzeĔ D-6

n a e
Przestrzenie tabel i plikii danych D-7

t
Zarządzanie instancjami
r
Segmenty, obszaryy i bloki D-8
e U s
stancjami Oracle D-9
Struktury pamiĊci
Procesy I n
pamiĊci Oracle D-10
sy Oracle D-12
Inne
c l e
ne waĪne
waĪne struktury
strukt fizyczne D-13
Przetwarzanie instrukcji SQL D-14

r a
O
vii
àączenie z instancją D-15
Przetwarzanie zapytania D-17
Pula wspólna D-18
Buforowa pamiĊü podrĊczna bazy danych D-20
Globalny obszar programów (PGA) D-21
Przetwarzanie instrukcji DML D-22
Bufor dziennika powtórzeĔ D-24
Segment wycofaĔ D-25
Przetwarzanie instrukcji zatwierdzenia COMMIT D-26
Podsumowanie D-28

Dodatek E: Korzystanie z SQL Developer


Cele E-2
Co to jest Oracle SQL Developer? E-3
Cechy narzĊdzia E-4
Instalacja SQL Developer E-5
Menu SQL Developer E-6
Tworzenie poăączeĔ z baza danych E-7
WyĞwietlanie obiektów bazy danych E-9
Tworzenie obiektów schematu E-10
Tworzenie nowej tabeli: przykáad E-11
m y
Korzystanie z SQL Worksheet E-12
Wykonywanie poleceĔ SQL E-14
d e
Oglądanie planu wykonania E-15
Formatowanie kodu SQL E-16
c a
Korzystanie z snippets E-17

e A
Korzystanie z snippets : przykáad E-18
Korzystanie z SQL*Plus E-19
c l
Raportowanie bazy danych E-20
r a
Tworzenie raportów przez uĪytkownika E-21
21
Podsumowanie E-22
O ly
Indeks
l & On
ûwiczenia dodatkowe
n a e
ûwiczenia dodatkowe:
e r
we: Rozwiązania
Rozwiązania
t
ązania
U s
I n
c l e
r a
O
viii
WstĊp

m y
d e
ca
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
m y
d e
ca
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Charakterystyka

Przed rozpoczĊciem tego kursu


• Przed rozpoczĊciem tego kursu trzeba zdobyü praktyczne umiejĊtnoĞci posáugiwania siĊ
jĊzykiem SQL.

Wymagania wstĊpne
• Oracle Database 10g: Podstawy jĊzyka SQL I

Jak jest zorganizowany ten kurs


Oracle Database 10g: Podstawy jĊzyka SQL II to kurs prowadzony przez wykáadowcĊ,
skáadający siĊ
z lekcji oraz üwiczeĔ praktycznych. Prezentacje komputerowe i pisemne sesje üwiczeniowe
utrwalają poznawane pojĊcia i nabywane umiejĊtnoĞci.

m y
d e
c a
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
WstĊp - 3
Publikacje pokrewne

Publikacje dodatkowe
• biuletyny z informacjami o wydaniach systemu;
• podrĊczniki instalacji i podrĊczniki uĪytkownika;
• pliki read.me;
• artykuáy grupy IOUG (International Oracle User’s Group);
• Magazyn Oracle.

m y
d e
ca
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
WstĊp - 4
Konwencje typograficzne

Konwencje typograficzne w tekĞcie

Konwencja Element Przykáad


Pogrubienie WyróĪnienie w tekĞcie Do poruszania siĊ po aplikacji nie naleĪy
dotyczącym korzystania uĪywaü przycisków „Wstecz” i „Dalej”.
z przeglądarki.
Pogrubienie Terminy ze sáowniczka Ten algorytm wstawia nowy klucz.
i kursywa (jeĞli istnieje sáowniczek)
Nawiasy Nazwy klawiszy Nacisnąü klawisz [Enter].
kwadratowe
Pierwsza Przyciski, Nacisnąü przycisk „Executable”.
litera wielka, Pola wyboru, Zaznaczyü pole wyboru „Registration
reszta maáa wyzwalacze, Required”.
okna
Przypisaü wyzwalacz „When-Validate-
Item”.

Znak ĝcieĪki poleceĔ menu


y
Otworzyü okno „Master Schedule”.

m
Wybraü polecenie „File” > „Save”.
Save”.
wiĊkszoĞci
d e
Przecinki Sekwencje klawiszy
c a
Nacisnąü i puĞciü równoczeĞnie
ównoczeĞnie
nastĊpujące klawisze:
wisze:

e A[Alt], [F], [D]

c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
WstĊp - 5
Konwencje typograficzne (kontynuacja)

Konwencje typograficzne w tekĞcie (kontynuacja)

Konwencja Obiekt lub termin Przykáad


Czcionka Dane wynikowe, Dane wynikowe: debug.seti (‘I’,300);
Courier New, elementy kodu SQL Elementy kodu SQL: uĪyü polecenia SELECT do
istotna i PL/SQL, kod Javy,
wyĞwietlenia informacji przechowywanych w kolumnie
wielkoĞü liter nazwy katalogów,
last_name tabeli emp.
nazwy plików,
hasáa, ĞcieĪki, Elementy kodu Java: programowanie w jĊzyku Java
adresy URL, wymaga klas String i StringBuffer.
dane wpisywane Nazwy katalogów: bin (DOS), $FMHOME (UNIX)
przez uĪytkownika,
nazwy Nazwy plików: zlokalizowaü plik init.ora.
uĪytkowników Hasáa: uĪyü hasáa tiger.
ĝcieĪki: otworzyü katalog c:\my_docs\projects.
Adresy URL: przejĞü do strony
http://www.oracle.com.
00.
Dane wpisywane przez uĪytkownika: podaü wartoĞü 300.

my
Nazwy uĪytkowników: zalogowaü siĊ jako
uĪytkownik scott.
Pierwsza Etykiety graficzne
d e
Adres klienta (ale „Oracle Payables”))
litera wielka (jeĞli termin nie jest
nazwą wáasną)
c a
Kursywa WyróĪnione sáowa

e A Nie zapisywaü zmian w bazie danych.


i zwroty
w publikacjach,
c l WiĊcej informacjii moĪna
SQL serwera Oracle7
moĪna znale
Oracle7..
znaleĨü
Ĩü w PodrĊczniku jĊzyka
tytuáy ksiąĪek
r a
i kursów, zmienne Wpisaü user_id@us. s.o
user_id@us.oracle.com, gdzie user_id jest

O ly nazwą
wą uuĪytkownika.
Īytkownika
ka.
Znak plusa
l
klawiszy & On
Kombinacje Nacisnąü
Nacisnąü i przytrzyma
klawisze::
przytrzymaüü równ
prz równoczeĞnie nastĊpujące

na e [Cont
ntrol] + [Alt] + [[Delete]
[Control]
Cudzysáowy

t r U s
Tytuáyy lekcji
e ozdziaáów
i rozdziaáów
Ten temat jest omówiony w czĊĞci II, w lekcji 3. pod
tytuáem „Working
tytuáem „W with Objects.”

In w odno Ğnikach
odnoĞnikach,
elementy interfejsu
i Zaznaczyü pole wyboru „Include a reusable module

c l e component” i nacisnąü przycisk „Finish”.

r a UĪyü wáaĞciwoĞci „WHERE clause of query”.

O
WstĊp - 6
Konwencje typograficzne (kontynuacja)

Konwencje typograficzne w ĞcieĪkach nawigacyjnych


W tym kursie jest uĪywany uproszczony zapis ĞcieĪek nawigacyjnych. NastĊpujący przykáad omawia
instrukcjĊ poruszania siĊ po narzĊdziach Oracle Applications.
Przykáad:
Podsumowanie faktur partii towaru
(N) Invoice > Entry > Invoice Batches Summary (M) Query > Find (B) Approve

Uproszczoną postaü ĞcieĪki nawigacyjnej moĪna zinterpretowaü w nastĊpujący sposób:


1. (N) W oknie Nawigatora wybraü „Invoice > Entry > Invoice Batches Summary”.
2. (M) Z menu „Query” wybraü polecenie „Find”.
3. (B) Nacisnąü przycisk „Approve”.
Notacja:
(N) = Nawigator (I) = Ikona
(M) = Menu (H) = Hiperáącze
(T) = Karta (B) = Przycisk

m y
d e
c a
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
WstĊp - 7
m y
d e
ca
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Wprowadzenie

m y
d e
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Cele

Zagadnienia przedstawione w ramach tej


lekcji pozwalają:
• Wymieniaü cele niniejszego kursu.
• Opisywaü przykáadowe tabele uĪywane
w niniejszym kursie.

m y
d e
W-2 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II W-2
Cele kursu

Zagadnienia przedstawione w ramach niniejszego


kursu pozwalają:
• UĪywaü zaawansowanych technik SQL
do pobierania danych z tabel baz danych
• Stosowaü poznane zaawansowane techniki
w sytuacjach praktycznych.

m y
d e
W-3 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II W-3
Omówienie kursu

W niniejszym kursie są omawiane nastĊpujące


zaawansowane techniki SQL sáuĪące do
pobierania danych:
• Funkcje daty i godziny.
• Operatory ROLLUP, CUBE i GROUPING SETS.
• Zapytania hierarchiczne.
• Skorelowane zapytania podrzĊdne.
• Wstawienia wielotabelowe.
• Operacja scalania.
• Tabele zewnĊtrzne.
• UĪywanie wyraĪeĔ regularnych.
m y
d e
W-4 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II W-4
Tabele przykáadowe

EMPLOYEES DEPARTMENTS LOCATIONS

REGIONS COUNTRIES

m y
d e
W-5 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Tabele uĪywane w niniejszym kursie
e A
c l
Podczas niniejszego kursu są uĪywane nastĊpujące tabele: bele:

r a
EMPLOYEES: zawiera informacje o pracownikach:
stanowisk, zarobki, daty zatrudnienia, identyfikatory dziaáów
yfikatory dzia
nazwiska, identyfikatory
ach: imiona, nazw
áów ooraz identyfikatory

O ly
kierowników. Jest to tabela podrzĊdna wzgl wzglĊdem
Ċdem tabeli DEPARTMENTS.
DEPART
DEPARTMENTS: zawiera informacje
identyfikatory kierowników oraz
l & On dziaáach:
cje o dzia áach: identyfikatory
identyfikatory
az identyfikato
id dziaáów, nazwy dziaáów,
dz
Jest to tabela zawierająca klucz
ry lokalizacji. Je
gáówny, do którego odwoáuje

n a e
uje siĊ
siĊ tabela EMPLOYEES.
EMMPLOYEES.

zawierająca klucz t e r
LOCATIONS: zawieraa informacje o lokalizacjach
ulice, miasta, stany/prowincje,
lucz ggáówny,
U s
kody
ny/prowincje, kod
lo dziaáów: identyfikatory lokalizacji,
dz
dy pocztowe ooraz identyfikatory krajów. Jest to tabela
áówny, do którego odwoáuje
go odwo á siĊ tabela DEPARTMENTS, a takĪe jest
ona podrzĊdna
I n
Ċdna wzglĊdem
wzglĊdem tabeli COUNTRIES.
NTR

l e
COUNTRIES:

c
zawiera informacje o krajach: nazwy krajów, identyfikatory krajów oraz
NTRIES: zawier
identyfikatory regionów.
re Jest to tabela zawierająca klucz gáówny, do którego odwoáuje

r a
siĊ
siĊ tabela LOCATIONS,
REGIONS:
REGIO
LO a takĪe jest ona podrzĊdna wzglĊdem tabeli REGIONS.
zawiera informacje o regionach w poszczególnych krajach: identyfikatory
O regionów
regi oraz nazwy regionów. Jest to tabela zawierająca klucz gáówny, do którego odwoáuje
siĊ tabela COUNTRIES.

Oracle Database 10g: Podstawy jĊzyka SQL II W-5


Podsumowanie

Podczas tej lekcji przedstawiono nastĊpujące


zagadnienia:
• Cele kursu.
• Przykáadowe tabele uĪywane w niniejszym kursie.

m y
d e
W-6 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II W-6
Kontrolowanie dostĊpu uĪytkowników

m y
d e
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Cele

Zagadnienia przedstawione w ramach tej lekcji


pozwalają:
• OdróĪniaü uprawnienia systemowe od uprawnieĔ
obiektowych.
• Nadawaü uĪytkownikom uprawnienia do tabel.
• Sprawdzaü uprawnienia w sáowniku danych.
• Przydzielaü role.
• OdróĪniaü uprawnienia od ról.

m y
d e
1-2 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Cele
e A
c l
Podczas tej lekcji omówiono kontrolowanie dostĊpu do okreĞlonych
okreĞlonych obiektów
o bazy

r a
danych i dodawanie nowych uĪytkowników z róĪnymi
Īnymi poziomami
poziomam uprawnieĔ dostĊpu.

O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 1-2
Kontrolowanie dostĊpu uĪytkowników

Administrator
bazy danych

Nazwa uĪytkownika i hasáo


Uprawnienia

UĪytkownicy

m y
d e
1-3 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Kontrolowanie dostĊpu uĪytkowników
e A
c l
W Ğrodowisku wielu uĪytkowników waĪne jest kontrolowanie bezpieczeĔstwa dostĊpu
rolowanie bezpie

r a
do bazy danych i jej uĪytkowania. Zabezpieczenia
na wykonywanie nastĊpujących czynnoĞci:
ia serwera
serwera baz danych
d Oracle pozwalają

O ly
• kontrolowanie dostĊpu do bazy danych;
nych;

l & On
• nadawanie uprawnieĔ dostĊpuu do konkretnych
• sprawdzanie nadanych i otrzymanych
ch obiektów bazy
uprawnieĔ
baz danych;
rawnieĔ w sáowniku
trzymanych upra sáown danych Oracle;
• tworzenie synonimów
a e
w dla obiektów bazy

n
ba danych.

t e
systemu i zabezpieczenia r
Zabezpieczenia bazy danych mogą
s
mogą byü
byü podzielone na
ieczenia danych. Zabezpieczeni
U
n dwie kategorie: zabezpieczenia
Zabezpieczenia systemu obejmują kontrolowanie dostĊpu
do bazy danych
takie elementy,
I n
kontrolowanie korzystania
ych i kontrolowan zystania z niej na poziomie systemowym. SáuĪą do tego
menty, jak nazwy uĪytkowników, ów hasáa, ograniczenia przestrzeni dyskowej

mogą
c l
przydzielanej
e
dzielanej uuĪytkownikom
mogą wykonywaü.
Īytko oraz ograniczenia operacji systemowych, które uĪytkownicy
wykonywa Zabezpieczenia bazy danych natomiast dotyczą dostĊpu do obiektów bazy

r a
danych i uĪytkowania
obiektach.
obiektac
uĪ ich oraz czynnoĞci, które uĪytkownicy mogą wykonywaü na tych

O
Oracle Database 10g: Podstawy jĊzyka SQL II 1-3
Uprawnienia

• Zabezpieczenia bazy danych:


– zabezpieczenia systemowe;
– zabezpieczenia danych.
• Uprawnienia systemowe: uzyskiwanie dostĊpu
do bazy danych.
• Uprawnienia obiektowe: operowanie zawartoĞcią
obiektów bazy danych.
• Schematy: kolekcje obiektów, takich jak tabele,
perspektywy i sekwencje.

m y
d e
1-4 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Uprawnienia
e A
c l
Uprawnienie to zezwolenie na wykonywanie konkretnych SQL. Administrator bazy
tnych instrukcji S

r a
danych jest uĪytkownikiem wysokiego poziomu maj mającym
ącym zdolnoĞü tworzenia uĪytkowników
ącym zdolno
i nadawania im uprawnieĔ dostĊpu do bazy danych i jej obiektów.
obiek
iekt UĪytkownicy muszą mieü

O ly
uprawnienia systemowe, aby uzyskiwaü dostĊp
dostĊp do bazyy ddanych, oraz uprawnienia obiektowe,

l & On
aby operowaü zawartoĞcią obiektóww znajdujących
teĪ nadaü uprawnienia upowaĪniające
niające
ących siĊ
znajdujących
ące ich do nad
siĊ w bazie dan
danych. UĪytkownikom moĪna
nadawania dodatkowych
dodatk uprawnieĔ innym
uprawnie

n a e
uĪytkownikom lub rolom. Role to nazwane powiązanych
ne grupy powi ąza
ązanych uprawnieĔ.
uprawnie
Schematy

t
Schemat jest kolekcją
e r U s
lekcją obiektów, takich tabele, perspektywy i sekwencje. Schemat naleĪy
kich jak tabe
do uĪytkownika
I n
nika bazy danych i ma taką
ką samą
sam nazwĊ, jak dany uĪytkownik.
WiĊcejj informacji na tten temat moĪna znaleĨü w PodrĊczniku programisty aplikacji
l e
bazodanowych
azodanowych Ora
c Oracle 10g — Podstawy.

r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 1-4
Uprawnienia systemowe

• Jest dostĊpnych ponad 100 uprawnieĔ.


• Administrator bazy danych ma uprawnienia
wysokiego poziomu pozwalające mu na
wykonywanie m.in. nastĊpujących zadaĔ:
– tworzenie nowych uĪytkowników;
– usuwanie uĪytkowników;
– usuwanie tabel;
– tworzenie kopii zapasowych tabel.

m y
d e
1-5 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Uprawnienia systemowe
e A
c l
Jest dostĊpnych ponad 100 róĪnych uprawnieĔ systemowych,
mowych, które m moĪna nadaü

bazy danych.
r a
uĪytkownikom lub rolom. Uprawnienia systemowewe ssąą nadawane przez administratora

O ly
Typowe uprawnienia administratora a bazy danych

Uprawnienia systemowe
l & On
Autoryzowane operacje
utoryzowane op
peracje
CREATE USER
n a eUprawniony moĪe
y mo Īe tworzyü
tworzyü innych
i uĪytkowników Oracle.
DROP USER
t e r U s
Uprawniony
Uprawniony moĪe
moĪe usunąü
u innego uĪytkownika.
DROP ANY TABLE
ABLE
I n Uprawniony
U ony mo
schemacie.
moĪe usunąü dowolną tabelĊ w dowolnym

BACKUP
le
UP ANY TABLE

c
TABL Uprawniony moĪe wykonaü kopiĊ zapasową dowolnej tabeli
w dowolnym schemacie za pomocą narzĊdzia eksportującego.

ra
SELECT A
ANY TABLE Uprawniony moĪe tworzyü zapytania do tabel, perspektyw

O
CREATE ANY TABLE
CR
i zmaterializowanych perspektyw w dowolnym schemacie.
Uprawniony moĪe tworzyü tabele w dowolnym schemacie.

Oracle Database 10g: Podstawy jĊzyka SQL II 1-5


Tworzenie uĪytkowników

Administrator bazy danych tworzy uĪytkowników


za pomocą instrukcji CREATE USER.

CREATE USER user


IDENTIFIED BY password;

CREATE USER HR
IDENTIFIED BY HR;
User created.

m y
d e
1-6 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Tworzenie uĪytkownika
e A
c l
Administrator bazy danych tworzy uĪytkownika, wykonując
konując instrukcjĊ CREATE USER.
ąc instrukcj

r a
Utworzony uĪytkownik nie ma wtedy jeszcze Īadnych
dnych uprawnie
administrator. Uprawnienia te okreĞlają, co uĪytkownik
uprawnieĔĔ — musi mu je nadaü
Īytkownik moĪe
moĪe zrobiü na poziomie
bazy danych.
O ly
W omawianej skáadni: l & On
Na slajdzie pokazano skróconą skáadniĊ
adniĊ instrukcjii tworzenia
t uuĪytkownika.
Īytk

user
n a e
jest nazw
nazwąą tworzonego
tworzone
nego uuĪytkownika;
Īytkownik
password

t e r
okreĞla,
okreĞla, Īe

U s
Īe uĪytkownik
uĪytk
tkownik musi siĊ
acji na ten temat moĪna
WiĊcej informacji Īna znaleĨü
si zalogowaü za pomocą tego hasáa.
znaleĨü w rozdziaáach „GRANT” i „CREATE USER”
PodrĊcznika
I
ka jĊzyka
jĊzyka
n
Ċzyka SQL babazy danych Oracle
Ora 10g.
10g

c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 1-6
Systemowe uprawnienia uĪytkownika

• Po utworzeniu uĪytkownika administrator


bazy danych moĪe mu nadaü konkretne
uprawnienia systemowe.
GRANT privilege [, privilege...]
TO user [, user| role, PUBLIC...];
• Na przykáad programista bazy danych moĪe
mieü nastĊpujące uprawnienia systemowe:
– CREATE SESSION
– CREATE TABLE
– CREATE SEQUENCE


CREATE
CREATE
VIEW
PROCEDURE
m y
d e
1-7 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Typowe uprawnienia uĪytkownika
e A
c l
Administrator bazy danych po utworzeniu uĪytkownika moĪe
ika mo Īe mu nadaü
nad uprawnienia.
Uprawnienia systemowe
r a
Autoryzowanee operacje
CREATE SESSION
O ly siĊĊ z baz
àączenie si baząą danyc
danych.
ych.
CREATE TABLE

l & On
Tworzenie
orzenie tabel w schemacie
s
sekwencji
Tworzenie sek
uuĪytkownika.
Īytk
schemacie uĪytkownika.
ekwencji w schem
a e
CREATE SEQUENCE
CREATE VIEW
r n s
Tworzenie
enie perspektywy w schemacie uĪytkownika.
Tworzen
CREATE PROCEDURE
URE

n t e U Tworzenie
Tw skáadowanej
worzenie sk
w schemacie
áado procedury, funkcji lub pakietu
hemacie uĪytkownika.
W omawianej skáadni:
wianej sk
e Iáadni:
privilege
rivilege

c l
User | role | PUBLIC
jest nadawanym uprawnieniem systemowym;
jest nazwą uĪytkownika lub roli albo okreĞleniem

r a PUBLIC oznaczającym, Īe dane uprawnienie


ma byü nadane wszystkim uĪytkownikom.
OUwaga:
U BieĪące uprawnienia systemowe znajdują siĊ w perspektywie sáownika
SESSION_PRIVS.

Oracle Database 10g: Podstawy jĊzyka SQL II 1-7


Nadawanie uprawnieĔ systemowych

Administrator bazy danych moĪe nadaü uĪytkownikowi


konkretne uprawnienia systemowe.
GRANT create session, create table,
create sequence, create view
TO scott;
Grant succeeded.

m y
d e
1-8 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Nadawanie uprawnieĔ systemowych
e A
c l prawnienia syste
Administrator bazy danych nadaje uĪytkownikom uprawnienia systemowe za pomocą

uzyskaniu. r a uprawnieĔ natychmiast po ich


instrukcji GRANT. UĪytkownik moĪe korzystaü z tych uprawnieĔ

O ly
k „Scott” otrzymuje
W przykáadzie na slajdzie uĪytkownik otrzymu
muje uprawni
uprawnienia do tworzenia sesji,
tabel, sekwencji i perspektyw.
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 1-8
Co to jest rola

UĪytkownicy

Kierownik

Uprawnienia

Przyznawanie Przyznawanie
uprawnieĔ uprawnieĔ
bez roli w ramach roli

m y
d e
1-9 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Co to jest rola
e A
c l
Rola to opatrzona nazwą grupa powiązanych uprawnieĔ, ieĔ, które mogą
mogą byü
b przypisywane

r a
uĪytkownikom. Role bardzo uáatwiają nadawaniee i odbieranie up
UĪytkownik moĪe mieü przypisanych wielee ról, a ttĊĊ samą
samą rolĊ
uprawnieĔ.
ro Ċ moĪna przypisaü wielu
rol
O ly
uĪytkownikom. Role są zwykle tworzone kontekĞcie
ne w kontek konkretnej aplikacji bazodanowej.
Ğciee konkretne
Tworzenie i przypisywanie ról
l & On
Najpierw administrator bazy

n a e
tej roli odpowiednie uprawnienia,
rawnienia, po czym
cz
uutworzyüü rolĊ,
y danych musi utworzy rolĊ nastĊpnie
przypisaüü tĊ
przypisa
n moĪe nadaü
t rolĊ uĪytkownikom.
Skáadnia
t er U s
CREATE
W omawianej
awianej sk n
role;
E ROLE role;
I
skáadni:
áadni:

c l e
role jest nazwą
n tworzonej roli;

a
Po utworzeni
utworzeniu roli administrator bazy danych moĪe uĪyü instrukcji GRANT
r
zarówno do przypisania tej roli uĪytkownikowi, jak i do nadania uprawnieĔ tej roli.
O
Oracle Database 10g: Podstawy jĊzyka SQL II 1-9
Tworzenie ról i nadawanie im uprawnieĔ

• Utworzyü rolĊ.
• CREATE ROLE manager;
• Role created.
• Nadaü roli uprawnienia.
• GRANT create table, create view
• TO manager;
• Grant succeeded.
• Przypisaü rolĊ uĪytkownikom.
GRANT manager TO DE HAAN, KOCHHAR;
Grant succeeded.

m y
de
1-10
a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c
Tworzenie roli
e A
c l
Przykáad na slajdzie tworzy rolĊ kierownika. Rola ta otrzymuje uprawnienia
upraw potrzebne

r a
do tworzenia tabel i perspektyw. NastĊpnie rola kierownika zosta
„De Haan” i „Kochhar”. Od tej chwili ci dwaj
zostaje przypisana pracownikom
mogą tworzyü tabele
aj pracownicy mog
m
i perspektywy.
O ly
tymi rolami.
l & On
JeĞli uĪytkownik ma przypisanych kilka ró
ról, uzyskuje
l, to uzys uprawnienia związane z wszystkimi
yskuje uprawnie

n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 1-10
Zmiana hasáa

• Administrator bazy danych tworzy


konto uĪytkownika i nadaje mu hasáo.
• Hasáo moĪna zmieniü za pomocą
instrukcji ALTER USER.

ALTER USER HR
IDENTIFIED BY employ;
User altered.

m y
d e
1-11 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Zmiana hasáa
e A
c l
Administrator bazy danych tworzy konto i inicjalizujee has
hasáo kaĪdego
áo dla ka Īd uĪytkownika.

Skáadnia r a
Swoje hasáo moĪna zmieniü za pomocą instrukcji ALTER USER. USER

O ly
ALTER USER user IDENTIFIED BY password;
password
d;
W omawianej skáadni:
l & On
user
password
n a e nazwąą uuĪytkownika;
jest nazw
okreĞla
okreĞla nowe
Īytk
tkownika;
hasáo.
we has áo.
ChociaĪ ta instrukcja
t e r
moĪe
cja mo Īe byü
moĪliwoĞci. Aby z nich skorzy
U s
byü uĪyta
uĪyta tylko do zmiany
zm
skorzystaü, trzeba dysponowaü
dy
hasáa, daje ona wiele innych
uprawnieniem ALTER USER.
WiĊcej informacji
I n
nformacji na ten temat moĪna znaleĨü w PodrĊczniku jĊzyka SQL bazy
danych

c l e
ych Oracle 10g.
10g
Uwaga: W Ğrodowisku
Ğrod SQL*Plus wystĊpuje polecenie PASSWORD (PASSW), które moĪe byü

r a
uĪyte
uĪyte do zmiany
zm hasáa wówczas, gdy dany uĪytkownik jest zalogowany. To polecenie nie jest
jednak dostĊpne w Ğrodowisku iSQL*Plus.
O
Oracle Database 10g: Podstawy jĊzyka SQL II 1-11
Uprawnienia obiektowe

Obiekt Perspek-
Uprawnienie Tabela tywa Sekwencja Procedura

ALTER — —

DELETE — —

EXECUTE —

INDEX —

INSERT — —

REFERENCES — 

SELECT — —  —


UPDATE —
m
—y
d e
1-12
a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c
Uprawnienia obiektowe
e A
c l
Uprawnienie obiektowe to zezwolenie na wykonywanie nie konkretnej czczynnoĞci dla okreĞlonej

r a
tabeli, perspektywy, sekwencji lub procedury. Z ka
zbiór uprawnieĔ, które moĪna nadaü uĪytkownikom.
kaĪdym
Īdym obiektem jest związany konkretny
tabeli
wnikom. W tabel eli na slajdzie wymieniono

O ly
uprawnienia dla róĪnych obiektów. NaleĪy
które moĪna zastosowaü do sekwencji
Īy zauwaĪyü,
zauwaĪyü, ĪeĪe jedynymi
cji ssąą SELECT i ALTER.
jedynym uprawnieniami,
ALTER. Uprawnienia
Upra

l
REFERENCES i INSERT mogąą byü & On byü ograniczone
ograniczon one do okreĞlonego
UPDATE,
okreĞlone podzbioru kolumn,

n a e
w których dopuszcza siĊ aktualizacje.
tualizacje. UĪycie
UĪyci
w wyniku utworzenia perspektywy z podzbior
cie uprawnienia SELECT moĪe byü ograniczone
podzbiorem
po kolumn i przypisania tego uprawnienia
em kolu

t e r
tylko do tej perspektywy.
do tabeli odpowiadającej
wiadającej
U s
Uprawnienie
ktywy. Uprawnie enie do ssynonimu
ącej temu synonimowi.
onimowi.
ynonim jest konwertowane na uprawnienie

I n
c l e
O ra

Oracle Database 10g: Podstawy jĊzyka SQL II 1-12


Uprawnienia obiektowe

• KaĪdy obiekt ma swój zestaw uprawnieĔ.


• WáaĞciciel obiektu ma wszystkie uprawnienia
do danego obiektu.
• WáaĞciciel moĪe nadawaü innym uĪytkownikom
wybrane uprawnienia do swojego obiektu.
GRANT object_priv [(columns)]
ON object
TO {user|role|PUBLIC}
[WITH GRANT OPTION];

m y
d e
1-13 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Nadawanie uprawnieĔ obiektowych
e A
c l
Dla róĪnych typów obiektów schematu są dostĊpne róĪne uprawnienia. U UĪytkownik
Īyt automatycznie

r a
otrzymuje wszystkie uprawnienia obiektowe do obiektów
uĪytkownik moĪe nadawaü dowolne uprawnienia do w
tów zawartych w sswoim schemacie. KaĪdy
áasnych obie
wáasnych iek
obiektów w swoim schemacie

O ly
wszystkim innym uĪytkownikom lub rolom. JeJeĞli
WITH GRANT OPTION, to uprawniony uĪytkownik
nadawania
uĪytkownik bbĊdzie
Ċdzie
dawania uprawnienia doáączy siĊ klauzulĊ
Ğli podczas nada
mógáá nada
dz móg nadawaü to uprawnienie kolejnym

l & On
uĪytkownikom. W przeciwnym wypadkuadku dany uuĪytkownik
uprawnienia, ale nie moĪe go nadawaü
Īytkow
dawaü innym uuĪytkownikom.
Īytkownikom.
yt
moĪe
ownik mo korzystaü z otrzymanego
Īe korzy

W omawianej skáadni:
n a e
object_priv
ALL
t e r U s jest
est nadawanym uprawnieniem
je
okreĞla
okre
u
Ğla wszystkie
wszys
obiektowym;
uprawnienia do danego obiektu;
columns

I n okreĞla
okre
są og
Ğla kolumny
ko tabeli lub perspektywy do których
ograniczone nadawane uprawnienia;

TO
c l e
ON object jest obiektem, którego dotyczą nadawane uprawnienia;
okreĞla uĪytkownika (lub rolĊ), któremu nadaje siĊ

r a
PUBLIC
uprawnienia;
nadaje uprawnienia obiektowe wszystkim uĪytkownikom;

O WIT
WITH GRANT OPTION pozwala uprawnionym uĪytkownikom na nadawanie tych
samych uprawnieĔ obiektowych kolejnym uĪytkownikom
i rolom.

Oracle Database 10g: Podstawy jĊzyka SQL II 1-13


Nadawanie uprawnieĔ obiektowych

• Nadaü uprawnienia do tworzenia zapytaĔ


dla tabeli EMPLOYEES.
GRANT select
ON employees
TO sue, rich;
Grant succeeded.

• Nadaü uĪytkownikom i rolom uprawnienia


do aktualizowania konkretnych kolumn.
GRANT update (department_name, location_id)
ON departments
TO scott, manager;
Grant succeeded.
m y
d e
1-14
a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c
Wskazówki
e A
c l
• Aby nadaü uprawnienia do obiektu, obiekt ten musi
nadającego uprawnienia lub uĪytkownik ten musi uzyska
istnieüü w sche
usi istnie schemacie uĪytkownika
uzyskaüü uprawnienia
upr z klauzulą WITH
GRANT OPTION.
r a
• WáaĞciciel obiektu moĪe nadawaü wszystkie uprawnienia
szystkie uprawninienia do danego obiektu dowolnym
O ly
uĪytkownikom lub rolom w baziee danych.

l & On cznie uzyskuje wszystkie


• WáaĞciciel obiektu automatycznie
uĪytkow
w upraw
uprawnienia
ownicy „Sue” i „Rich”
W pierwszym przykáadzie na slajdzie uĪytkownicy „R
do swojego obiektu.
otrzymują uprawnienie do

n a eli EMPLOYEES.
tworzenia zapytaĔ dla tabeli EMPLOYEES S. W drugim przykáadzie
prz uĪytkownik „Scott” oraz

DEPARTMENTS.
t e rkują uprawnienie
rola kierownika uzyskują

U s ie UPDATE do ko konkretnych kolumn tabeli

I n
wnik „Sue” lub „R
JeĞli uĪytkownik
MPLOYEES, to musi
z tabeli EMPLOYEES,
„Rich” zechce te
m uĪyü instrukcji
str
teraz uĪyü instrukcji SELECT do uzyskania danych
o nastĊpującej skáadni:

c le
Innym rozwi
SELECT
rozwiązaniem
ązan
ązaniem
* FROM HR.employees;
jest utworzenie synonimu tej tabeli i uuĪycie go w instrukcji SELECT:

r a CREATE SYNONYM emp FOR HR.employees;


SELECT * FROM emp;

OUwaga: Zasadniczo uprawnienia systemowe nadaje administrator bazy danych. Wszyscy


Uwa
uĪytkownicy mogą natomiast nadawaü innym uprawnienia obiektowe do swoich wáasnych
obiektów.

Oracle Database 10g: Podstawy jĊzyka SQL II 1-14


Przekazywanie uprawnieĔ

• Zezwoliü uĪytkownikowi na przekazywanie uprawnieĔ


innym uĪytkownikom.
GRANT select, insert
ON departments
TO scott
WITH GRANT OPTION;
Grant succeeded.
• UmoĪliwiü wszystkim uĪytkownikom w systemie
tworzenie zapytaĔ dla tabeli DEPARTMENTS naleĪącej
do „Alice”.
GRANT select
ON alice.departments
TO PUBLIC;
Grant succeeded.
m y
d e
1-15
a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c
Sáowo kluczowe WITH GRANT OPTION
e A
c l
Uprawnienia nadane z klauzulą WITH GRANT OPTION mogąą by
ION mog byüü pprzekazane przez

r a
uprawnionego uĪytkownika kolejnym uĪytkownikom
uprawnienia nadane z klauzulą WITH GRANT
ikom lub rolom. Gdy odbiera siĊ komuĞ
OPTION, wó
T OPTION, wów
wówczas zostają one odebrane

O ly
równieĪ pozostaáym osobom lub rolom, którym przekaza zano te up
przekazano uprawnienia.

l & On
z uprawnieniami do tworzenia zapyta
nik „Scott” uzys
W przykáadzie na slajdzie uĪytkownik
dodaw
yskuje dost
uzyskuje Ċp do tabeli DEPARTMENTS
dostĊp
awania wierszy. Przykáad
zapytaĔĔ i dodawania P pokazuje równieĪ,
Īe uĪytkownik „Scott” moĪe
n a e
Īe te uprawnieninia przekazywa
uprawnienia przekazywaüü innym.
Sáowo kluczowe PUBLIC
UBLIC
li mo
WáaĞciciel tabeli
te r U
Īe przyznaü
moĪe
s
przyzn uprawnienia
rawnienia dostĊpu wszystkim uĪytkownikom, korzystając

I n
luczowego PUBLIC.
ze sáowa kluczowego PUB
ugim przyk
W drugim

c l e áadzi pokazano umoĪliwianie wszystkim uĪytkownikom systemu tworzenia


przykáadzie
apytaĔ dla tabeli DEPARTMENTS uĪytkownika „Alice”.
zapytaĔ

r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 1-15
Sprawdzanie nadanych uprawnieĔ

Perspektywa sáownika danych Opis

ROLE_SYS_PRIVS Uprawnienia systemowe nadane rolom

ROLE_TAB_PRIVS Uprawnienia do tabel nadane rolom

USER_ROLE_PRIVS Role dostĊpne dla uĪytkownika

USER_TAB_PRIVS_MADE Nadane uprawnienia obiektowe do obiektów


uĪytkownika

USER_TAB_PRIVS_RECD Uprawnienia obiektowe nadane uĪytkownikowi

USER_COL_PRIVS_MADE Nadane uprawnienia obiektowe


do kolumn obiektów uĪytkownika

USER_COL_PRIVS_RECD Uprawnienia obiektowe do konkretnych kolumn


nadane uĪytkownikowi

USER_SYS_PRIVS

m y wi
Uprawnienia systemowe nadane uĪytkownikowi

d e
1-16
a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c
Sprawdzanie nadanych uprawnieĔ
e A
c l
Próby nieautoryzowanego wykonania operacji, takiej jak usuni
usuniĊcie
Ċcie wiersza
w z tabeli, do której

r a
nie ma siĊ uprawnienia DELETE, są blokowane przez serwer Ora
JeĞli serwer Oracle podaje komunikat báĊdu o tre
treĞci
Oracle.
Ğci „tabelaa lub perspektywa nie istnieje”,
to przyczyna moĪe byü dwojaka:
O ly
l & On
• podano nazwĊ nieistniejącej tabeli lub perspek
• próbowano dla tabeli lub perspektywy wy
perspektywy;
pektywy;
wykonaüü operacjĊ,
wykona operacj do której nie ma siĊ
odpowiednich uprawnieĔ.
a e
wnieĔ.
n
Uprawnienia, którymi
na slajdzie opisuje
t
siĊĊ dysponuje,
mi si
e r U s moĪna
e, mo sprawdziü w sáowniku danych. Tabela
Īna sprawd
je róĪne perspek ywy sáownika danych.
róĪne perspektywy sáownika

I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 1-16
Odbieranie uprawnieĔ obiektowych

• Instrukcja REVOKE sáuĪy do odbierania


uprawnieĔ nadanych innym uĪytkownikom.
• Uprawnienia nadane innym w wyniku
uĪycia klauzuli WITH GRANT OPTION
równieĪ są odbierane.
REVOKE {privilege [, privilege...]|ALL}
ON object
FROM {user[, user...]|role|PUBLIC}
[CASCADE CONSTRAINTS];

m y
d e
1-17
a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c
Odbieranie uprawnieĔ obiektowych
e A
c l
Uprawnienia nadane innym uĪytkownikom moĪna odebraüebraü za pomocą
pomoc instrukcji REVOKE.

r a
Instrukcja ta powoduje odebranie uprawnieĔ jawnie
wnie podanym uuĪytkownikom
lub rolom, które otrzymaáy uprawnienia od tych wáaĞnie
ych w
Ī
áaĞnie uĪytkowników.
uĪytko
yt
oraz tym osobom

W omawianej skáadni:
O ly
Klauzula CASCADE jest wymagana
l & On
utworzonych do obiektu CONSTRAINTS
usuniĊcia
na w celu usuni
STRAINTS zaa sprawą
Ċcia wiĊzów integralnoĞci referencyjnej
wiĊzów int
sprawą uprawnienia
uprawn
WiĊcej informacji na ten
n a emoĪna
en temat mo znaleĨü
Īna zznale Ĩü w PodrĊczniku
Podr
REFERENCES.
jĊzyka SQL bazy
danych Oracle 10g.
g
t e r U s
I n
Uwaga: JeĞli na przyk
przykáad
mu siĊ uprawnienia,
áad któryĞ
któr z pracowników
racownik opuszcza firmĊ i z tego powodu odbiera
trzeba ponownie
prawnienia, to trz ie nadaü wszystkim uĪytkownikom uprawnienia

c l e
przekazane
uĪytkownika,
wczeĞniej
kazane im wcze Ğ przez tego pracownika. Gdy zamiast odbierania praw usuwa siĊ konto
wówczas wszelkie uprawnienia systemowe nadane przez niego innym osobom
Īytkownika, wó

ra
nie są
są naruszane.
narusz

O
Oracle Database 10g: Podstawy jĊzyka SQL II 1-17
Odbieranie uprawnieĔ obiektowych

Jako „Alice”, odebraü uprawnienia SELECT i INSERT


do tabeli DEPARTMENTS nadane uĪytkownikowi „Scott”.

REVOKE select, insert


ON departments
FROM scott;
Revoke succeeded.

m y
d e
1-18 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Odbieranie uprawnieĔ obiektowych (kontynuacja)
e A
c l
Przykáad na slajdzie odbiera uprawnienia SELECT i INSERT do tabe tabeli DEPARTMENTS
nadane uĪytkownikowi „Scott”.
r a
Uwaga: JeĞli uĪytkownik otrzymaá uprawnienie ienie z klauzul
klauzuląą WITH
WI GRANT OPTION, to moĪe
O ly
on nadawaü to uprawnienie równieĪ z klauzulą
lauzulą WITH GRANT G OPTION.
O Jest wiĊc moĪliwe

l & On
uzyskanie nawet dáugiego áaĔcuchaa uprawnionych
dopuszczalne zapĊtlenie tych uprawnie
uprawnieĔĔ (czyli
h uuĪytkowników.
Īytkowników Nie jest jednak
li nadanie ich komuĞ
ko wystĊpującemu juĪ
wczeĞniej w tym áaĔcuchu).
n a e
JeĞli
). JeĞli wáaĞciciel
wáaĞcicie uprawnienia uĪytkownikowi, który
iel odbierze upra

Na przykáad zaáóĪmy,
t e r
przekazaá je innym osobom,
obom, to odebran

U s odebranie
Īe uĪytkownik
Īmy, Īe
uprawnieĔĔ nastĊpuje kaskadowo.
ranie uprawnie
uĪytkownik A przyznaje
przyznaj uprawnienie SELECT do
tabeli uĪytkownikowi
I n
ownikowi B z klauzulą
kla
to samo uprawnienie uĪytkownikowi
uĪ y
WITH
ITH GRANT
G OPTION. UĪytkownik B nadaje
C i teĪ dodaje klauzulĊ WITH GRANT OPTION.

c l
Z kolei
e
lei uuĪytkownik
Īytkownik C nadaje to uprawnienie uĪytkownikowi D. JeĞli teraz uĪytkownik
A odbierze nadane
nadan uprawnienia uĪytkownikowi B, to zostaną one odebrane równieĪ

a
uĪytkownikom
uĪytkowniko C i D.
r
O
Oracle Database 10g: Podstawy jĊzyka SQL II 1-18
Podsumowanie

Podczas tej lekcji przedstawiono, jak korzystaü


z instrukcji kontrolujących dostĊp do bazy danych
i do obiektów bazodanowych.
Instrukcja CzynnoĞü
CREATE USER Tworzy uĪytkownika (zwykle jest to zadanie
administratora bazy danych)
GRANT Nadaje innym uĪytkownikom uprawnienia dostĊpu
do obiektów
CREATE ROLE Tworzy zbiór uprawnieĔ (zwykle jest to
zadanie administratora bazy danych)
ALTER USER Zmienia hasáo uĪytkownika
REVOKE Odbiera uĪytkownikom uprawnienia
do obiektu

m y
d e
1-19
a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c
Podsumowanie
e A
c l
Administratorzy bazy danych ustanawiają wstĊpne zabezpieczenia bazy danych, nadając
abezpieczenia ba
uĪytkownikom uprawnienia.
r a
• Administrator bazy danych tworzy uĪytkowników
tkowników i stawia
tawi im wymóg korzystania
staw

O ly
z haseá. Jest on takĪe odpowiedzialny
systemowych dla tych uĪytkowników.
lny za ustanawianie
wników.
ustanawia wstĊpnych
ianie wstĊ uprawnieĔ

l & On
• KaĪdy uĪytkownik po utworzeniu
orzeniu jakiegoĞ
jakiegoĞ obiektu moĪe
moĪe za pomocą instrukcji GRANT

uĪytkownikom.
n a e
przekazaü dowolne uprawnienia
prawnienia do teg
tego
ego obi
obiektu
ektu wyb
wybranym lub wszystkim

t e r U s
• Administratorr bazy danych mom Īe za pomocą
moĪe
lu przekazania kolekcji
rolĊ w celu k
pomocą instrukcji CREATE ROLE utworzyü
cji systemowych
systemo lub obiektowych uprawnieĔ wielu

I n
kownikom. Role uáatwiają nadawanie
uĪytkownikom.
UĪytkownicy mogą
• UĪytkownicy
nada i odbieranie uprawnieĔ.
mo zmieniaü swoje hasáa za pomocą instrukcji ALTER USER.

c l e
pomocą instrukcji
• Za pomocą in REVOKE moĪna odebraü uĪytkownikom nadane im uprawnienia.

r a Korzysta z perspektyw sáownika danych, uĪytkownicy mogą sprawdzaü, jakie


• Korzystając
maj uprawnienia, oraz znajdowaü osoby, które mają uprawnienia do ich obiektów.
mają

O • Za pomocą áączy bazy danych moĪna uzyskiwaü dostĊp do danych w zdalnych


bazach danych. Nie moĪna jednak nadawaü uprawnieĔ do zdalnych obiektów.

Oracle Database 10g: Podstawy jĊzyka SQL II 1-19


ûwiczenie 1: Omówienie

To üwiczenie obejmuje nastĊpujące zagadnienia:


• Nadawanie innym uĪytkownikom uprawnieĔ
do wáasnej tabeli.
• Modyfikowanie tabeli innego uĪytkownika
dziĊki uzyskanym uprawnieniom.
• Tworzenie synonimu.
• Tworzenie zapytaĔ dla perspektyw sáownika
danych związanych z uprawnieniami.

m y
d e
1-20 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
ûwiczenie 1: Omówienie
e A
c l
To üwiczenie obejmuje kontrolowanie dostĊpu do obiektów
biektów bazodanowych.
bazodano Uczestnicy kursu
powinni siĊ podzieliü na grupy.
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 1-20
ûwiczenie 1
Począwszy od zadania 6., rozwiązanie wymaga poáączenia siĊ z bazą danych za pomocą
Ğrodowiska iSQL*Plus. W tym celu na swoim komputerze naleĪy uruchomiü przeglądarkĊ
Internet Explorer i wpisaü w niej adres URL http://NAZWA_HOSTA:5561/isqlplus/,
a nastĊpnie zalogowaü siĊ na konto oraxx, uĪywając odpowiedniego hasáa i identyfikatora
usáugi (w formacie Tx) podanych przez prowadzącego.
1. Jakie uprawnienia powinny byü nadane uĪytkownikowi, aby mógá siĊ on zalogowaü
do serwera Oracle? Czy są to uprawnienia systemowe czy obiektowe?
_____________________________________________________________________
2. Jakie uprawnienia powinien uzyskaü uĪytkownik, aby móc tworzyü tabele?
_____________________________________________________________________
3. Kto moĪe przekazywaü innym uĪytkownikom uprawnienia, które uzyskaá
do cudzej tabeli?
_____________________________________________________________________
4. Zakáadając, Īe jest siĊ administratorem bazy danych i tworzy siĊ wielu uĪytkowników
wymagających tych samych uprawnieĔ, czego naleĪy uĪyü, aby uáatwiü sobie to
zadanie?
_____________________________________________________________________
5. Jakiego polecenia uĪywa siĊ do zmiany swojego hasáa?
_____________________________________________________________________
______
6. Nadaü innemu uĪytkownikowi prawa dostĊpu do swojej tabeli DEPARTMENTS
m y
NTS

d e
i uzyskaü od niego uprawnienie do tworzenia zapytaĔ dla jego tabeli DEPARTMENTS.
EPARTMENTS

tabeli DEPARTMENTS.
c a
7. Utworzyü zapytanie wypisujące wszystkie wiersze znajdujące siĊĊ we wáasnej
wáasnej

e A
c l
ra
O ly
l & On
n a e

t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 1-21
ûwiczenie 1 (kontynuacja)
8. KaĪdy zespóá ma za zadanie dodaü nowy wiersz do swojej tabeli DEPARTMENTS.
Pierwszy zespóá powinien dodaü dziaá „Education” o numerze „500”, a drugi
zespóá — dziaá „Human Resources” o numerze „510”. Utworzyü zapytanie
dla tabeli drugiego zespoáu.
9. Utworzyü synonim dla tabeli DEPARTMENTS drugiego zespoáu.
10. Utworzyü zapytanie zwracające wszystkie wiersze tabeli DEPARTMENTSdrugiego
zespoáu, uĪywając utworzonego synonimu.
Wyniki instrukcji SELECT pierwszego zespoáu:

m y
d e
c a
A
Wyniki instrukcji SELECT drugiego zespoáu:
espoáu:
e
c l
r a
O ly
l & On
n a e
t e r U s
… I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 1-22
ûwiczenie 1 (kontynuacja)
11. Utworzyü zapytanie dla sáownika danych USER_TABLES, aby uzyskaü informacjĊ
o wáasnych tabelach.

12. Utworzyü zapytanie dla perspektywy ALL_TABLES sáownika danych, aby uzyskaü
informacje o wszystkich tabelach, do których ma siĊ dostĊp, pominąwszy wáasne tabele.
Uwaga: Wyniki mogą siĊ róĪniü od pokazanych poniĪej.

m y

d e
c a
e
13. Odebraü drugiemu zespoáowi uprawnienie SELECT. A
c l
dokonane zmiany.
r a
14. Usunąü wiersz wstawiony do tabeli DEPARTMENTS
TMENTS w zadaniu
zada 8 i zatwierdziü

O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 1-23
m y
d e
ca
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Zarządzanie obiektami schematu

m y
d e
a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Cele

Zagadnienia przedstawione w ramach


tej lekcji pozwalają:
• Dodawaü wiĊzy.
• Tworzyü indeksy.
• Tworzyü indeksy za pomocą instrukcji
CREATE TABLE.
• Tworzyü indeksy funkcyjne.
• Usuwaü kolumny i ustawiaü je jako UNUSED.
• Przeprowadzaü operacje FLASHBACK.
• Tworzyü tabele zewnĊtrzne i uĪywaü ich.

m y
d e
2-2 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Cele
e A
c l
Podczas tej lekcji omówiono tworzenie i modyfikowanie oraz wiĊzów.
anie indeksów or

tworzenia wiĊzów klucza gáównego.


r a
Przedstawiono takĪe tabele zewnĊtrzne oraz zalety
ty nazywania indeksu
ind w chwili

O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 2-2
Instrukcja ALTER TABLE

Instrukcji ALTER TABLE uĪywa siĊ w celu:


• Dodawania kolumny.
• Modyfikowania istniejącej kolumny.
• Definiowania wartoĞci domyĞlnej
dla nowej kolumny.
• Usuwania kolumny.

m y
d e
2-3 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Instrukcja ALTER TABLE
e A
c l
Zdarza siĊ, Īe po utworzeniu tabeli zachodzi potrzebaa zmiany jej struk
struktury. Potrzeba

r a
ta moĪe wynikaü na przykáad z faktu pominiĊcia jakiejĞ
definicji jednej z kolumn lub usuniĊcia kolumny.
kolumny, koniecznoĞci zmiany
jakiejĞ kolumny
mny. Wszystkiee te czynnoĞci moĪna wykonaü
za pomocą instrukcji ALTER TABLE.
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 2-3
Instrukcja ALTER TABLE

Za pomocą instrukcji ALTER TABLE moĪna dodawaü,


modyfikowaü i usuwaü kolumny.
ALTER TABLE table
ADD (column datatype [DEFAULT expr]
[, kolumna typ_danych]...);

ALTER TABLE table


MODIFY (column datatype [DEFAULT expr]
[, column datatype]...);

ALTER TABLE table


DROP (column);

m y
d e
2-4
a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c
Instrukcja ALTER TABLE (kontynuacja)
e A
c l
Do dodawania, modyfikowania i usuwania kolumn tabeli
beli ssáuĪy instrukcja ALTER TABLE.
áuĪy instruk
W omawianej skáadni:
table r a
jest nazwą tabeli;
li;
ADD|MODIFY|DROP
O ly
okreĞla rodzaj
zaj modyfikacji
column
datatype
l & On
jest nazwą
okreĞla
zwą nowej kolumny;
eĞla typ danych
kolum
umny;
kolumnie oraz ich wielkoĞü;
h w nowej kolum
DEFAULT expr
n a e
okreĞla
okreĞla domyĞlną
domy l ą wartoĞü
yĞln wartoĞü dla nowej kolumny.

t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 2-4
Dodawanie kolumny

• Do dodawania kolumn sáuĪy klauzula ADD.


ALTER TABLE dept80
ADD (job_id VARCHAR2(9));
Table altered.

• Nowa kolumna staje siĊ ostatnią kolumną tabeli.

m y
d e
2-5
a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c
Wskazówki dotyczące dodawania kolumny
e A
c l
• MoĪna dodaü nowe kolumny lub zmodyfikowaü istniejące.
• Nie moĪna okreĞliü pozycji w tabeli, w której
istniejące.
ące.
ej zostanie umies
umieszczona nowa kolumna.

r a
Nowa kolumna staje siĊ ostatnią kolumnąą tabeli.

O ly
W przykáadzie na slajdzie do tabeli DEPT80
ta staje siĊ ostatnią kolumną tabeli.
T80 jest dodawana
dodawa kolumna o JOB_ID. Kolumna
wana kolu

l
Uwaga: JeĞli w momencie dodawania & On
dawania nowej kolumny
k tabela juĪ zawiera wiersze, to
w kaĪdym z wierszy wartoĞcią
n a e
Ğcią tej kolumny
ny bbĊdzie NULL Do tabeli zawierającej dane nie
Ċdzie NULL.

beli.
tylko do pustej tabeli.
t e r
moĪna dodawaü nowejj kolumny z wiĊzami

U s wiĊzami NOT NULL.


NU Taką kolumnĊ moĪna dodawaü

I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 2-5
Modyfikowanie kolumny

• MoĪna zmieniü typ danych, ich wielkoĞü


oraz domyĞlną wartoĞü kolumny.
ALTER TABLE dept80
MODIFY (last_name VARCHAR2(30));
Table altered.

• Zmiana domyĞlnej wartoĞci ma wpáyw tylko


na dane wstawiane po dokonaniu tej zmiany.

m y
d e
2-6 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Modyfikowanie kolumny
e A
c l
Do modyfikowania definicji kolumny sáuĪy instrukcja ALTER TABLE
Modyfikacja kolumny moĪe polegaü na zmianie jej
TABL z klauzulą MODIFY.
ej typu danych, w
wielkoĞci danych lub
wartoĞci domyĞlnej.
r a
Wskazówki
O ly
• MoĪna zwiĊkszyü szerokoĞü (precyzjĊ)
precyzjĊ) kolumny
mny liczbowej.
kolumn
• MoĪna zwiĊkszyü szerokoĞü
l & On
Ğü kolumny liczbowej
liczb kolumny tekstowej.
zbowej lub kolum
• SzerokoĞü kolumny mo
- kolumna zawiera
n a e
moĪna
Īna zmniejszyü
zmniejszyyü tylko w nastĊpujących
wartoĞci
rtoĞci NULL;
wiera tylko warto
nastĊ wypadkach:

- tabela nie
- szerokoĞü
r U s
ie ma wierszy;
t e
okoĞü kolumny nie momoĪeĪe staü
staü siĊ
s mniejsza niĪ wymagana przez wartoĞci

I n
istniejące
ące w danej
istniejące
• Typ danych moĪna
dan kolumnie. ie.
moĪ zmieniü wówczas, gdy kolumna zawiera tylko wartoĞci NULL.

byüc l e
Wyjątkiem
Wyjątkiem
ątkiem od
o tej regu
byü przeprowadzona
prze
reguáy jest konwersja z typu CHAR na VARCHAR2, która moĪe
równieĪ dla kolumn z niepustymi danymi.

ra
• Typ kolumny moĪna zmieniü z CHAR na VARCHAR2 lub odwrotnie (z VARCHAR2

O na CHAR) tylko wówczas, gdy dana kolumna zawiera wartoĞci NULL lub gdy nie
zmienia siĊ rozmiaru jej danych.
• Zmiana domyĞlnej wartoĞci kolumny ma wpáyw tylko na dane wstawiane po dokonaniu
tej zmiany.

Oracle Database 10g: Podstawy jĊzyka SQL II 2-6


Usuwanie kolumny

Klauzula DROP COLUMN sáuĪy do usuwania


z tabeli niepotrzebnych kolumn.
ALTER TABLE dept80
DROP COLUMN job_id;
Table altered.

m y
d e
2-7 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Usuwanie kolumny
e A
c l
Do usuwania kolumny z tabeli sáuĪy instrukcja ALTER
R TABLE z klauzulą
kla DROP COLUMN.
Wskazówki
• Kolumna moĪe zawieraü dane. r a
O ly
• Za pomocą instrukcji ALTER TABLE BLE momoĪna
Īna w danym
d momencie usunąü
mo
tylko jedną kolumnĊ.

l & On
• Po zmianie tabela musi zawieraü najmniej
awieraü co najmmniej jedną
jedną kolumnĊ.
kolu
• UsuniĊcie kolumny jest
n a e
nieodwracalne.
est nieodwracaln
alne.
• Nie moĪna usunąü
jeĞli nie dodano
• JeĞli kolumna t e r
ąü kolumny bĊdącej
s bĊdącej
usuwania
ano opcji usuwan
umna zawiera du U
czĊĞcią
ącej cz ĊĞcią wiĊzów
kaskadowego.
nia kaskadoweg
duĪo danych,
wi lub klucza indeksu,

nych, to jej usuniĊcie moĪe trochĊ potrwaü. W takim


wypadku
I n
padku lepszym rozwiązaniem
ro moĪe byü oznaczenie tej kolumny jako nieuĪywanej
m

c l e
i usuniĊcie
usuniĊcie jej dopiero
to w unikniĊciu
unikni
d wówczas, gdy w systemie jest maáo uĪytkowników. PomoĪe
zablokowania bazy danych.

czĊĞür
Uwaga:
a
Uwaga: Niektórych
Ni
czĊĞü klucza
kl
kolumn w ogóle nie moĪna usunąü. NaleĪą do nich kolumny stanowiące
tworzenia partycji tabeli podzielonej na partycje lub kolumny stanowiące czĊĞü
Oklucza
klu gáównego tabeli indeksowanej.

Oracle Database 10g: Podstawy jĊzyka SQL II 2-7


Opcja SET UNUSED

• Opcji SET UNUSED uĪywa siĊ do oznaczania


wybranych kolumn jako nieuĪywanych.
• Opcja DROP UNUSED COLUMNS sáuĪy do usuwania
kolumn oznaczonych jako nieuĪywane.
ALTER TABLE <table_name>
SET UNUSED(<column_name>);
OR
ALTER TABLE <table_name>
SET UNUSED COLUMN <column_name>;

ALTER TABLE <table_name>


DROP UNUSED COLUMNS;

m y
de
2-8
a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c
Opcja SET UNUSED
e A
c l
Opcja SET UNUSED pozwala oznaczyü wybrane kolumny lumny jako nieuĪywane,
nieuĪ w celu

r a
usuniĊcia ich dopiero wówczas, gdy zmniejszy siĊĊ zapotrzebowanie
zapotrzebowan na zasoby systemu.
UĪycie tej klauzuli nie usuwa fizycznie tych kolumn (tzn. nie ppowoduje odzyskania

O ly wej). DziĊki
zajmowanej przez nie przestrzeni dyskowej).
UNUSED wymaga mniej czasu niĪ wykonanie klauzuli
DziĊki tem
klauzu
mu wykon
temu wykonanie klauzuli SET
DROP. NieuĪywane
zuli DROP. Nie kolumny są

l & OnsuniĊte, mimo Īe


traktowane tak, jakby zostaáy usuniĊte, Īe dane z tych kolumn
ko pozostają jeszcze

n a eaczeniu kolumn
w wierszach tabeli. Po oznaczeniu n jako
j UNUSED nie moĪna juĪ uzyskaü do
nich dostĊpu. Zapytanie SELECT * nie zwróci danych z nieuĪywanych kolumn. Ponadto

a do tabeli moĪna
t er
na dodaü
U s
ywanych kolumn
nazwy i typy nieuĪywanych
dodaü nową
mn nie bbĊdą
nową kolumnĊ
Ċdą wyĞwietlane
wyĞ
mnĊ o nazwie
przez instrukcjĊ DESCRIBE,
nazw pokrywającej siĊ z nazwą kolumny
nej. Informacje kklauzuli SET
nieuĪywanej.
I n T UN
sáownika.
UNUSED są przechowywane w perspektywie

c e
_UNUSED_COL
USER_UNUSED_COL_TABS
l
Uwaga: Oznaczaniem
Oznacz kolumn jako UNUSED rządzą zasady podobne do zasad

r a kol
usuwania kolumny.

O
Oracle Database 10g: Podstawy jĊzyka SQL II 2-8
Opcja DROP UNUSED COLUMNS
Klauzula DROP UNUSED COLUMNS usuwa z tabeli wszystkie kolumny oznaczone
jako UNUSED. MoĪna uĪyü tej instrukcji wówczas, gdy pojawia siĊ potrzeba odzyskania
dodatkowej przestrzeni dyskowej zajmowanej przez nieuĪywane kolumny tabeli. JeĞli
w tabeli nie ma takich kolumn, to instrukcja nie zwraca báĊdów.
ALTER TABLE dept80
SET UNUSED (last_name);
Table altered.

ALTER TABLE dept80


DROP UNUSED COLUMNS;
Table altered.

m y
d e
c a
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 2-9
Dodawanie wiĊzów: skáadnia

Instrukcji ALTER TABLE moĪna uĪywaü


do wykonywania nastĊpujących czynnoĞci:
• Dodawanie lub usuwanie wiĊzów
bez modyfikowania ich struktury.
• Wáączanie i wyáączanie wiĊzów.
• Dodawanie wiĊzów NOT NULL
za pomocą klauzuli MODIFY.
ALTER TABLE <table_name>
ADD [CONSTRAINT <constraint_name>]
type (<column_name>);

m y
d e
2-10 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Dodawanie wiĊzów
e A
c l
Do dodawania wiĊzów do istniejącej tabeli sáuĪy instrukcja
rukcja ALTER TABLE
z klauzulą ADD.
W omawianej skáadni: r a
table
O ly
jest nazwą tabeli;
constraint jest nazwą wiĊzów;
type okreĞla typ
l & On
zów;
wiĊzów;
p wi Ċzów;
column jest nazwą
n a e
azwą kolumny, kktórej dotyczą
dotyczą tworzone
tw wiĊzy.

wiĊzów, to system
t e r
wygeneruje
U
je s
Nazwa wiĊzów jest opcjonalna, cho
choüü zalecana. JeĞli
automatycznie.
m wygeneruje automatycznie
JeĞli nie poda siĊ wáasnych nazw

Wskazówki
• MoĪna
ki
I
oĪna dodaü,n
dodaü, usunąü,
usu wáączyü i wyáączyü wiĊzy, lecz nie moĪna zmieniü ich struktury.

c l e
WiĊzy NOT NULL
• WiĊzy N moĪna dodaü do istniejącej kolumny za pomocą instrukcji ALTER
TABLE z klauzulą MODIFY.

r a
Uwaga: KolumnĊ
K z wiĊzami NOT NULL moĪna zdefiniowaü tylko wtedy, gdy tabela

Ojest pusta
p lub w kaĪdym wierszu kolumna ta ma niepuste wartoĞci.

Oracle Database 10g: Podstawy jĊzyka SQL II 2-10


Dodawanie wiĊzów

Do tabeli EMP2 dodaü wiĊzy FOREIGN KEY


oznaczające, Īe kierownik musi juĪ istnieü
w tabeli EMP2 jako poprawny pracownik.
ALTER TABLE emp2
modify employee_id Primary Key;
Table altered.

ALTER TABLE emp2


ADD CONSTRAINT emp_mgr_fk
FOREIGN KEY(manager_id)
REFERENCES emp2(employee_id);
Table altered.

m y
de
2-11
a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c
Dodawanie wiĊzów (kontynuacja)
e A
c l
W pierwszym przykáadzie na slajdzie do kolumny EMPLOYEE_ID
MPLOYEE_ID w tabeli EMP2 dodano

r a
wiĊzy PRIMARY KEY. NaleĪy zauwaĪyü, Īe niee podano nazwy w
nazwane automatycznie przez serwer Oracle.. W drugim przy
wiĊzów i Īe zostaáy one
przykáadzie
zyk do tabeli EMP2 zostaáy

istniejącym w tabeli EMP2. O ly


dodane wiĊzy FOREIGN KEY. Gwarantują ują one, Īe
Īe kierownik
kierow jest poprawnym pracownikiem
ownik jes

l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 2-11
ON DELETE CASCADE

Powoduje, Īe wraz z kluczem nadrzĊdnym


zostają usuniĊte wiersze podrzĊdne.
ALTER TABLE Emp2 ADD CONSTRAINT emp_dt_fk
FOREIGN KEY (Department_id)
REFERENCES departments ON DELETE CASCADE);
Table altered.

m y
d e
2-12 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
ON DELETE CASCADE
e A
c l
Opcja ON DELETE CASCADE sprawia, Īe klucz nadrzĊdny,drzĊdny, do któr
którego odwoáuje siĊ tabela

r a Īe zostaü
podrzĊdna, moĪe zostaü usuniĊty, chociaĪ nie moĪe zostaü zaktualizowany.
zaktua
wczas to samo dzieje
w kluczu nadrzĊdnym zostaną usuniĊte, wówczas dz
JeĞli dane
dzie siĊ z wszytkimi wierszami

O ly
w tabeli podrzĊdnej zaleĪącymi od tych danych. Aby uw
podaü w definicji wiĊzów FOREIGN KEY opcjĊopcjĊ ON
wzglĊdni takie powiązania, naleĪy
uwzglĊdniü

l & On N DELETE CASCADE.


C

n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 2-12
Odraczanie wiĊzów

WiĊzy mogą mieü nastĊpujące atrybuty:


• DEFERRABLE lub NOT DEFERRABLE
• INITIALLY DEFERRED lub INITIALLY
IMMEDIATE Odraczanie wiĊzów
ALTER TABLE dept2
w momencie ich tworzenia
ADD CONSTRAINT dept2_id_pk
PRIMARY KEY (department_id)
DEFERRABLE INITIALLY DEFERRED

Zmiana atrybutów
SET CONSTRAINTS dept2_id_pk IMMEDIATE konkretnych wiĊzów

ALTER SESSION
SET CONSTRAINTS= IMMEDIATE
m y Zmiana wszystkich wiĊzów
w sesji

d e
2-13
a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c
Odraczanie wiĊzów
e A
c l
MoĪna odroczyü sprawdzanie poprawnoĞci wiĊzów aĪ do chwili zakoĔczenia
WiĊzy nazywa siĊ odroczonymi wówczas, gdy system stem sprawdza czy
zakoĔ transakcji.
cz są one speánione tylko

r a
w momencie zatwierdzenia transakcji. JeĞli odroczone
zatwierdzenia wymusza wycofanie transakcji.
roczone wiĊzy
JeĞli
kcji. Je
wiĊzy nie
Ğli wiĊzy
wiĊzyy są
n są speánione, to instrukcja
są natychmiastowe
nat (tzn. nie są
O ly
odroczone), to są sprawdzane po kaĪdej ej instrukcji. JeĞli
l nie są
JeĞli są speánione,
spe to dana instrukcja

l & On
zostaje natychmiast wycofana. JeĞlii wiĊzy
DELETE CASCADE), to dziaáanie
wiĊzy powodują
zawsze
dują wykonanie jakiegoĞ
powoduj
wsze traktowane jako
anie to jest zawsz j
j dziaáania (na przykáad
czĊĞü instrukcji, która je

n a e
wywoáaáa, niezaleĪnie od tego,
instrukcji SET CONSTRAINTS
ego, czy wiĊzy
wiĊzy są
RAINTS do okreĞlenia,
są odroczone, czy
okrreĞlenia, czy dla
cz natychmiastowe. NaleĪy uĪyü
dl konkretnej transakcji odraczalne wiĊzy
są sprawdzane po ka

t e rkaĪdej

U s
Īdej instrukcji DML,
celu utworzeniaa odraczalnych wiĊzów,
D dopiero w momencie zatwierdzenia transakcji. W
czy dopi
w ów, trzeba utworzyü
u dla nich nieunikatowy indeks.
WiĊzy moĪna
I
lub wstĊpnie
n
Īna definiowaü
definiowaü jako
j
Ċpnie natychmiastowe.
natychmia
odraczalne
alne lub nieodraczalne oraz jako wstĊpnie odroczone
Atrybuty te moĪna okreĞlaü niezaleĪnie dla wszystkich wiĊzów.

c
dziaáu l e
Scenariusz zastosowania: ZaáoĪenia przyjĊte w firmie nakazują, aby numer
cenariusz zast
dziaáu 40. zostaá
zost zamieniony na 45. Zmiana w kolumnie DEPARTMENT_ID wpáywa

r a
na dane pracowników
pr zatrudnionych w tym dziale. Dlatego naleĪy sprawiü, aby klucz

Ogáówny
gáówny i klucze obce byáy odraczalne oraz wstĊpnie odroczone. NastĊpnie aktualizuje
siĊ
si informacje o dziale i pracownikach, a wszystkie wiersze zostają zweryfikowane
w momencie zatwierdzenia caáej transakcji.

Oracle Database 10g: Podstawy jĊzyka SQL II 2-13


Usuwanie wiĊzów

• Usunąü wiĊzy dotyczące kierowników


w tabeli EMP2.
ALTER TABLE emp2
DROP CONSTRAINT emp_mgr_fk;
Table altered.

• Usunąü wiĊzy PRIMARY KEY w tabeli DEPT2


oraz związane z nimi wiĊzy FOREIGN KEY
w kolumnie EMP2.DEPARTMENT_ID.

ALTER TABLE dept2


DROP PRIMARY KEY CASCADE;
Table altered.
m y
d e
2-14
a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c
Usuwanie wiĊzów
e A
c l
Aby usunąü wiĊzy, naleĪy najpierw odnaleĨü ich nazwĊ perspektywach
wĊ w perspektyw

r a
USER_CONSTRAINTS oraz USER_CONS_COLUMNS LUMNS ssáownika
a nastĊpnie uĪyü instrukcji ALTER TABLE z klauzulą
áownika danych,
klauzulą DROP.
DROP P. Opcja CASCADE

O ly
klauzuli DROP powoduje, Īe wszystkie zale
zaleĪne
Īne wiĊzy
wiĊzy równieĪ
równie
ró Ī zostaną usuniĊte.
Skáadnia

l & On
ALTER TABLE table
DROP PRIMARY KEY
n a e
EY | UNIQUE
E (column)
(column) |
CONSTRAINT
AINT

t e
W omawianejj skáadni:
skáadni:
r s
constraint
straint [CASCADE];
cons

U
[C

table
le
I n jest nazwąą tabeli;
tab
jest nazwą kolumny, której dotyczą usuwane wiĊzy;
column
olumn

c l e
constraint
constrain jest nazwą wiĊzów.

ra
Gdy usuwa siĊ
s wiĊzy integralnoĞci, wówczas wiĊzy te nie są juĪ uwzglĊdniane
przez serwer
ser Oracle i nie są juĪ dostĊpne w sáowniku danych.
O
Oracle Database 10g: Podstawy jĊzyka SQL II 2-14
Wyáączanie wiĊzów

• Instrukcja ALTER TABLE z klauzulą DISABLE


sáuĪy do wyáączenia wiĊzów integralnoĞci.
• Opcji CASCADE wyáącza zaleĪne wiĊzy
integralnoĞci.

ALTER TABLE emp2


DISABLE CONSTRAINT emp_dt_fk;
Table altered.

m y
d e
2-15 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Wyáączanie wiĊzów
e A
c l
WiĊzy moĪna wyáączaü bez koniecznoĞci ich usuwania ponownego tworzenia.
nia lub ponowneg

Skáadnia r a
SáuĪy do tego instrukcja ALTER TABLE z klauzulą
lą DISABLE.
DISABLE.

ALTER TABLE table O ly


DISABLE CONSTRAINT constraint
& On
nstraint [CASCADE];
l
[C
W omawianej skáadni:
table
n
jest nazw a e
nazwąą tabeli;
constraint jest nazwą
Wskazówki
t e r U s
nazwą wiĊzów.
wiĊzów.
z

• Klauzuli
jak I n
zuli DISABLE moĪna uĪyüü zarówno
ak i w instrukcji ALTER TABLE.
zar w instrukcji CREATE TABLE,

c l e
• Klauzula CASCADE
CA wyáącza zaleĪne wiĊzy integralnoĞci.

r a
• Wyáączenie
Wyáąączenie
cze wi
unikatowego
unik
wiĊzów unikatowoĞci lub klucza gáównego powoduje usuniĊcie
indeksu.

O
Oracle Database 10g: Podstawy jĊzyka SQL II 2-15
Wáączanie wiĊzów

• Do wáączania wiĊzów integralnoĞci wyáączonych


w definicji tabeli sáuĪy klauzula ENABLE.
ALTER TABLE emp2
ENABLE CONSTRAINT emp_dt_fk;
Table altered.
• Gdy wáącza siĊ wiĊzy UNIQUE lub PRIMARY
KEY, wówczas zostaje automatycznie utworzony
indeks UNIQUE.

m y
d e
2-16 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Wáączanie wiĊzów
e A
c l
WiĊzy moĪna wáączaü bez koniecznoĞci ich usuwaniaa i ponownego tworzenia.
tw SáuĪy do tego

Skáadnia r a
instrukcja ALTER TABLE z klauzulą ENABLE.

ALTER TABLE table


O ly
ENABLE
W omawianej skáadni: & On
CONSTRAINT constraint;
straint;

l
table jest nazw
a e
nazwąą tabeli;
n
constraint jest
Wskazówki
t e r s
nazwąą wiĊzów.
est nazw wiĊzó

U
ów.

• Gdy wáącza
wáąącza
I n
siĊĊ wiĊzy,
cza si wiĊzy, wówczass stosu
stosują siĊ one do wszystkich danych w tabeli.
Wszystkie dane w tabeli muszą speániaü narzucone ograniczenia.

c l e
• Gdy wáącza
wáąącza
cza si
automatycznie
automatyc
siĊ wiĊzy klucza UNIQUE lub PRIMARY KEY, wówczas zostaje
utworzony indeks UNIQUE lub PRIMARY KEY.

r a
JeĞli
JeĞli taki indeks juĪ istnieje, wówczas zostaje on uĪyty przez te klucze.

O • Klauzuli
K ENABLE moĪna uĪyü zarówno w instrukcji CREATE TABLE, jak
i w instrukcji ALTER TABLE.

Oracle Database 10g: Podstawy jĊzyka SQL II 2-16


Wáączanie wiĊzów (kontynuacja)
Wskazówki (kontynuacja)
• Wáączenie wczeĞniej wyáączonych wiĊzów klucza gáównego z opcją CASCADE
nie wáącza Īadnych kluczy obcych zaleĪnych od tego klucza gáównego.
• Aby wáączyü wiĊzy UNIQUE lub PRIMARY KEY, trzeba mieü uprawnienia
potrzebne do tworzenia indeksów w danej tabeli.

m y
d e
c a
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 2-17
WiĊzy kaskadowe

• Klauzula CASCADE CONSTRAINTS jest uĪywana


w poáączeniu z klauzulą DROP COLUMN.
• Klauzula CASCADE CONSTRAINTS usuwa wszystkie
wiĊzy integralnoĞci odwoáujące siĊ do kluczy
gáównych i kluczy unikatowych zdefiniowanych
dla usuwanych kolumn.
• Klauzula CASCADE CONSTRAINTS usuwa równieĪ
wszystkie wielokolumnowe wiĊzy zdefiniowane
dla usuwanych kolumn.

m y
d e
2-18 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
WiĊzy kaskadowe
e A
c l
Podany przykáad ilustruje uĪycie klauzuli CASCADE CONSTRAINTS
CONSTRAINTS. PrzypuĞümy, Īe tabela

CREATE TABLE test1 (


r a
TEST1 zostaáa utworzona w nastĊpujący sposób:

pk NUMBER PRIMARY KEY,


fk NUMBER, O ly
col1 NUMBER,
l & On
a e
col2 NUMBER,

CONSTRAINT ck1 n
onstraint FO
CONSTRAINT fk_constraint

r
k1 CHECK (pk
s
FOREIGN KEY (fk) REFERENCES test1,
k > 0 and col1
co > 0),

n t e U
T ck2 CHECK (col2
CONSTRAINT col2 > 0));
NastĊpującee instrukcje spowodują
spow
0))
powstanie
owstan báĊdów:
ALTER I
R TABLE test1
e
tes DROP (pk); — pk jest kluczem gáównym.
ALTER

c l
LTER TABLE test1 DROP (col1); — col1 wystĊpuje w wiĊzach
wielokolumnowych ck1.

r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 2-18
WiĊzy kaskadowe

Przykáad:
ALTER TABLE emp2
DROP COLUMN employee_id CASCADE CONSTRAINTS;
Table altered.

ALTER TABLE test1


DROP (pk, fk, col1) CASCADE CONSTRAINTS;
Table altered.

m y
d e
2-19 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
WiĊzy kaskadowe (kontynuacja)
e A
c l
NastĊpująca instrukcja usuwa kolumnĊ EMPLOYEE_ID, _ID, wiĊzy
wiĊzy klucza
klucz gáównego oraz

r a
wszystkie wiĊzy kluczy obcych odwoáujące siĊ doo klucza gáównego
ALTER TABLE emp2 DROP COLUMN employee_id CASCADE
ployee_id CA
AS
gáówne w tabeli EMP2:
CONSTRAINTS;

O ly
JeĞli wszystkie kolumny, do których odwoáują
woáują siĊ
siĊ wiĊzy
wiĊzy zdefiniowane
zdefinio w usuwanych

nie jest wymagana. PrzypuĞümy


l & On
kolumnach, są równieĪ usuwane, wówczas
ówczas klauzula
y na przykáad,
przykáad, Īe
la CASCADE CONSTRAINTS
Īe Īadne
Īadne inne wiĊzy
wi
C
z innych tabel
ny PK.
nie odwoáują siĊ do kolumny
na e
PK. Wtedy — w odniesieniu do tabeli TEST1

bez klauzuli CASCADE


e r
dniej stronie — bbĊdzie
utworzonej na poprzedniej
s Ċdzie poprawn
AINTS:
ADE CONSTRAINTS:
t
CONSTRA
U
poprawna nastĊpująca instrukcja

n
ALTER TABLE
LE test1 DRO
DROP (pk,
pk, fk, col1);

e I
c l
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 2-19
Omówienie indeksów

Indeksy są tworzone:
• automatycznie:
– podczas tworzenia wiĊzów PRIMARY KEY;
– podczas tworzenia wiĊzów UNIQUE KEY;
• rĊcznie:
– za pomocą instrukcji CREATE INDEX;
– za pomocą instrukcji CREATE TABLE.

m y
d e
2-20 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Omówienie indeksów
e A
c l
MoĪna tworzyü dwa typy indeksów. Jednym z nich jest
automatycznie tworzy taki indeks wówczas, gdy jest
st indeks unikatowy.
est tworzona kol
unikato Serwer Oracle
kolumna lub grupa kolumn

r a
z wiĊzami klucza PRIMARY KEY lub UNIQUE. UE. Nazwa indeksu
indek
e pokrywa siĊ z nazwą
nadaną wiĊzom.
O ly
Drugim typem indeksu jest indeks nieunikatowy, który
któ mo moĪeĪe byü
byü tworzony

l
przezuĪytkownika. Na przykáad mo& On
Īna utworzyü
moĪna utworzy
zyü indeks dla kolumny
ko z wiĊzami FOREIGN

n a e
KEY, który bĊdzie uĪywanyy w záączeniach
záąączeniach
czeniach
h w celu przyspieszenia
przyspie pobierania danych.

r
w dla jednej lub
Do tworzenia indeksów
ji na ten temat m
WiĊcej informacji
t e U s b wielu
w
Īna znaleĨü
moĪna
kolumn ssáuĪy instrukcja CREATE INDEX.
znaleĨü w PodrĊczniku jĊzyka SQL bazy danych
Oracle 10g.
Uwaga: I n
a: Indeks unikatowy
unikat moĪna teĪ utworzyü rĊcznie, ale zaleca siĊ tworzenie
l e
ikatowych wiĊzów,
unikatowych
c
wiĊzó ktore powodują niejawne utworzenie indeksu unikatowego.

r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 2-20
Instrukcja CREATE TABLE z klauzulą
CREATE INDEX

CREATE TABLE NEW_EMP


(employee_id NUMBER(6)
PRIMARY KEY USING INDEX
(CREATE INDEX emp_id_idx ON
NEW_EMP(employee_id)),
first_name VARCHAR2(20),
last_name VARCHAR2(25));
Table created.

SELECT INDEX_NAME, TABLE_NAME


FROM USER_INDEXES
WHERE TABLE_NAME = 'NEW_EMP';

m y
d e
2-21 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Instrukcja CREATE TABLE z klauzulą CREATE INDEX
e
X A
c l
W przykáadzie na slajdzie w instrukcji CREATE TABLE LE uuĪyto klauzuli CREATE INDEX
Īyto klauzu

r a
w celu jawnego utworzenia indeksu klucza gáównego.
nego. Podczas tw
moĪna nadaü indeksowi nazwĊ róĪniącą siĊ od nazwy wiĊzów
wiĊzów
tworzenia klucza gáównego
ów klucza gáównego. NastĊpujący

nazwany: O ly
przykáad ilustruje zachowanie siĊ bazy danych w sytuacj
sytuacji,
cji, gdy indeks
in nie zostanie jawnie

l
CREATE TABLE EMP_UNNAMED_INDEX
MED_INDEX& On
(employee_id NUMBER(6)
a e
PRIMARY
BER(6) PRIMAR

n
ARY KEY ,

r
first_name VARCHAR2(20),
RCHAR2(20),

e
last_name VARCHAR2(25)
VARCHAR2(25));

t
));

U s
n
Table created.
ed.
SELECT

e I
INDEX_NAME, TABLE_NAME
CT INDEX_NAM NA

l
FROM
ROM USER_INDEXES
USER_I

a c
WHERE TABLE_NAME
TAB = 'EMP_UNNAMED_INDEX';

O r

Oracle Database 10g: Podstawy jĊzyka SQL II 2-21


Instrukcja CREATE TABLE z klauzulą CREATE INDEX (kontynuacja)
NaleĪy zauwaĪyü, Īe serwer Oracle nadaje nazwĊ ogólną indeksowi tworzonemu dla
kolumny PRIMARY KEY.
MoĪna teĪ uĪyü istniejącego indeksu utworzonego na potrzeby kolumny PRIMARY KEY
na przykIJad w sytuacji, w której spodziewa siĊ IJadowania bardzo duĪych iloĞci danych
i chce siĊ tĊ operacjĊ przyspieszyü. MoĪna by wtedy wyIJączyü wiĊzy podczas samego
IJadowania danych, a nastĊpnie ponownie je wIJączyø, ale i tak istnienie unikatowego indeksu
dla klucza gIJównego spowoduje, Īe dane bĊdą weryfikowane podczas IJadowania. MoĪna
wiĊc najpierw utworzyü nieunikatowy indeks dla kolumny wyznaczonej jako przyszIJa
kolumna PRIMARY KEY, a nastĊpnie utworzyü dla niej wiĊzy PRIMARY KEY, uĪywając
istniejącego indeksu. NastĊpujące przykIJady ilustrują ten proces:

Etap 1: Utworzenie tabeli

CREATE TABLE NEW_EMP2


(employee_id NUMBER(6)
first_name VARCHAR2(20),
last_name VARCHAR2(25)
);

Etap 2: Tworzenie indeksu


CREATE INDEX emp_id_idx2 ON
new_emp2(employee_id);

m y
Etap 3: Tworzenie klucza gáównego
ALTER TABLE new_emp2 ADD PRIMARY KEY
d e
(employee_id) USING INDEX
emp_id_idx2;
c a
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 2-22
Indeksy funkcyjne

• Indeks funkcyjny jest tworzony


na podstawie wyraĪeĔ.
• WyraĪenie indeksujące jest konstruowane
z kolumn tabeli, staáych, funkcji SQL oraz
z funkcji zdefiniowanych przez uĪytkownika.
CREATE INDEX upper_dept_name_idx
ON dept2(UPPER(department_name));

Index created.

SELECT *
FROM dept2

m y
WHERE UPPER(department_name) = 'SALES';

d e
2-23
a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c
Indeksy funkcyjne
e A
c l
Indeksy funkcyjne zdefiniowane za pomocą sáów kluczowych
czowych UPPER(column_name)
UPPER

r a
lub LOWER(column_name) pozwalają na przeprowadzanie
eprowadzanie wyszukiwaĔ,
wielkoĞü liter jest nieistotna. Na przykáad nastĊpujący
stĊpujący
ący indeks:
indeks
ks:
wy w których

O ly
CREATE INDEX upper_last_name_idx name_idx ON N emp2 (UPPER(last_name));
(

l & On
uáatwia przetwarzanie zapytaĔ, takich
kich jak:

n a e
SELECT * FROM emp2 WHERE UPPER(last_name)
UPPEPER(last_nam = 'KING';

t e r
Serwer Oracle korzystaa z indeksu funkcyjnego

indeksu funkcyjnego,
U s
uĪyta ta konkretna funkcja. Na przy
kcyjnego tylko wtedy,
funkc
przykáad
ykáad poniĪsza
yjnego, ale bez klauzuli
k
w gdy w zapytaniu zostanie
poniĪsza instrukcja moĪe uĪyü utworzonego
uli WHERE serwer Oracle moĪe przeprowadziü

I
przeglądanien caáej
nie caáej tabeli:
SELECT

c
FROM
l e
ECT *
employees
em

r a
WHERE UPPER (last_name) IS NOT NULL
ORDER BY UPPER (last_name);

O Uwaga:
Uw Aby uĪywaü indeksów funkcyjnych, parametr inicjalizacyjny
QUERY_REWRITE_ENABLED musi mieü wartoĞü TRUE.

Oracle Database 10g: Podstawy jĊzyka SQL II 2-23


Indeksy funkcyjne (kontynuacja)
Serwer Oracle traktuje indeksy z kolumnami oznaczonymi sáowem kluczowym
DESC jako indeksy funkcyjne. Kolumny te są sortowane w porządku malejącym.

m y
d e
c a
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 2-24
Usuwanie indeksu

• Usuwanie indeksu ze sáownika danych za pomocą


instrukcji DROP INDEX.
DROP INDEX index;

• Usuwanie indeksu UPPER_DEPT_NAME_IDX


ze sáownika danych.
DROP INDEX upper_dept_name_idx;
Index dropped.
• Aby usunąü indeks, trzeba byü jego wáaĞcicielem
lub mieü uprawnienie DROP ANY INDEX.

m y
d e
2-25 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Usuwanie indeksu
e A
c l
Indeksów nie moĪna modyfikowaü. Aby zmieniü indeks,
eks, trzeba go usunąü
us i ponownie

r a
utworzyü. Do usuwania indeksu ze sáownika danych
ych sáuĪy
Aby móc wykonaü tĊ operacjĊ, trzeba byü wáaĞcicielem
instrukcja DROP INDEX.
sáuĪy instruk
aĞcicielem indeksu
indekeks lub mieü uprawnienie
DROP ANY INDEX.
O ly
W omawianej skáadni:
index
l & On
jest nazwąą indeksu.

n a e
uniĊcia tabeli, indeksy
Uwaga: W wypadku usuniĊcia ind
ndeksy i wi Ċzy są usuwane automatycznie,
wiĊzy

t e r U s
wencje pozostaj
a perspektywy i sekwencje ją nienaruszone.
pozostają

I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 2-25
DROP TABLE … PURGE

DROP TABLE dept80 PURGE;

m y
d e
2-26

c a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

DROP TABLE …PURGE


e A
c l
W bazie danych Oracle 10g wprowadzono nową funkcjĊ kcjĊ usuwania tabel.
tab UsuniĊcie tabeli

r a
nie powoduje jeszcze, Īe baza danych zwalnia natychmiast
tĊ tabelĊ. Dzieje siĊ inaczej. Baza danych najpierw
przestrzeĔ zajmowaną przez
atychmiast przest
jpierw zmienia nazwĊ
nnaz tabeli i umieszcza ją

O ly
w koszu, skąd moĪe byü ona odzyskana za pomoc
Jest to zabezpieczenie na wypadek, gdyby okaza
pomocąą instrukcji
okazaáo
instru
áo siĊ,
trukcji FLASHBACK
s Ċ, Īe
si
FL
Īe tabela zostaáa
z
TABLE.
usuniĊta przez

l
pomyákĊ. Aby natychmiast zwolniü & On
lniü przestrzeĔ
przestrzeĔ zajmowaną
z
zajmowan ą przez
prze tabelĊ, naleĪy

n a e
w instrukcji DROP TABLE umieĞciü
umieĞciü klauzulĊ
klauzuulĊ PURGE, tak jak to pokazano na slajdzie.

danych nie umieĞci t e r


KlauzulĊ PURGE naleĪyy dodawaü
dodawaü tylko

U s
ajmowaną przez ni
tabelĊ i zwolniü zajmowaną
mieĞci tabeli i jej obiektów
ko wówczas, gdy w jednym kroku trzeba usunąü
przestrzeĔ Podanie klauzuli PURGE sprawi, Īe baza
niąą przestrzeĔ.
zaleĪnych w koszu.
tów zale
I n
UĪycie tej klauzuli jest rrównowaĪne z usuniĊciem tabeli i zlikwidowaniem jej z kosza,

c l e
co oszczĊdza wykonywania jednej dodatkowej czynnoĞci. Ponadto stanowi to dodatkowe
szczĊdza wykon
zabezpieczenie przed
p niechcianym przenoszeniem waĪnych materiaáów do kosza.

r a
Uwaga: NieNi moĪna wycofaü instrukcji DROP TABLE z klauzulą PURGE. Nie moĪna teĪ

Oodzyskaü
odzysk tabeli usuniĊtej z klauzulą PURGE. Funkcja ta nie byáa dostĊpna w poprzednich
wydaniach
wy bazy danych.

Oracle Database 10g: Podstawy jĊzyka SQL II 2-26


Instrukcja FLASHBACK TABLE

• NarzĊdzie do naprawiania przypadkowych


modyfikacji tabel:
– przywraca wczeĞniejszy stan tabeli;
– korzyĞci: áatwoĞü uĪycia, dostĊpnoĞü, szybki
czas wykonania;
– dziaáa lokalnie.
• Skáadnia:
FLASHBACK TABLE[schema.]table[,
•[ schema.]table ]...
TO { TIMESTAMP | SCN } expr
[ { ENABLE | DISABLE } TRIGGERS ];

m y
de
2-27
a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c
Instrukcja FLASHBACK TABLE
e A
Samoobsáugowa funkcja naprawiająca
c l
Baza danych Oracle 10g udostĊpnia nową instrukcjĊ FLASHBACK TABLE jĊzyka SQL DDL,
a
LASHBACK TAB

r
sáuĪącą do przywracania stanu tabeli do wczeĞniejszego
tabela zostaáa niechcący usuniĊta lub zmodyfikowana.
O ly
samoobsáugowym narzĊdziem naprawiającym,
szego punktu w cz
kowana. Instrukcja
cym, które pozwala
pozwa
czasie na wypadek, gdyby
FLASHBACK TABLE jest
cja FLA
odzyskiwanie danych w tabeli
wala na odzysk

l & On
aktywnym poáączeniu z bazą danych
ich jak indeksy czy perspektywy. N
oraz związanych z nią atrybutów, takich
ych i polega na wy
wycofaniu tylko zm
Naprawa odbywa siĊ przy
zmian póĨniejszych wzglĊdem

n a ezonych w danej tabeli.


wskazanego czasu, wprowadzonych ta porówn
W porównaniu z tradycyjnymi mechanizmami

e r
odzyskiwania, ta funkcjaa oferuje znacz

U s
i odzyskiwania elementów konkre
konkretnych
ącee korzy
znaczące
ące Ğci, takie jjak áatwoĞü uĪycia, dostĊpnoĞü i szybki
korzyĞci,
czas odzyskiwania. Ponadto zdejmuje z administratora bazy danych obowiązek znajdowania
t h aplikacji. Funkcja odzyskiwania tabeli nie stanowi jednak

I n
lekarstwa naa fizyczne uszkodzenia
uszkod odow
spowodowane báĊdami na dyskach.
Skáadnia

c
znajdujl
ia
e
peracjĊ przywrócen
OperacjĊ przywrócenia tabeli moĪna wykonaü na jednej tabeli, wielu tabelach lub nawet na tabelach
ących si
znajdujących
ących siĊ w róĪnych schematach. NaleĪy okreĞliü punkt w czasie, podając datĊ i godzinĊ,

OEN
ra
do której ma nastąpiü powrót. DomyĞlnie dla wszystkich tabel biorących udziaá w tej operacji
są wyáączone
są wyáą
ENABLE
wyzwalacze bazy danych. Ustawienie to moĪna jednak zmieniü, stosując klauzulĊ
TRIGGERS.
Uwaga: WiĊcej informacji na temat instrukcji związanych z koszem i wycofywaniem zmian moĪna
znaleĨü w PodrĊczniku administratora bazy danych Oracle 10g, wydanie 1 (10.1).

Oracle Database 10g: Podstawy jĊzyka SQL II 2-27


Instrukcja FLASHBACK TABLE

DROP TABLE emp2;


Table dropped

SELECT original_name, operation, droptime,


FROM recyclebin;

FLASHBACK TABLE emp2 TO BEFORE DROP;


Flashback complete

m y
d e
2-28 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Instrukcja FLASHBACK TABLE (kontynuacja)
e A
Skáadnia i przykáady
c l
r a
Podana instrukcja przywraca tabelĊ EMP2 do stanu wykonania instrukcji DROP.
anu sprzed wyko
Kosz jest w rzeczywistoĞci tabelą sáownikaa danych zawierającą
zawiera ącą informacjĊ o usuniĊtych
erając
O ly
obiektach. UsuniĊte tabele i wszystkie zwi
związane
ązane z nimi
ązane nimmi obiekty, takie
ta jak indeksy, wiwiĊzy,

l & On
tabele zagnieĪdĪone itp., nie są usuwane
do przydziaáów przestrzeni dyskowej
uwane i wciąĪ
wciąĪ zajmują
z
zajmuj
yskowej uuĪytkowników
ą miejsce na dysku. Są wiĊc wliczane
owników dopóty, dopóki nie zostaną specjalnie
Īytkow
usuniĊte z kosza lub, co ma
n a e
maáo
áo prawdopodobne,
prawdopododobne, bĊdą
bĊdą musiaáy
mus zostaü zlikwidowane przez bazĊ

KaĪdy uĪytkownik
t e
nik moĪe
r
danych ze wzglĊdu naa wiĊzy
moĪe byü
U s
wiĊzy miejscaa na przestrze
byü traktowany
przestrzeĔĔ tabel.
t
tra owany jako wáaĞciciel
w kosza, poniewaĪ, jeĞli nie ma
on uprawnienia
którychh jest w I n
SYSDBA, to jedynymi
enia SYSDBA, obiektami, do których ma dostĊp w koszu, są te,
mi obie
áaĞciciele UĪytkownik moĪe przeglądaü swoje obiekty w koszu za pomocą
wáaĞcicielem.

c l e
nastĊpującej
tĊpującej
ącej instrukcji:
instruk
SELECT * FROM RECYCLEBIN;

r a
usuwa siĊ uĪytkownika, wówczas naleĪące do niego obiekty nie są juĪ
Gdy usuw

Oumieszczane
umies
ZawartoĞü
Z
w koszu, a obiekty które juĪ są w koszu, zostają zlikwidowane.
kosza moĪna zlikwidowaü za pomocą nastĊpującej instrukcji:
PURGE RECYCLEBIN;

Oracle Database 10g: Podstawy jĊzyka SQL II 2-28


Tabele zewnĊtrzne

m y
d e
2-29 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Tabele zewnĊtrzne
e A
c l
Tabela zewnĊtrzna jest tabelą tylko do odczytu, której
ej metadane ssąą umieszczone
um w bazie

r a
danych, natomiast same dane znajdują siĊ poza baz
baząą danych. Taka
tabeli moĪe byü traktowana jak perspektywa uuĪywana
Tak zewnĊtrzna definicja
Īywana do przeprowadzenia
prz
rzep dowolnych

O ly
zapytaĔ SQL na danych zewnĊtrznych bez
danych do bazy danych. Danych zewnĊtrznych
koniecznoĞci
ez konieczno
wnĊtrznych moĪna
Ğcii wczeĞniejszego
wczeĞni
moĪna uĪywaü
áadowania tych
uĪywaü w zapytaniach i záączeniach

l & On
zarówno bezpoĞrednich, jak i równolegáych.
ównolegáych. Nie ma przy tym wymogu,
w aby dane zewnĊtrzne
zostaáy najpierw zaáadowane
zewnĊtrznej moĪna uĪywaü
ne

n a e
do bazy
ywaü jĊzyków
danych.
danyc
jĊzyków SQL,
ych. Do tworzenia
tworzeni
SQ PL/SQL i Java.
J
zapytaĔ dla danych z tabeli

Podstawową róĪnicą
t e r
cą miĊdzy s
miĊdzy tabelami
U
zewnĊtrznymi
tabelami zewn Ċtrzny i tabelami zwykáymi jest to, Īe tabele
zewnĊtrzne mog
i nie moĪna
I n
mogąą byü
byü tylko odczytywane.
od wane. N
tworzyü Īadnych in
na dla nich twor
Nie moĪna na nich przeprowadzaü operacji DML
indeksów. MoĪna natomiast utworzyü tabelĊ

cl e
zewnĊtrzną,ą, a wiĊc
Ċtrzną, wiĊc wyáadowaü
w
Serwer Oracle udostĊpnia
u
dane, za pomocą instrukcji CREATE TABLE AS SELECT.
dwa podstawowe moduáy dostĊpowe dla tabel zewnĊtrznych.

r a
Pierwszy z nich,
odczyty
n
odczytywania
áadujący moduá dostĊpowy (ORACLE_LOADER), jest uĪywany do
danych z zewnĊtrznych plików, których format jest rozpoznawany przez
O narzĊdzie
na SQL*Loader. NaleĪy pamiĊtaü, Īe w wypadku tabel zewnĊtrznych nie moĪna
wykorzystaü wszystkich funkcji narzĊdzia SQL*Loader.

Oracle Database 10g: Podstawy jĊzyka SQL II 2-29


Tabele zewnĊtrzne (kontynuacja)
Moduá dostĊpowy ORACLE_DATAPUMP moĪe byü uĪyty zarówno do importowania,
jak i do eksportowania danych w formacie niezaleĪnym od platformy. Moduá
ORACLE_DATAPUMP zapisuje te wiersze z instrukcji SELECT, które mają byü zaáadowane do
zewnĊtrznej tabeli, jako czĊĞü instrukcji CREATE TABLE ...ORGANIZATION
EXTERNAL...AS SELECT. NastĊpnie moĪna uĪywaü instrukcji SELECT, aby odczytywaü dane
z tego pliku danych. MoĪna teĪ utworzyü definicjĊ tabeli zewnĊtrznej w innym systemie i uĪyü
gotowego pliku danych. To rozwiązanie umoĪliwia przenoszenie danych miĊdzy róĪnymi bazami
danych Oracle.

m y
d e
c a
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 2-30
Tworzenie katalogu dla tabeli zewnĊtrznej

Tworzenie obiektu DIRECTORY odpowiadającego


katalogowi w systemie plików, zawierającego
zewnĊtrzne Ĩródáo danych.

CREATE OR REPLACE DIRECTORY emp_dir


AS '/…/emp_dir';

GRANT READ ON DIRECTORY emp_dir TO hr;

m y
d e
2-31 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Przykáad tworzenia tabeli zewnĊtrznej
e A
c l
Najpierw trzeba uĪyü instrukcji CREATE DIRECTORY Y do utworzenia obiektu katalogu.
Obiekt katalogu okreĞla alias katalogu w systemie plików serwera zzawierającego zewnĊtrzne

r a
Ĩródáo danych. Przy odwoáywaniu siĊ do zewnĊtrznego Ĩródáa danych
Ċtrznego Ĩródáa
katalogów zamiast bezwzglĊdnych ĞcieĪek systemu operacyjnego.
operacy
cyjne
d moĪna uĪywaü nazw
W ten sposób uzyskuje siĊ
O ly
wiĊkszą elastycznoĞü przy zarządzaniu plikami.

l & On
Aby móc tworzyü katalogi, trzeba mieümieü uprawnienia
DIRECTORY. Gdy tworzy siĊ katalog, wówczas
wówcza
nia systemowe CREATE
uprawnieni
zas uzyskuje si
C ANY
siĊĊ automatycznie uprawnienia

n a e
obiektowe READ i WRITE i moĪnamoĪna przyznawaü
przyzna
i rolom. Administrator bazy danych równieĪ
rów
nawaü te uprawnienia
wnieĪ moĪe
uprawni
moĪe nadawaü
nad
innym uĪytkownikom
te uprawnienia innym
uĪytkownikom i rolom.
UĪytkownik musi
om.

t
usi miee r U
uprawns
mieüü uprawnieniaa READ do wszystkich katalogów uĪytych w tabelach

I n
ch, do których uzyskuje
zewnĊtrznych,
plików dzienników, odrzutów
odrz
uz ostĊp oraz uprawnienia WRITE do uĪwanych lokalizacji
dostĊp,
i nieprzyjĊü.

c l
Ponadto
uĪywana
e
nadto uprawnienia
uprawnieni WRITE są konieczne wówczas, gdy zewnĊtrzna struktura tabel jest
uĪywana do wyáadowywania
wy danych.

r a
Baza danych
danyc Oracle zapewnia teĪ moduá dostĊpowy ORACLE_DATAPUMP, za pomocą
którego moĪna wyáadowywaü dane (tzn. odczytywaü dane z tabeli w bazie danych
O i umieszczaü
um je w tabeli zewnĊtrznej), a nastĊpnie ponownie je áadowaü do bazy danych
Oracle. Jest to operacja jednorazowa, która moĪe byü wykonywana podczas tworzenia tabeli.
Po utworzeniu i wstĊpnym wypeánieniu tabeli danymi, nie moĪna aktualizowaü, wstawiaü,
ani usuwaü Īadnych wierszy.

Oracle Database 10g: Podstawy jĊzyka SQL II 2-31


Przykáad tworzenia tabeli zewnĊtrznej (kontynuacja)
Skáadnia
CREATE [OR REPLACE] DIRECTORY AS 'path_name';
W omawianej skáadni:
OR REPLACE ponownie tworzy juĪ istniejący obiekt katalogu bazy danych.
MoĪna uĪyü tej klauzuli do zmiany definicji
istniejącego katalogu bez usuwania, ponownego
tworzenia i ponownego nadawania uprawnieĔ do obiektu
bazy danych juĪ wczeĞniej nadanych wzglĊdem tego
katalogu. UĪytkownicy, którzy wczeĞniej uzyskali
uprawnienia do przedefiniowanego katalogu, mają
nadal do niego dostĊp bez ponownego ubiegania siĊ o
nadanie im uprawnieĔ.
directory okreĞla nazwĊ obiektu katalogu, ktory ma byü utworzony.
Nazwa katalogu nie moĪe byü dáuĪsza niĪ 30 bajtów. Nie
moĪna kwalifikowaü obiektu katalogu nazwą schematu.
'path_name' okreĞla peáną ĞcieĪkĊ katalogu w systemie operacyjnym
(w ĞcieĪce jest uwzglĊdniana wielkoĞü liter).

Skáadnia uĪycia moduáu dostĊpowego ORACLE_DATAPUMP jest nastĊpująca:


CREATE TABLE extract_emps
ORGANIZATION EXTERNAL (TYPE ORACLE_DATAPUMP
m y
DEFAULT DIRECTORY …
d e
a
ACCESS PARAMETERS (…)
LOCATION (…)
PARALLEL 4
A c
AS
c l e
REJECT LIMIT UNLIMITED
NLIMITED

SELECT * FROM …;
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 2-32
Tworzenie tabeli zewnĊtrznej

CREATE TABLE <table_name>


(<col_name> <datatype>, … )
ORGANIZATION EXTERNAL
(TYPE <access_driver_type>
DEFAULT DIRECTORY <directory_name>
ACCESS PARAMETERS
(…) )
LOCATION ('<location_specifier>') )
REJECT LIMIT [0 | <number> | UNLIMITED];

m y
d e
2-33 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Tworzenie tabeli zewnĊtrznej
e A
c l
Do tworzenia tabel zewnĊtrznych sáuĪy instrukcja CREATE EATE TABLE z klauzulą

r a
ORGANIZATION EXTERNAL. W rzeczywistoĞci
w sáowniku danych, których uĪywa siĊ do uzyskiwania
ci nie tworzy si
zyskiwania dost
dostĊpu
siĊĊ tabeli, lecz metadane
Ċpu do danych zewnĊtrznych.

O ly
Klauzula ORGANIZATION sáuĪy do okreĞlenia
wiersze danych tabeli. Opcja EXTERNAL
reĞlenia porządku,
RNAL wskazuje,
porządku,
ądku
e, Īe
ku, w któ
którym bbĊdą przechowywane
Īe tabela jest tabelą tylko do odczytu

l & On
umieszczoną na zewnątrz bazy danych. Nale NaleĪyĪy zauwaĪyü,
zauwaĪyü, Īe Īe zewnĊtrzne
z pliki muszą juĪ
istnieü.

n a e
TYPE <access_driver_type>
rfejs programistyczny
dostĊpowy to interfejs
t e r s
programisty
okreĞli siĊ
danych. JeĞli nie okreĞli U
siĊ typu
okreĞla moduá
river_type> okreĞla moduá dostĊpowy
yczny (API), in
ty moduáu,
d tabeli zewnĊtrznej. Moduá
interpretujący dane zewnĊtrzne dla bazy
duáu, to bbaza danych Oracle uĪyje domyĞlnego moduáu
dostĊpowego
I n
ego ORACLE_LOADER.
ORACLE_L Innąą opcją
o jest ORACLE_DATAPUMP.
Klauzula
l e
zula DEFAULT DIRECTORY sáuĪy do okreĞlenia co najmniej jednego obiektu katalogu

c
bazy danych Oracle
Ora odpowiadającego katalogowi w systemie plików zawierającemu

r a
zewnĊtrzne
zewnĊtrzne Ĩródáa danych.

OOpcjonalna
Opcjon
parametrom
pa
klauzula ACCESS PARAMETERS umoĪliwia przypisywanie wartoĞci
konkretnego moduáu dostĊpowego dla tej tabeli zewnĊtrznej.

Oracle Database 10g: Podstawy jĊzyka SQL II 2-33


Tworzenie tabeli zewnĊtrznej (kontynuacja)
NaleĪy uĪyü klauzuli LOCATION, aby okreĞliü po jednym zewnĊtrznym lokalizatorze
dla kaĪdego zewnĊtrznego Ĩródáa danych. Zazwyczaj <location_specifier>
jest plikiem, ale nie musi nim byü.
Klauzula REJECT LIMIT pozwala na okreĞlenie maksymalnej liczby báĊdów konwersji,
które mogą wystąpiü podczas zapytania kierowanego do danych zewnĊtrznych, zanim
zostanie zwrócony báąd Oracle, a zapytanie zostanie przerwane. DomyĞlną wartoĞcią jest 0.

m y
d e
c a
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 2-34
Tworzenie tabeli zewnĊtrznej za pomocą
moduáu ORACLE_LOADER
CREATE TABLE oldemp (
fname char(25), lname CHAR(25))
ORGANIZATION EXTERNAL
(TYPE ORACLE_LOADER
DEFAULT DIRECTORY emp_dir
ACCESS PARAMETERS
(RECORDS DELIMITED BY NEWLINE
NOBADFILE
NOLOGFILE
FIELDS TERMINATED BY ','
(fname POSITION ( 1:20) CHAR,
lname POSITION (22:41) CHAR))
LOCATION ('emp.dat'))
PARALLEL 5
REJECT LIMIT 200;
Table created.
m y
d e
2-35
a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c
e A
Przykáad tworzenia tabeli zewnĊtrznej za pomocą moduáu dostĊpowego
oduáu dost Ċp
ORACLE_LOADER
c l
10,jones,11-Dec-1934
r a
PrzypuĞümy, Īe istnieje zwykáy plik tekstowy zawierający
wierający wiersze w nastĊpującym
ący wiersz nast formacie:

20,smith,12-Jun-1972
O ly
l & On
Wiersze są oddzielone znakami nowego wi
wiersza,
a, a poszczególne pola są zakoĔczone
ersza,
przecinkami. Plik ma nazwĊ: /emp_dir/emp.dat

n a e/emp_dir/em
Aby przekonwertowaü ten plik w Ĩródáo
emp.dat
Ĩródáo danych dla tabeli
tab zewnĊtrznej, której metadane
bĊdą przechowywane

t e r U s
danych,
ne w bazie danyc
1. Utworzyü obiekt emp_dir:
emp_di
naleĪy
ych, nale Īy wykonaü
wyk nastĊpujące czynnoĞci:

CREATE
2. Wykona I n
ATE DIRECTORY emp_dir
Wykonaüü instrukcjĊ
r AS '/emp_dir' ;
instrukc CREATE TABLE pokazaną na slajdzie.

c l
Przykáad e
Przykáad na slajdzie
slajdz ilustruje specyfikacjĊ tabeli, która utworzy tabelĊ zewnĊtrzną dla pliku:

ra
/emp_dir/emp.dat
/emp_d

O
Oracle Database 10g: Podstawy jĊzyka SQL II 2-35
Przykáad tworzenia tabeli zewnĊtrznej za pomocą moduáu dostĊpowego
ORACLE_LOADER (kontynuacja)
W pokazanym przykáadzie specyfikacja TYPE jest podana tylko w celu zilustrowania
jej uĪycia. JeĞli nie zostanie podana, to domyĞlnym moduáem dostĊpowym jest
ORACLE_LOADER. Opcja ACCESS PARAMETERS dostarcza wartoĞci parametrów
konkretnego moduáu dostĊpowego, które są interpretowane przez moduá dostĊpowy,
a nie przez serwer Oracle.
Klauzula PARALLEL umoĪliwia uĪycie piĊciu równolegáych serwerów wykonywania
do równoczesnego przeglądania zewnĊtrznych Ĩródeá danych (plików) podczas
wykonywania instrukcji INSERT INTO TABLE. Na przykáad, jeĞli zostanie podany
parametr PARALLEL=5, to na Ĩródle danych bĊdzie dziaáaáo kilka równolegáych serwerów
wykonywania. PoniewaĪ tabele zewnĊtrzne mogą byü bardzo duĪe, ze wzglĊdów
wydajnoĞci zaleca siĊ dodanie klauzuli PARALLEL lub uĪycie odpowiedniej
wskazówki w zapytaniu.
Klauzula REJECT LIMIT okreĞla, Īe jeĞli podczas zapytania danych zewnĊtrznych
wystąpi wiĊcej niĪ 200 báĊdów konwersji, to zapytanie zostanie przerwane i zostanie
zwrócony báąd.
Te báĊdy konwersji mogą powstawaü wówczas, gdy moduá dostĊpowy przeksztaáca dane
w pliku danych tak, aby byáy zgodne z definicją tabeli zewnĊtrznej.
Po pomyĞlnym wykonaniu instrukcji CREATE TABLE tabela zewnĊtrzna OLDEMP moĪe
byü uĪywana w opisach i zapytaniach tak, jak tabela relacyjna.

m y
d e
c a
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 2-36
Tworzenie zapytaĔ dla tabel zewnĊtrznych

SELECT *
FROM oldemp

OLDEMP
emp.dat

m y
d e
2-37 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Tworzenie zapytaĔ dla tabel zewnĊtrznych
e A
c l
Tabela zewnĊtrzna nie opisuje danych przechowywanych danych. Nie opisuje teĪ,
nych w bazie dan

r a
w jaki sposób dane są przechowywane w zewnĊtrznym
w jaki sposób warstwa tabeli zewnĊtrznej maa przedstawia
Ĩródle danych.
rznym Ĩródle
przedstawiaüü dane
d
dan
dan Opisuje ona jednak,
serwerowi. Do obowiązków

O ly
moduáu dostĊpowego i warstwy tabeli zewnĊtrznej
danych z pliku, aby dane te byáy zgodne
ewnĊtrznej naleĪy
naleĪy wykonywanie
definicjąą tabeli
odne z definicj t
wykon
zewnĊtrznej.
zewn Ċtr
takich przeksztaáceĔ

Gdy serwer bazodanowy uzyskuje


l & On
kuje dostĊp
dostĊp do danych
da w zewnĊtrznym
zewnĊ Ĩródle danych,
wówczas wywoáuje odpowiedni
n a e
wiedni moduá
moduá dostĊpowy,
ostĊpowy, aby uzyskaü
dos uz dane z zewnĊtrznego

t
NaleĪy pamiĊtaü o tym, Īe
e r
Ĩródáa w spodziewanejj postaci.

U s
Īe opis danych
d nych w Ĩródle
Ĩródle danych jest czymĞ odrĊbnym od ich definicji
w tabeli zewnĊtrznej.
I n
nĊtrznej. Plik Ĩródáowy
Ĩró
w tabeli.. Ponadto typy danych
da
moĪe
moĪe zzawieraü wiĊcej lub mniej pól, niĪ jest kolumn
pól w Ĩródle
ó danych mogą byü inne niĪ typy kolumn w tabeli.
Moduá

cl
pasowaáy e
uá dostĊpowy
dostĊpowy kokontroluje, czy dane ze Ĩródáa danych są przetwarzane w taki sposób, aby
definicji tabeli zewnĊtrznej.
pasowaáy do def

r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 2-37
Podsumowanie

Podczas tej lekcji przedstawiono, jak:


• Dodawaü wiĊzy.
• Tworzyü indeksy.
• Tworzyü wiĊzy klucza gáównego
za pomocą indeksu.
• Tworzyü indeksy za pomocą instrukcji
CREATE TABLE.
• Tworzyü indeksy funkcyjne.
• Usuwaü kolumny i ustawiaü je jako UNUSED.
• Przeprowadzaü operacje FLASHBACK.
• Tworzyü tabele zewnĊtrzne i uĪywaü ich.
m y
d e
2-38 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Podsumowanie
e A
c l
Modyfikowanie tabel w celu dodania lub zmiany kolumnumn lub wiwiĊzów.
Ċzów Tworzenie indeksów

r a
i indeksów funkcyjnych za pomocą instrukcji CREATE
kolumn. UĪycie mechanizmu FLASHBACK do odzyskiwania
INDEX Usuwanie nieuĪywanych
EATE INDEX.
ia tabel.
t UĪycie klauzuli

metadane są przechowywane w bazie O ly


external_table do tworzenia tabeli zewnzewnĊtrznej,
Ċtrznej, czyli
ie danych, ale której
tabeli tylko do odczytu, której
cz tabe
któ dane znajdują
znaj siĊ poza bazą banych.

l & On
UĪycie tabel zewnĊtrznych do tworzenia zapytaĔ,
taĔ, bez koniecznoĞci
worzenia zapyta konieczn áadowania danych do

pomocą instrukcji CREATE


n a e
bazy danych. Nazywanie indeksów
deksów kolumnn PRIMARY KEY
TABLE.
KE podczas tworzenia tabeli za

t er
ATE TABLE.

U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 2-38
ûwiczenie 2: Omówienie

To üwiczenie obejmuje nastĊpujące zagadnienia:


• Modyfikowanie tabel.
• Dodawanie kolumn.
• Usuwanie kolumn.
• Tworzenie indeksów.
• Tworzenie tabel zewnĊtrznych.

m y
d e
2-39 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
ûwiczenie 2: Omówienie
e A
c l
To üwiczenie obejmuje modyfikowanie kolumn i dodawanie wiĊzów
awanie wi Ċzów za pomocą instrukcji

r a
ALTER TABLE, tworzenie (za pomocą instrukcjii CREATE INDEX)
tworzenia tabeli za pomocą instrukcji CREATE
TE TABLE,
IND
tworzenie
TABLE, two
worz
indeksów w momencie
tabel zewnĊtrznych oraz

O ly
usuwanie kolumn i uĪywanie operacji FLASHBACK.
LASHBACK.

l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 2-39
ûwiczenie 2
1. Utworzyü tabelĊ DEPT2 na podstawie podanego schematu. Zapisaü odpowiednie
instrukcje w pliku skryptu o nazwie lab_02_01.sql, a nastĊpnie go wykonaü.
Upewniü siĊ, Īe tabela zostaáa utworzona.
Nazwa kolumny ID NAME
Typ klucza
WartoĞci
NULL/UnikatowoĞü
Tabela klucza obcego
Kolumna klucza obcego
Typ danych NUMBER VARCHAR2
DáugoĞü 7 25

2. Wypeániü tabelĊ DEPT2 danymi z tabeli DEPARTMENTS. UwzglĊdniü tylko


potrzebne kolumny.

y
3. Utworzyü tabelĊ EMP2 na podstawie podanego schematu. Zapisaü odpowiednie
instrukcje w pliku skryptu o nazwie lab_02_03.sql, a nastĊpnie go wykonaü.
m onaü.
Upewniü siĊ, Īe tabela zostaáa utworzona.

d e
Nazwa kolumny ID
c a
LAST_NAME FIRST_NAME
NAME DEPT_ID
Typ klucza

e A
WartoĞci
NULL/UnikatowoĞü
cl
Tabela klucza
obcego ra
Kolumna klucza O ly
obcego
l & On
Typ danych

n a e
NUMBER V
VARCHAR2 VARCHAR2 NUMBER
DáugoĞü

t e r U
7
s 25 25 7

I n
c le
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 2-40
ûwiczenie 2 (kontynuacja)
4. Zmodyfikowaü tabelĊ EMP2, tak aby umoĪliwiü wpisywanie dáuĪszych
nazw pracowników. Sprawdziü, czy modyfikacja zostaáa uwzglĊdniona.

5. Sprawdziü, czy obie tabele DEPT2 oraz EMP2 są przechowywane w sáowniku danych.
(Wskazówka: USER_TABLES)

6. Utworzyü tabelĊ EMPLOYEES2 na podstawie struktury tabeli EMPLOYEES.


UwzglĊdniü tylko kolumny EMPLOYEE_ID, FIRST_NAME, LAST_NAME, SALARY
oraz DEPARTMENT_ID. Nazwaü nagáówki kolumn odpowiednio: ID, FIRST_NAME,
LAST_NAME, SALARY oraz DEPT_ID.
7. Usunąü tabelĊ EMP2.

m y
8. Wykonaü zapytanie dla kosza, aby sprawdziü, czy tabela zostaáa w nim umieszczona.
ieszczona.

d e
c a
9. Wycofaü usuniĊcie tabeli EMP2.
e A
c l
r a
O ly
l & On
n a e
t e r
Sprawdziü poprawnoĞü
U s
10. Usunąü kolumnĊĊ FIRST_NAME ME z tabeli EMPLOYEES2.
poprawnoĞü wykonanej
EMPL
modyfikacji, odczytując opis tabeli.
wykonanej modyf
11. W tabeli
n
li EMPLOYEES2
EMPLOYEES oznaczyü
prawdziü poprawnoĞü
SprawdziüI popraw
zyü kolumnĊ
kol DEPT_ID jako UNUSED.
wykonanej modyfikacji, odczytując opis tabeli.

c l e
12.. Usunąü
Usunąü z tabeli
tabel EMPLOYEES2 wszystkie kolumny oznaczone jako UNUSED.
Sprawdziü poprawnoĞü wykonanej modyfikacji, odczytując opis tabeli.
Sprawdziü

r a tab EMP2 dla kolumny ID dodaü wiĊzy PRIMARY KEY poziomu tabeli.
13. W tabeli

O P
Podczas tworzenia wiĊzów naleĪy nadaü im nazwĊ my_emp_id_pk.

Oracle Database 10g: Podstawy jĊzyka SQL II 2-41


ûwiczenie 2 (kontynuacja)
14. W tabeli DEPT2 dla kolumny ID utworzyü wiĊzy PRIMARY KEY. Podczas
tworzenia wiĊzów naleĪy nadaü im nazwĊ my_dept_id_pk.
15. Dodaü w tabeli EMP2 odwoáanie klucza obcego gwarantujące, Īe pracownik nie jest
przypisany do nieistniejącego dziaáu. Nadaü wiĊzom nazwĊ my_emp_dept_id_fk.
16. Potwierdziü dodanie wiĊzów za pomocą zapytania dla perspektywy
USER_CONSTRAINTS. Zwróciü uwagĊ na typy i nazwy wiĊzów.

17. Za pomocą perspektywy USER_OBJECTS sáownika danych wyĞwietliü nazwy


i typy obiektów tabel EMP2 oraz DEPT2. ZauwaĪyü, Īe zostaáy utworzone nowe
tabele i nowy indeks.

JeĞli czas na to pozwala, proszĊ wykonaü nastĊpujące zadania:


18. Zmodyfikowaü tabelĊ EMP2. Dodaü kolumnĊ COMMISSION (prowizja) o typie danych
NUMBER, precyzji 2 i skali 2. Dodaü do kolumny COMMISSION wiĊzy gwarantujące,
Īe wartoĞü prowizji jest dodatnia.
19. Usunąü tabele EMP2 i DEPT2, tak aby nie mogáy byü odzyskane. Sprawdziü
zawartoĞü kosza.
20. Utworzyü tabelĊ DEPT_NAMED_INDEX na podstawie podanego schematu.
m
u.
y
Nadaü indeksowi kolumny PRIMARY KEY nazwĊ DEPT_PK_IDX.
d e
c a
Nazwa kolumny Deptno
e
Dname
ame A
Klucz gáówny Tak
c l
Typ danych
r
NUMBER
a VARCHAR2
VARCH
DáugoĞü 4
O ly 330

l & On
na e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 2-42
Praca z bardzo duĪymi zbiorami danych

m y
d e
a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Cele

Zagadnienia przedstawione w ramach tej lekcji pozwalają:


• Operowaü danymi za pomocą zapytaĔ podrzĊdnych.
• Opisywaü funkcje wstawiania wielotabelowego.
• UĪywaü nastĊpujących typów wstawiania
wielotabelowego:
– bezwarunkowa instrukcja INSERT;
– przestawna instrukcja INSERT;
– warunkowa instrukcja INSERT ALL;
– warunkowa instrukcja INSERT FIRST.
• Scalaü wiersze w tabeli.
• ĝledziü zmiany danych w okreĞlonym przedziale
czasowym.
m y
d e
3-2 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Cele
e A
c l
Podczas tej lekcji omówiono wykonywanie dziaáaĔ na danych w bazi
bazie danych Oracle

r a
za pomocą zapytaĔ podrzĊdnych. Przedstawiono te
wstawiania wielotabelowego, instrukcji MERGE
teĪĪ zagadnienia dotyczące instrukcji
GE oraz Ğledzenia
nia zmian w bazie danych.
Ğledzeni

O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 3-2
Operowanie danymi za pomocą
zapytaĔ podrzĊdnych

W instrukcjach DML moĪna uĪywaü zapytaĔ


podrzĊdnych w nastĊpujących celach:
• Kopiowanie danych miĊdzy tabelami.
• Pobieranie danych z perspektywy chwilowej.
• Aktualizowanie danych w tabeli na podstawie
wartoĞci w innej tabeli.
• Usuwanie wierszy z tabeli na podstawie
wartoĞci w innej tabeli.

m y
d e
3-3 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Operowanie danymi za pomocą zapytaĔ podrzĊdnych
e ych A
c l
Zapytania podrzĊdne pozwalają na pobieranie danychh i uĪywanie
uĪywanie ich jako danych

r a
wejĞciowych dla instrukcji INSERT, wstawiającej
áatwo skopiowaü bardzo duĪe iloĞci danych mi
ej je do innej tabeli.
miĊdzy
Ċdzy dwiemaa ta
tab
tabelami,
t
W ten sposób moĪna
korzystając z tylko

O ly ytania podrz
jednej instrukcji SELECT. Podobnie zapytania Ċdnne uĪywane
podrzĊdne
moĪliwiają jednoczesną
w instrukcji UPDATE lub DELETE umoĪliwiają jedn
uĪywa wraz z klauzulą WHERE
dnoczesną aktualizacjĊ
aktu lub usuniĊcie

l & On
sowaniem zapyta
wielu wierszy. Kolejnym zastosowaniem taĔ podrzĊdnych
zapytaĔ podrzĊdnych jest uĪywanie ich w klauzuli

view).
n a e
FROM instrukcji SELECT i tworzenie w tenen sposób tzw. perspektyw
p chwilowych (inline

t er U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 3-3
Kopiowanie wierszy z innej tabeli

• UĪycie instrukcji INSERT z zapytaniem


podrzĊdnym.
INSERT INTO sales_reps(id, name, salary, commission_pct)
SELECT employee_id, last_name, salary, commission_pct
FROM employees
WHERE job_id LIKE '%REP%';

33 rows created.

• Nie uĪywa siĊ klauzuli VALUES.


• Liczba kolumn w klauzuli INSERT musi siĊ
zgadzaü z ich liczbą w zapytaniu podrzĊdnym.

m y
d e
3-4
a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c
Kopiowanie wierszy z innej tabeli
e A
l
Instrukcji INSERT moĪna uĪywaü do wstawiania do tabeli wierszy, kktórych wartoĞci
c
podrzĊdnym.
r a
pochodzą z istniejących tabel. KlauzulĊ VALUES zastĊpuje
zastĊpuje siĊ
siĊ wówczas
wó zapytaniem

Skáadnia
O ly
INSERT INTO table [ column
W omawianej skáadni:
l & On
column)
n) ] subquery;
mn (, column subquer

table a e
jest nazw
nazwąą tabeli;
n
column
subquery
jest

t e r
est nazw
s
nazwąą kolum
kolumny
umny tabeli, do kktórej są wstawiane dane;
okreĞla zapytanie
okreĞla
U
zapy anie podrz Ċdn zwracające te wiersze, które
podrzĊdne

I n mają
mają zostaü
Liczba kolumn i ich typy
zo wstawione
awione do tabeli.
typ danych na liĞcie kolumn instrukcji INSERT musi byü zgodna

c l e
czbą wartoĞci
z liczbą wartoĞci i ich
wszystkich wie
i typami danych w zapytaniu podrzĊdnym. Aby utworzyü kopiĊ
wierszy w tabeli, naleĪy uĪyü zapytania podrzĊdnego w postaci SELECT *.

r a INSERT INTO EMPL3


INSE

O SELECT *
FROM employees;
WiĊcej informacji na ten temat moĪna znaleĨü w PodrĊczniku jĊzyka SQL bazy danych
Oracle 10g.

Oracle Database 10g: Podstawy jĊzyka SQL II 3-4


Wstawianie danych do kolumn wybranych
przez zapytanie podrzĊdne

INSERT INTO
(SELECT employee_id, last_name,
email, hire_date, job_id, salary,
department_id
FROM empl3
WHERE department_id = 50)
VALUES (99999, 'Taylor', 'DTAYLOR',
TO_DATE('07-JUN-99', 'DD-MON-RR'),
'ST_CLERK', 5000, 50);

1 row created.

m y
d e
3-5 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Wstawianie danych do kolumn wybranych przez zapytanie
e podrzĊdne
apytanie podrz A
l
W klauzuli INTO instrukcji INSERT zamiast nazwy tabeli docelowej moĪna uĪywaü
c
zapytania podrzĊdnego.
r a
Lista kolumn wybieranych przez to zapytanie
nie podrz
podrzĊdne
Ċdne musi
mu mieü tĊ samą liczbĊ
O ly
elementów, co lista kolumn klauzuli VALUES.
LUES. Aby instrukcja
inst
strukcja INSERT
IN mogáa zadziaáaü
poprawnie,

l & On
muszą byü speánione wszystkiee reguáy
reguáy dotyczące
dotyczące
ące kolumn tabeli
tabe podstawowej. Na przykáad
przyk
nie moĪna powtórzyü wartoĞci
n a e
unikatowego
oĞci unikatoweg identyfikatora pracownika ani pozostawiü
ego identyfikator
wymaganej kolumny NOT
Takie zastosowanie
t e r
OT NULL pustej.

U spuste
stej.
zapytaĔĔ podrzĊdnych
nie zapyta podr Ċdnych pomaga
pomag unikaü tworzenia perspektywy tylko
w celu wykonania
n
nania instrukcji INSERT.
I
T.

cl e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 3-5
Wstawianie danych do kolumn wybranych
przez zapytanie podrzĊdne
Weryfikowanie wyników.
SELECT employee_id, last_name, email, hire_date,
job_id, salary, department_id
FROM employees
WHERE department_id = 50;

m y
de
3-6
a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c
e A
Wstawianie danych do kolumn wybranych przez zapytanie podrzĊdne
apytanie podrz
(kontynuacja)
c l
tabeli dla instrukcji INSERT.
r a
Przykáad na slajdzie pokazuje wyniki zapytania podrz
podrzĊdnego
Ċdnego uuĪytego
Īy do okreĞlenia

O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 3-6
Pobieranie danych z uĪyciem zapytania
podrzĊdnego jako Ĩródáa danych
SELECT a.last_name, a.salary,
a.department_id, b.salavg
FROM employees a, (SELECT department_id,
AVG(salary) salavg
FROM employees
GROUP BY department_id) b
WHERE a.department_id = b.department_id
AND a.salary > b.salavg;

m y

d e
3-7 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Pobieranie danych z uĪyciem zapytania podrzĊdnego
e A
ródáa danych
go jako ĨĨródáa

c l
W klauzuli FROM instrukcji SELECT moĪna uĪywaü zapytaĔ
to zastosowanie perspektywy — zapytanie podrzĊdne
zapytaĔ podrzĊdnych.
podrzĊdn
dne w klauzuli FROM
Przypomina
jest nawet
a
F

r
nazywane perspektywą chwilową. Stanowi ono

O ly
i Ğrednie zarobki wszystkich tych pracowników,
definicjĊĊ Ĩródáa
no definicj
instrukcji SELECT. Przykáad na slajdzie znajduje nazwiska,
nazwisk
którzy
cowników, którz
Ĩróddá danych dla tej konkretnej
ska, zarobki,
zar numery dziaáów
zarabiająą wiĊcej
rzy zarabiaj w niĪ wynoszą

l & On
Ğrednie w ich dziaáach. Zapytaniee podrz
podrzĊdne
za pomocą której zewnĊtrznee zapytanie mo
Ċdne w klauzuli
moĪe
kl
Īe siĊ
FROM zostaje
siĊ odwoáywaü
z nazwane literą b,
odwoáywa do kolumny SALAVG
w powstaáej perspektywie.
ie.
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 3-7
Aktualizowanie dwóch kolumn za pomocą
zapytania podrzĊdnego

Uaktualniü dane pracownika „114”, tak aby jego


stanowisko byáo zgodne ze stanowiskiem pracownika
„205”, a zarobki takie, jak pracownika „168”.
UPDATE empl3
SET job_id
= (SELECT job_id
FROM employees
WHERE employee_id = 205),
salary = (SELECT salary
FROM employees
WHERE employee_id = 168)
WHERE employee_id = 114;
1 row updated.

m y
d e
3-8 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Aktualizowanie dwóch kolumn za pomocą zapytania
e podrzĊdnego
ia podrz Ċdneg A
c l
UĪywając kilku zapytaĔ podrzĊdnych w klauzuli SET instrukcji UPDATE,
UPD moĪna
jednoczeĞnie uaktualniü wiele kolumn.
Skáadnia r a
UPDATE table
O ly
SET column =

l & On(SELECT column

n a e FROM taable
table

r
WHERE
WHER condition)
RE condition
[ ,
column
olumn
t e =
U s
I n ELECT
(SELECT
FROM table
column

c l
[WHERE e co
condition ]
WHERE condition)]
;

„0 r
„0 rows
a
Uwaga: Je
JeĞli
Ğ nie zostaną uaktualnione Īadne wiersze, to zostanie zwrócony komunikat

O ro updated.”.

Oracle Database 10g: Podstawy jĊzyka SQL II 3-8


Aktualizowanie wierszy na podstawie
wartoĞci w innej tabeli

UĪywanie zapytaĔ podrzĊdnych w instrukcji UPDATE


w celu uaktualnienia wierszy tabeli na podstawie
wartoĞci w innej tabeli.
UPDATE empl3
SET department_id = (SELECT department_id
FROM employees
WHERE employee_id = 100)
WHERE job_id = (SELECT job_id
FROM employees
WHERE employee_id = 200);
1 row updated.

m y
d e
3-9 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Aktualizowanie wierszy na podstawie wartoĞci w innej
e nnej tabeli A
c l
W instrukcji UPDATE aktualizującej wiersze tabeli mo
moĪna
Īna uĪyü
uĪyü zapytania
zapyt podrzĊdnego.

r a
Przykáad na slajdzie aktualizuje tabelĊ EMPL3 naa podstawie wart
Zmienia numery dziaáów wszystkich pracowników
wników na stanow
wartoĞci w tabeli EMPLOYEES.
stanowisku
owi „200” na numer bieĪącego
dziaáu pracownika „100”.
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 3-9
Usuwanie wierszy na podstawie
wartoĞci w innej tabeli

UĪywanie zapytaĔ podrzĊdnych w instrukcji DELETE


w celu usuniĊcia z tabeli wierszy na podstawie
wartoĞci w innej tabeli.
DELETE FROM empl3
WHERE department_id =
(SELECT department_id
FROM departments
WHERE department_name
LIKE '%Public%');
1 row deleted.

m y
d e
3-10
a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c
e A
Usuwanie wierszy na podstawie wartoĞci w innej tabeli abeli

c l
Zapytanie podrzĊdne moĪe byü uĪywane w celu usuwaniawania wierszy z jjednej tabeli na

r a
podstawie wartoĞci w innej tabeli. Przykáad na slajdzie
ajdzie usuwa wszystkich
naleĪących do dziaáu o nazwie zawierającej fragment „Public
„Public”.
ws pracowników
lic Zapytanie podrzĊdne

O ly
przeszukuje tabelĊ DEPARTMENTS w celu lu znalezienia numerów
apytania podrz
w nazwie napis „Public”. Wyniki zapytania Ċdnego
d
podrzĊdnego
nu dziaáów zawierających
zostają nastĊpnie
zostają n uĪyte

l & On
w zapytaniu gáównym, które na podstawie wybranych
wybr
branych numerów dziaáów usuwa wiersze
danych z tabeli EMPLOYEES.

n a e
S.

t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 3-10
Korzystanie ze sáowa kluczowego WITH
CHECK OPTION w instrukcjach DML
• Zapytanie podrzĊdne wyznacza tabelĊ
i kolumny dla instrukcji DML.
• Sáowo kluczowe WITH CHECK OPTION
uniemoĪliwia modyfikowanie wierszy
niewystĊpujących w zapytaniu podrzĊdnym.
INSERT INTO (SELECT employee_id, last_name, email,
hire_date, job_id, salary
FROM empl3
WHERE department_id = 50
WITH CHECK OPTION)
VALUES (99998, 'Smith', 'JSMITH',
TO_DATE('07-JUN-99', 'DD-MON-RR'),
'ST_CLERK', 5000);
INSERT INTO
*
ERROR at line 1:
m y
d e
ORA-01402: view WITH CHECK OPTION where-clause violation
ation

3-11
a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c
Sáowo kluczowe WITH CHECK OPTION
e A
c l
Sáowo kluczowe WITH CHECK OPTION ma na celu u zaznaczenie, ĪĪe jeĞli w instrukcji

r a
INSERT, UPDATE lub DELETE zamiast tabeli jest est uuĪywane
Īywane zapytanie
zapy
Īadne zmiany generujące wiersze niezawartee w zapytaniu podrzĊdnym
po
podr
podrzĊdne, to
nie są dopuszczalne
w tej tabeli.
O ly
l & On
Przykáad na slajdzie uĪywa sáowa kluczowego WITH
podrzĊdne znajduje wiersze dotyczące
tyczące dziaáu
ące dzia
WIT
áu 50.,
TH CHECK OPTION.
50 jednakĪe
OP Zapytanie
jednakĪe na liĞcie SELECT nie ma

n a e
numeru dziaáu, a na liĞcie VALUES nie zapewniono
zap wartoĞci dla tej kolumny. Wstawienie
apewniono warto

e r
áoby uzyskaniem
tego wiersza skutkowaáoby
z zapytaniem podrzĊdnym.
rzĊdnym.
t U s em pustego ident
identyfikatora dziaáu, co nie jest zgodne

I n
c l e
O ra

Oracle Database 10g: Podstawy jĊzyka SQL II 3-11


Omówienie funkcji jawnych
wartoĞci domyĞlnych

• DziĊki funkcji jawnych wartoĞci domyĞlnych


moĪna uĪywaü sáowa kluczowego DEFAULT jako
wartoĞci kolumny tam, gdzie powinna siĊ znaleĨü
wartoĞü domyĞlna.
• Funkcja ta zostaáa dodana w celu zapewnienia
zgodnoĞci ze standardem SQL:1999.
• UmoĪliwia ona kontrolowanie, gdzie i kiedy do
danych ma byü zastosowana wartoĞü domyĞlna.
• Jawne wartoĞci domyĞlne mogą byü uĪywane
w instrukcjach INSERT i UPDATE.

m y
d e
3-12 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Jawne wartoĞci domyĞlne
e A
c l
Sáowo kluczowe DEFAULT moĪe byü uĪywane w instrukcjach INSERT i UPDATE w celu
strukcjach INSE

r a
wstawienia do danej kolumny wartoĞci domyĞlnej.
domyĞlnej, to zostaje uĪyta wartoĞü NULL.
ej. JeĞli
JeĞli nie zdefin
zdefiniowano wartoĞci

O ly
Opcja DEFAULT pozwala unikaü wpisywania ywania w programach
progra
ramach war
wartoĞci domyĞlnych na staáe

przed wprowadzeniem omawianej


l & On
lub tworzenia zapytaĔ do sáownika w celu znalezien
znalezienia
anej funkcji. Wprowadzanie
Wp
wartoĞci,
enia tych warto
wa
Ğ tak jak siĊ to robiáo
wartoĞci domyĞlnej na staáe staje

n a e
siĊ problemem wówczas, gdy warto
wartoĞüĞü ta zostanie
zo zmienio
zmieniona, poniewaĪ trzeba wtedy

z poziomu aplikacji.
t e r
uaktualniü caáy kod. Z kolei dost
dostĊpu

U
Ċpu do sáowników
s sáowników da
wiĊc
cji. Nowa funkcjaa jest wi Ċc bardzo
danych nie uzyskuje siĊ zwykle
bard istotna.

I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 3-12
Jawne wykorzystanie wartoĞci
domyĞlnych

• WartoĞü DEFAULT w instrukcji INSERT:


INSERT INTO deptm3
(department_id, department_name, manager_id)
VALUES (300, 'Engineering', DEFAULT);

• WartoĞü DEFAULT w instrukcji UPDATE:


UPDATE deptm3
SET manager_id = DEFAULT
WHERE department_id = 10;

m y
d e
3-13 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Jawne wykorzystanie wartoĞci domyĞlnych
e A
c l
Sáowa kluczowego DEFAULT uĪywa siĊ w celu wstawienia wienia do danej kkolumny wartoĞci

r a
okreĞlonej wczeĞniej jako domyĞlna wartoĞü dla tej kolumny. JeĞli
dla kolumny nie zostaáa zdefiniowana, to serwer wer Oracle wsta
JeĞ wartoĞü domyĞlna
wstawia
taw wartoĞü NULL.

O ly
W pierwszym przykáadzie na slajdzie instrukcja
nstrukcja INSER
INSERTRT uuĪywa
Īywa domyĞlnej wartoĞci

l
to zostanie tam wstawiona wartoĞü& On
kolumny MANAGER_ID. JeĞli dla tej kolumny niee zdefiniowano
toĞü NULL.
z wartoĞci domyĞlnej,
w

n a e
Drugi przykáad na slajdziee uĪywa
uĪywa instrukc
instrukcji
kcji UPDATE do wstawienia domyĞlnej wartoĞci
kolumny MANAGER_ID

t e r
anie ona zast
kolumny, to zostanie
U s
dziaáu
_ID dla dzia 10.
áu 10 JeĞli
0. Je
ąpiona warto
zastąpiona
ąpiona
Ğli nie zdefiniowano
Ğcią N
wartoĞcią
zdef
NULL.
wartoĞci domyĞlnej dla tej

ta zostaáa I n
rtoĞci domy
Uwaga: WartoĞci Ğlne kolumn mo
domyĞlne Īn okreĞliü podczas tworzenia tabeli. CzynnoĞü
moĪna
áa omówiona w ramach lekcji dotyczącej tworzenia tabel i zarządzania nimi.

c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 3-13
Omówienie wstawiania wielotabelowego
za pomocą instrukcji INSERT

Table_a
INSERT ALL
INTO table_a VALUES(…,…,…)
INTO table_b VALUES(…,…,…)
INTO table_c VALUES(…,…,…)
SELECT …
FROM sourcetab
WHERE …; Table_b

e c
Table_c
ble_c
m y
d e
3-14 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Omówienie wstawiania wielotabelowego za pomocą
e
ą instrukcji IN A
INSERT

c l
UĪycie wielotabelowej instrukcji INSERT polega na jednoczesnym w wstawianiu do wielu

r a
tabeli wartoĞci obliczonych na podstawie wierszy
Wielotabelowe instrukcje INSERT mogą odgrywaü
y zwracanych prz
dgrywaü bardzo
przez zapytanie podrzĊdne.
poĪyteczną
o po
p rolĊ

O ly
w scenariuszach z hurtowniami danych. Dane musz
regularnie, poniewaĪ tylko wtedy dobrze
musząą byü
obrze speániają
speániają swoją
áadowa do hurtowni danych
byyü áadowane
sw ą funkcjĊ
swoj funkcjĊ przy
p wykonywaniu analiz

l
gospodarczych. Do hurtowni danych& On
nych trafiaj jedn
dnak dane pochodzące
trafiająą jednak pocho z róĪnych systemów
operacyjnych.
Proces pobierania danych
n a e
ch z systemu Ĩródáowego
Ĩród
ódáowego i wsta
wstawiania ich do hurtowni danych
r s
esem ETL, oznac
jest nazywany procesem
ch (ang. transform
przetwarzanie ich
t e U
aczającym
ącym pobieranie
oznaczającym pobie
tion) i áadowanie
transformation) áadow
danych (ang. extraction),
(ang. loading).

I
Wymaganee dane musz
n by rozpoznawane
musząą byü awan i pobierane z róĪnych Ĩródeá, takich jak
my bazodanowe cczy aplikacje. Pobrane dane muszą byü fizycznie transportowane
systemy

c l e docelow
do systemu docelowego lub poĞredniego (w celu dalszego przetwarzania). W zaleĪnoĞci
od wybranych Ğrodków transportu, niektóre przeksztaácenia mogą byü wykonywane juĪ

r a teg procesu. Na przykáad instrukcje SELECT, które uzyskują dostĊp do zdalnego


podczas tego
miejsca docelowego za poĞrednictwem bramki, mogą konkatenowaü dane z dwóch kolumn.
OPo wczytaniu danych do bazy danych Oracle dalsze przeksztaácenia mogą byü
wykonywane za pomocą instrukcji jĊzyka SQL. Wielotabelowe instrukcje INSERT
są jedną z takich technik transformacji danych.

Oracle Database 10g: Podstawy jĊzyka SQL II 3-14


Omówienie wstawiania wielotabelowego
za pomocą instrukcji INSERT

• Instrukcji INSERT…SELECT moĪna uĪywaü


do wstawiania wierszy do wielu tabel za
pomocą jednej instrukcji DML.
• Wielotabelowe instrukcje INSERT mogą byü
uĪywane w systemach hurtowni danychdo
przenoszenia danych ze Ĩródeá operacyjnych
do tabel docelowych.
• Zapewniają one znaczną poprawĊ wydajnoĞci:
– jedna instrukcja DML zamiast kilku instrukcji
INSERT…SELECT;
– jedna instrukcja DML zamiast procedury
wykonującej wielokrotne wstawienia
za pomocą struktury IF...THEN.
m y
d e
3-15 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Omówienie wielotabelowej instrukcji INSERT (kontynuacja)
e
ynuacja) A
c l
Wielotabelowe wstawienia mają wszystkie zalety instrukcji
trukcji INSERT ... SELECT

r a
w sytuacjach, w których jest wiele tabel docelowych.
wymagaáy uĪycia n niezaleĪnych instrukcji INSERT
wych. Bazy danyc
danych wczeĞniejsze niĪ Oracle9i
NSERT ... SELECT,
S a wiĊc przetworzenia

O ly n–krot
otnego ob
tych samych danych Ĩródáowych n razy i przez to n–krotnego obciąĪania systemu.

l & On
Podobnie jak klasyczna instrukcja INSERT ... SELECT,
moĪe byü uĪywane równoleglee z mechanizmem
SELECT, nowe
em bezpo
now wielotabelowe wstawianie
Ğrednie áadowania danych w celu
bezpoĞredniego

a e
ajnoĞci.
osiągniĊcia wiĊkszej wydajnoĞci.
n
przekonwertowany
t e r
mienia wej
KaĪdy wiersz ze strumienia

U s
Ğciow
ny na wiele wier
wego, np. tabeli nierelacyjnej bazy danych, moĪe byü
wejĞciowego,
zy relacyjnego Ğrodowiska tabel bazodanowych. WczeĞniej
wierszy
ia wymaga
takie dziaáania
I n áy napisania
wymagaáy nap wielu in
instrukcji INSERT.

c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 3-15
Typy wielotabelowych instrukcji INSERT

Są dostĊpne róĪne typy wielotabelowych


instrukcji INSERT:
• bezwarunkowa instrukcja INSERT;
• warunkowa instrukcja INSERT ALL;
• warunkowa instrukcja INSERT FIRST;
• przestawna instrukcja INSERT.

m y
d e
3-16
a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c
Typy wielotabelowych instrukcji INSERT
e A
c l
Są dostĊpne nastĊpujące typy wielotabelowych instrukcji
ukcji INSERT:
INSERT:
• bezwarunkowa instrukcja INSERT;
r
• warunkowa instrukcja INSERT ALL; a
• przestawna instrukcja INSERT..O ly
• warunkowa instrukcja INSERT FIRST; IRST;

l
Do wskazywania typu wykonywanej& On cji INSERT ssáuĪą
ywanej instrukcji áuĪ róĪne klauzule.

n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 3-16
Wielotabelowe instrukcje INSERT

• Skáadnia

INSERT [ALL] [conditional_insert_clause]
•[insert_into_clause values_clause] (subquery)

• conditional_insert_clause
[ALL] [FIRST]
[WHEN condition THEN] [insert_into_clause values_clause]
[ELSE] [insert_into_clause values_clause]

m y
d e
3-17 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Wielotabelowe instrukcje INSERT
e A
c l
Na slajdzie pokazano ogólną postaü wielotabelowej instrukcji
nstrukcji INSERT.
INSER

a
Bezwarunkowa instrukcja INSERT: ALL insert_into_
r
OkreĞlenie ALL po którym nastĊpują argumenty
insert_into_clause
menty insert_into_clause sáuĪy
O ly
insert_ t_int
do wykonywania bezwarunkowego wstawiania
stawiania wielotabelowego.
wielota
otabelowego. Serwer Oracle wykonuje

Warunkowa instrukcja INSERT: l & On


wszystkie klauzule wstawiania dlaa ka
kaĪdego
Īdego wiersz
wiersza
sza zwróconego przez zapytanie podrzĊdne.

n a e
SERT: conditional_insert_clause
W celu wykonywania warunkowego ws
condi
ditional_ins
tawiania wielo
wstawiania wielotabelowego naleĪy okreĞliü argument

t e r
insert_claus
conditional_insert_clause.
WH
U
odpowiadającyy jej warunek WHEN,
sse. Serwer Ora
okre
Oracle filtruje kaĪdą klauzulĊ wstawiania przez
który okreĞla, czy dana klauzula moĪe byü wykonywana.

I
kowych WHEN.
warunkowych
n
Pojedynczaa wielotabelowa instrukcja INSERT
INS moĪe zawieraü maksymalnie 127 klauzul

c l e WHEN
inst
Warunkowa instrukcja INSERT: ALL

r a
Sáowo kluczowe
Sáowo klucz ALL sprawia, Īe serwer Oracle przetwarza kaĪdą klauzulĊ warunkową WHEN
niezaleĪ od wyniku innych klauzul WHEN. Dla tych klauzul WHEN, których warunek jest
niezaleĪnie
O speániony,
speá serwer Oracle wykonuje odpowiednie klauzule INTO.

Oracle Database 10g: Podstawy jĊzyka SQL II 3-17


Wielotabelowe instrukcje INSERT (kontynuacja)
Warunkowa instrukcja INSERT: FIRST
Sáowo kluczowe FIRST sprawia, Īe serwer Oracle przetwarza instrukcje warunkowe
WHEN w kolejnoĞci ich podania w instrukcji INSERT. JeĞli warunek WHEN jest speániony,
to serwer wykonuje odpowiadającą mu klauzulĊ INTO i pomija pozostaáe klauzule WHEN
dla danego wiersza.
Warunkowa instrukcja INSERT: ELSE
JeĞli dla danego wiersza nie jest speániony warunek Īadnej z klauzul WHEN, to:
• w wypadku podania klauzuli ELSE serwer Oracle wykona listĊ instrukcji
INTO związanych z tą klauzulą;
• w przeciwnym wypadku serwer Oracle nie wykonuje Īadnej czynnoĞci
dla rozpatrywanego wiersza.
Ograniczenia dotyczące wielotabelowych instrukcji INSERT
• Wielotabelowe instrukcje INSERT moĪna wykonywaü tylko dla tabel.
Nie moĪna ich stosowaü z perspektywami ani ze zmaterializowanymi perspektywami.
• Nie moĪna przeprowadzaü wielotabelowego wstawiania do tabeli zdalnej.
• Podczas wykonywania wielotabelowej instrukcji INSERT nie moĪna uĪywaü
wyraĪeĔ okreĞlających kolekcje tabel.
• W wielotabelowej instrukcji INSERT wszystkie argumenty
insert_into_clauses mogą áącznie okreĞlaü maksymalnie 999 kolumn
docelowych.

m y
d e
c a
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 3-18
Bezwarunkowa instrukcja INSERT ALL

• Wybraü wartoĞci EMPLOYEE_ID, HIRE_DATE,


SALARY oraz MANAGER_ID z tabeli EMPLOYEES
dla pracowników o numerach wiĊkszych od 200.
• Wstawiü te wartoĞci do tabel SAL_HISTORY
oraz MGR_HISTORY za pomocą wielotabelowej
instrukcji INSERT.
INSERT ALL
INTO sal_history VALUES(EMPID,HIREDATE,SAL)
INTO mgr_history VALUES(EMPID,MGR,SAL)
SELECT employee_id EMPID, hire_date HIREDATE,
salary SAL, manager_id MGR
FROM employees
WHERE employee_id > 200;
12 rows created.
m y
d e
3-19
a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c
Bezwarunkowa instrukcja INSERT ALL
e A
oraz MGR_HISTORY. c l
Przykáad na slajdzie wstawia wiersze jednoczeĞnie do dwóch tabel: SA SAL_HISTORY

r a
Instrukcja SELECT pobiera z tabeli EMPLOYEES numerach,
YEES dane o num ume datach zatrudnienia,

O ly
zarobkach i numerach kierowników wszystkich pracowników
wników o nnumerach wiĊkszych
zystkich pracown

l & On
od 200. Numery pracowników, daty y zatrudnienia i zarobki
SAL_HISTORY, natomiast do tabeli MGR_HIS
z ssąą wsta
ISTORY ssąą wstaw
MGR_HISTORY
wstawiane do tabeli
wstawiane numery pracowników,

n a e
numery kierowników i zarobki.
obki.

do wierszy pobieranych
t e r U s
Tego typu instrukcjĊ INSERT nazywa wa siĊ
instrukcjĊ
ranych przez inst
bezwarunkową instrukcją INSERT, poniewaĪ
siĊ bezwarunk
SELEC nie są stosowane Īadne dodatkowe
rukcjĊ SELECT

do dwóch
I n
ograniczenia.. Wszystkie wiersze
wier
h tabel: SAL_HISTORY
SAL_HI
pobierane
bierane przez
p
oraz MGR_HISTORY.
M
instrukcjĊ SELECT są wstawiane
WartoĞci klauzuli VALUES

c l
w instrukcjach
e
strukcjach INSERT
wstawiane do po
INSE okreĞlają kolumny z instrukcji SELECT, które mają byü
poszczególnych tabel. Dla kaĪdego wiersza zwracanego przez instrukcjĊ

O ra
SELECT są

Komunikat
Ko
s wykonywane dwa wstawiania, jedno do tabeli SAL_HISTORY i jedno
do tabeli MGR_HISTORY.
„12 rows created” oznacza, Īe do tabel podstawowych SAL_HISTORY
oraz MGR_HISTORY wstawiono w sumie 12 wierszy.

Oracle Database 10g: Podstawy jĊzyka SQL II 3-19


Warunkowa instrukcja INSERT ALL

• Wybraü wartoĞci EMPLOYEE_ID, HIRE_DATE,


SALARY oraz MANAGER_ID z tabeli EMPLOYEES
dla pracowników o numerach wiĊkszych od 200.
• JeĞli wartoĞü SALARY jest wiĊksza od 10 000 USD,
to naleĪy wstawiü tĊ wartoĞü do tabeli SAL_HISTORY
za pomocą warunkowej wielotabelowej
instrukcji INSERT.
• JeĞli wartoĞü MANAGER_ID jest wiĊksza od 200,
to naleĪy wstawiü tĊ wartoĞci do tabeli MGR_HISTORY
za pomocą warunkowej wielotabelowej
instrukcji INSERT.

m y
d e
3-20 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Warunkowa instrukcja INSERT ALL
e A
c l
Na slajdzie przedstawiono problem wymagający warunkowej instrukcji INSERT ALL.
unkowej instrukc

r a
Rozwiązanie tego problemu zostaáo podane na nastĊpnym
astĊpnym slajdzie.
slajdzi

O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 3-20
Warunkowa instrukcja INSERT ALL

INSERT ALL
WHEN SAL > 10000 THEN
INTO sal_history VALUES(EMPID,HIREDATE,SAL)
WHEN MGR > 200 THEN
INTO mgr_history VALUES(EMPID,MGR,SAL)
SELECT employee_id EMPID,hire_date HIREDATE,
salary SAL, manager_id MGR
FROM employees
WHERE employee_id > 200;
4 rows created.

m y
d e
3-21 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Warunkowa instrukcja INSERT ALL (kontynuacja)
e A
c l
Przykáad na slajdzie jest podobny do przykáadu z poprzedniego
przedniego slajdu — wstawia wiersze

r a
do dwóch tabel: SAL_HISTORY oraz MGR_HISTORY.
z tabeli EMPLOYEES dane o numerach pracowników
Instrukcja SELECT pobiera
STORY. Instrukcj
(employee
owników (emplo loy ID), datach zatrudnienia

O ly
(hire date), zarobkach (salary) i numerach
pracowników o numerach (employeee ID) wi
ch kierowników
wiĊkszych
Ċkszych
w (manager
((manage ID) wszystkich
Numery pracowników, daty
ch od 200. Num

l & On
zatrudnienia i zarobki są wstawianeane do tabeli SAL_HISTORY.
SA
SAL_HISTORY Numery pracowników,
numery kierowników i zarobki

n a e
bki ssąą wstawianene do tabeli MGR_HISTORY.
MGR
UĪywana instrukcja INSERT
poniewaĪ do wierszy
e r s nazy
zywana warunkową
NSERT jest nazywana warunko instrukcją ALL INSERT,
szy pobieranych przez instrukcjĊ
t U
ograniczenia. Do tabeli SAL_HISTORY ORY są
instrukcj SELECT są stosowane dalsze
są wstawiane
w tylko te wiersze pobierane przez

I
SELECT, w których
instrukcjĊĊ SELECT, n SAL_
któ k
wartoĞüü kolumny SAL jest wiĊksza od 10 000 USD.
Podobnie

c l e
bnie do tabeli MGR_HISTORY
kolumny MGR jest
MG
jes wiĊksza od 200.
są wstawiane tylko wiersze, w których wartoĞü

r a
NaleĪy
NaleĪy zauwaĪyü,
zostaáo
zau Īe w przeciwieĔstwie do poprzedniego przykáadu, w którym do tabel
zostaáo wstawionych dwanaĞcie wierszy, w tym przykáadzie wstawiono tylko
Ocztery
czte wiersze.
Komunikat „4 rows created” oznacza, Īe do tabel podstawowych SAL_HISTORY
oraz MGR_HISTORY wstawiono w sumie 4 wiersze.

Oracle Database 10g: Podstawy jĊzyka SQL II 3-21


Warunkowa instrukcja INSERT FIRST

• Wybraü wartoĞci DEPARTMENT_ID, SUM(SALARY)


oraz MAX(HIRE_DATE) z tabeli EMPLOYEES.
• JeĞli suma SUM(SALARY) jest wiĊksza od
25 000 USD, to naleĪy wstawiü tĊ wartoĞü
do tabeli SPECIAL_SAL za pomocą wielotabelowej
instrukcji INSERT FIRST.
• JeĞli jest speániony pierwszy warunek WHEN, to
dla tego wiersza pominąü dalsze klauzule WHEN.
• Wiersze, które nie speániają pierwszego warunku
WHEN, wstawiü za pomocą warunkowej instrukcji
INSERT do tabel HIREDATE_HISTORY_00,
HIREDATE_HISTORY_99 lub HIREDATE_HISTORY
ATE.
na podstawie wartoĞci w kolumnie HIRE_DATE.
Y
m y
d e
3-22 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Warunkowa instrukcja INSERT FIRST
e A
c l
Na slajdzie przedstawiono problem wymagający warunkowej instrukcji FIRST INSERT.
unkowej instrukc

r a
Rozwiązanie tego problemu zostaáo podane na nastĊpnym
astĊpnym slajdzie.
slajdzi

O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 3-22
Warunkowa instrukcja INSERT FIRST

INSERT FIRST
WHEN SAL > 25000 THEN
INTO special_sal VALUES(DEPTID, SAL)
WHEN HIREDATE like ('%00%') THEN
INTO hiredate_history_00 VALUES(DEPTID,HIREDATE)
WHEN HIREDATE like ('%99%') THEN
INTO hiredate_history_99 VALUES(DEPTID, HIREDATE)
ELSE
INTO hiredate_history VALUES(DEPTID, HIREDATE)
SELECT department_id DEPTID, SUM(salary) SAL,
MAX(hire_date) HIREDATE
FROM employees
GROUP BY department_id;
12 rows created.

m y
d e
3-23
a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c
e A
Warunkowa instrukcja INSERT FIRST (kontynuacja) a)

c l
Przykáad na slajdzie wstawia wiersze do wielu tabel za pomoc
pomocąą jednej instrukcji INSERT.

r a
Instrukcja SELECT pobiera z tabeli EMPLOYEES dane o numerac
zarobków oraz najpóĨniejszych datach zatrudnienia
numerach dziaáów, sumach
pracowników,
dnienia pracowni
wnik dla wszystkich dziaáów.

O ly
UĪywana instrukcja INSERT jest nazywana wana warunkową
warunkow wą instrukcją
instrukc FIRST INSERT,

l & On
poniewaĪ dla dziaáów, w których suma
wyjątek. Najpierw jest sprawdzany
uma pensji przekracza
zany warunek WHEN
WH
ekracza 25 000 USD,
przek
HEN SAL > 25000.2
U jest przewidziany
JeĞli suma zarobków

n a e
w danym dziale jest wiĊksza
SPECIAL_SAL bez wzglĊdu
za od 25 000 USD,
wzglĊdu na informacjĊ
inform
USD
SD, to wiersz jes
jest wstawiany do tabeli
rmacjĊ o dacie zatrudnienia.
za JeĞli ten pierwszy

t e r
i juĪ nie sprawdza
U s
warunek WHEN jestt speániony,
speániony, to se
wdza pozostaáych
erwer Oracle w
serwer
pozostaáych warunków
wykonuje odpowiednią klauzulĊ INTO
WH dla bieĪącego wiersza.
unków WHEN

I n
Dla wierszy,
szy, które nie speániają
spe pierwszego
sze warunku (WHEN SAL > 25000), reszta

c l e
warunków
unków jest obliczana
oblicz tak, jak w wypadku warunkowej instrukcji INSERT, a wiersze
pobierane przez iinstrukcjĊ SELECT są wstawiane do tabel HIREDATE_HISTORY_00,

r a
HIREDATE_HISTORY_99
HIREDATE_
w kolumnie
kolum HIREDATE.
lub HIREDATE_HISTORY na podstawie wartoĞci

O Kom
Komunikat „12 rows created” oznacza, Īe do tabel podstawowych SPECIAL_SAL,
HIREDATE_HISTORY_00, HIREDATE_HISTORY_99 oraz HIREDATE_HISTORY
wstawiono w sumie 12 wierszy.

Oracle Database 10g: Podstawy jĊzyka SQL II 3-23


Przestawna instrukcja INSERT

• PrzypuĞümy, Īe z tabeli SALES_SOURCE_DATA


nierelacyjnej bazy danych jest pobierany zbiór
wierszy dotyczących sprzedaĪy i Īe wiersze
te mają nastĊpujący format:
EMPLOYEE_ID, WEEK_ID, SALES_MON, SALES_TUE,
SALES_WED, SALES_THUR, SALES_FRI
• NaleĪy wstawiü te wartoĞci do tabeli SALES_INFO
w formacie relacyjnym:
EMPLOYEE_ID, WEEK, SALES
• UĪywając przestawnej instrukcji INSERT,
y
przeksztaáciü zbiór wierszy dotyczących sprzedaĪy
z tabeli nierelacyjnej bazy danych do formatu
relacyjnego. m y
d e
3-24 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Przestawna instrukcja INSERT
e A
c l
Przestawianie jest operacją przeksztaácania, w której kakaĪdy
Īdy wiersz ze strumienia

r a
wejĞciowego, np. tabeli nierelacyjnej bazy danych,
Ğrodowiska relacyjnych tabel bazy danych.
byüü zamieniany
ch, musi by zam w wiele wierszy

O ly
Aby rozwiązaü problem pokazany na slajdzie, utworzyüü takie
lajdzie, trzeba utworzy
ut ta przeksztaácenie, aby

l & Onierelacyjnej bazy


kaĪdy wiersz z oryginalnej tabeli nierelacyjnej
abeli SALES_INFO
zamieniany w piĊü wierszy w tabeli SALES_I
zy danych SALES_SOURCE_DATA
SALE
d
INFO hurtowni danych.
byá
Ta operacja jest czĊsto
nazywana przestawianiem.
n a e
Rozwiązanie tego
t e r U
o problemu zostas
iono problem wymagaj
Na slajdzie przedstawiono w
wymagającyący prz
ący przestawnej instrukcji INSERT.
zostaáoo podane na nastĊpnym
n slajdzie.

I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 3-24
Przestawna instrukcja INSERT

INSERT ALL
INTO sales_info VALUES (employee_id,week_id,sales_MON)
INTO sales_info VALUES (employee_id,week_id,sales_TUE)
INTO sales_info VALUES (employee_id,week_id,sales_WED)
INTO sales_info VALUES (employee_id,week_id,sales_THUR)
INTO sales_info VALUES (employee_id,week_id, sales_FRI)
SELECT EMPLOYEE_ID, week_id, sales_MON, sales_TUE,
sales_WED, sales_THUR,sales_FRI
FROM sales_source_data;
5 rows created.

m y
d e
3-25 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Przestawna instrukcja INSERT (kontynuacja)
e A
c l
Przykáad na slajdzie pobiera dane dotyczące sprzedaĪyy z tabeli SALES_SOURCE_DATA
SALE

r a
nierelacyjnej bazy danych. Są to wielkoĞci sprzedaĪy
daĪy prowadzonej
prowadzon przez reprezentantów
handlowych w rozbiciu na poszczególne dni tygodnia dla tygtygodni
ygo o konkretnych numerach.
DESC SALES_SOURCE_DATA
O ly
l & On
n a e
t er U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 3-25
Przestawna instrukcja INSERT (kontynuacja)
SELECT * FROM SALES_SOURCE_DATA;

DESC SALES_INFO

SELECT * FROM sales_info;

w tabeli relacyjnej SALES_INFO. m y


NaleĪy zauwaĪyü, Īe w przykáadzie na slajdzie przestawna instrukcja INSERT pozwalaa
na przeksztaácanie kaĪdego wiersza w tabeli SALES_SOURCE_DATA w piĊü wierszy szy

d e
c a
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 3-26
Instrukcja MERGE

• Zapewnia moĪliwoĞü warunkowego aktualizowania


lub wstawiania danych do tabeli bazy danych.
• Wykonuje instrukcjĊ UPDATE, jeĞli wiersz istnieje,
lub instrukcjĊ INSERT, jeĞli jest to nowy wiersz:
– pozwala uniknąü oddzielnego aktualizowania;
– zwiĊksza wydajnoĞü i áatwoĞü uĪycia;
– jest uĪyteczna w zastosowaniach związanych
z hurtowniami danych.

m y
d e
3-27 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Instrukcja MERGE
e A
c l
Serwer Oracle pozwala na uĪywanie instrukcji MERGE E z operacjami INSERT, UPDATE

r a
i DELETE. Za pomocą tej instrukcji moĪna warunkowo
wiersze, unikając w ten sposób uĪywania wielu
nkowo aktualizowaü,
aktualizo
elu instrukcji DML
DM
wstawiaü lub usuwaü
DML. Decyzja o tym, czy

O ly
w tabeli docelowej ma zostaü wykonanaa aktualizacja, wstawienie
uzaleĪniona od warunku w klauzuli ON.
ON.
ws czy usuniĊcie, jest

l & On
Trzeba mieü obiektowe uprawnienia
nienia INSERT i UPDATE do ta tabeli docelowej oraz
uprawnienie SELECT do tabeli
n a e j. Aby uĪyü
abeli Ĩródáowej.
Ĩródáowej. uĪyü klauzuli
klau DELETE jako argumentu
merge_update_clause,
tabeli docelowej.
t e r
lause, trzeba mie

U s mieü
m ü równieĪ
równieĪ obiektowe
obi uprawnienie DELETE do

wiele razy
alania MERGE jest
Instrukcja scalania
I n
zy tego samego w
je deterministyczna,
ministy
wiersza w tabeli
co oznacza, Īe nie moĪna aktualizowaü
l docelowej za pomocą tej samej instrukcji MERGE.

c l e
Alternatywne
ternatywne rozwiązanie
rozw
i wielu instrukcji
w stosunku do instrukcji scalania wymaga uĪywania pĊtli PL/SQL
instrukc DML. Instrukcja MERGE jest jednak znacznie áatwiejsza w uĪyciu i mniej

r a
skomplikowana
skomplikow (jako pojedyncza instrukcja SQL).

OInstrukcja
Instru MERGE jest odpowiednia do wielu zadaĔ związanych z hurtowniami danych.
W aplikacji hurtowni danych moĪe na przykáad zajĞü potrzeba obsáugi danych pochodzących
z wielu Ĩródeá i czasem siĊ powtarzających. Za pomocą instrukcji MERGE moĪna warunkowo
dodawaü lub modyfikowaü wiersze.

Oracle Database 10g: Podstawy jĊzyka SQL II 3-27


Instrukcja MERGE: skáadnia

Za pomocą instrukcji MERGE moĪna warunkowo


wstawiaü wiersze do tabeli lub aktualizowaü
istniejące wiersze.
MERGE INTO table_name table_alias
USING (table|view|sub_query) alias
ON (join condition)
WHEN MATCHED THEN
UPDATE SET
col1 = col_val1,
col2 = col2_val
WHEN NOT MATCHED THEN
INSERT (column_list)
VALUES (column_values);

m y
de
3-28
a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c
Scalanie wierszy
e A
c l
Za pomocą instrukcji MERGE moĪna warunkowo aktualizowaü istniejące wiersze i wstawiaü
alizowaü istniej
nowe wiersze.
W omawianej skáadni: r a
INTO clause
O ly
okreĞla tabelĊlĊ docelową,
docelową,ą, której
któ wiersz
wiersze ssą aktualizowane lub do

USING clause
l & On
której sąą wstawiane nowe
okreĞla Ĩródáo danych,
eĞla Ĩródáo
owe wiersze;
now
nych, które bĊdą
dany bĊdą aktualizowane lub wstawiane;

n a e moĪe
moĪe to byü
byü tabela,
abela, perspektywa
tab perspektyw lub zapytanie podrzĊdne;
ON clause

t e r U swarunek, nan podstawie któ


albo wstawia
wstawia wiersze;
instruuje
ins
wiersze
którego operacja MERGE albo aktualizuje,

e serwer, jjak ma zareagowaü na wynik warunku záączania.

I n
WHEN MATCHED
TCHED |
WHEN NOT MATCHED

c l
WiĊcej
e
cej informacji na ten temat moĪna znaleĨü w rozdziale „MERGE” PodrĊcznika jĊzyka SQL
bazy danych Oracle
Ora 10g.

r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 3-28
Scalanie wierszy

Wstawiü lub uaktualniü wiersze w tabeli


EMPL3, tak aby byáy zgodne z tabelą EMPLOYEES.
MERGE INTO empl3 c
USING employees e
ON (c.employee_id = e.employee_id)
WHEN MATCHED THEN
UPDATE SET
c.first_name = e.first_name,
c.last_name = e.last_name,
...
c.department_id = e.department_id
WHEN NOT MATCHED THEN
INSERT VALUES(e.employee_id, e.first_name, e.last_name,
e.email, e.phone_number, e.hire_date, e.job_id,

e.department_id);
m y
e.salary, e.commission_pct, e.manager_id,

d e
3-29
a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c
Scalanie wierszy: przykáad
e A
MERGE INTO empl3 c
c l
a
USING employees e

WHEN MATCHED THEN


UPDATE SET
r
ON (c.employee_id = e.employee_id)

O ly
id)

c.first_name
c.last_name
l & On
= e.first_name,
first_name,
= e.last_name,,
c.email
c.phone_numberr
na e
= e.email,
e.phone_number,
= e.phone
ne_number,
c.hire_date
c.job_id
t e r U s
e.hire_date,
= e.hi
hire_date,
e.job_id,
= e job_id,
c.salary
ary

I n
c.commission_pct
= e.salary,
alary,
ommission_pc = e.commission_pct,
mmi

cl e
c.manager_id = e.manager_id,
c.department_id = e.department_id
c.departme

a
WHEN NOT MATCHED
MA THEN

O r
INSERT VALUES(e.employee_id, e.first_name, e.last_name,
e.email, e.phone_number, e.hire_date, e.job_id,
e.salary, e.commission_pct, e.manager_id,
e.department_id);

Oracle Database 10g: Podstawy jĊzyka SQL II 3-29


Scalanie wierszy
TRUNCATE TABLE empl3;

SELECT *
FROM empl3;
no rows selected
MERGE INTO empl3 c
USING employees e
ON (c.employee_id = e.employee_id)
WHEN MATCHED THEN
UPDATE SET
...
WHEN NOT MATCHED THEN
INSERT VALUES...;
SELECT *
FROM empl3;

107 rows selected.


m y
d e
3-30
a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c
Scalanie wierszy: przykáad (kontynuacja)
e A
c l
Przykáad na slajdzie dopasowuje kolumnĊ EMPLOYEE_ID
EMPLOYEE_ID w tabeli EMPLOYEES. JeĞli w tabeli
E_ID w tabeli EMPL3
beli EMPL3 zostanie
zost
E do kolumny
znaleziony wiersz

r a
pasujący do jednego z wierszy w tabeli EMPLOYEES, zostanie
OYEES, to zosta sta on zaktualizowany, tak

O ly
aby siĊ zgadzaá siĊ z wierszem w tabeli EMPLOYEES.
znaleziony, to do tabeli EMPL3 zostanie
MPLOYEES. JeĞli
anie wstawiony
JeeĞli taki wiersz nie zostanie
y nowy
n wiersz.

l & On
Jest sprawdzany warunek c.employee_id
mployee_id = e.employee_id.
e.employ PoniewaĪ tabela
EMPL3 jest pusta, warunek
instrukcji przechodzi do a e
gaáĊzi
o ga
n
speániony
k nie jest spe ánion
áĊzi decyzyjnej
ony — nie ma pa pasujących wierszy. Wykonanie
yjnej WHEN NOT MATCHED i instrukcja MERGE
decyzyjn
wstawia wiersze z tabeli
t e r
EMPLOYE
U s
abeli EMPLOYEES EES do tabeli EMPL3.
E
Gdyby w tabeli
w obu tabelach
I n
eli EMPL3 istniaáy
belach ((EMPL3
istnia wiersze
rsze i w jednym
EMPL3 oraz EMPLOYEES), E
j z nich numer pracownika byá zgodny
to istniejący wiersz w tabeli EMPL3 zostaáby

e
uaktualniony
ualniony zgodnie z wartoĞcią w tabeli EMPLOYEES.

c l
ra
O
Oracle Database 10g: Podstawy jĊzyka SQL II 3-30
ĝledzenie zmian danych

SELECT

Wersje pobranych wierszy


m y
d e
3-31 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
ĝledzenie zmian danych
e A
c l
Podczas pracy z danymi moĪna nagle odkryü, Īe dane w tabeli
zmienione. Aby to sprawdziü, moĪna uĪyü wielokrotnych
beli musiaáy
przywróceĔ
ych przywróce
zostaü niepoprawnie
musiaáy zosta
Ĕ w celu wyĞwietlenia jakiegoĞ

r a
wiersza danych w konkretnych momentach w przeszáoĞci.
jednak uĪycie zapytania z klauzulą wersji, aby wy
száoĞci. Bardziej w
wyĞwietliü wszystkie
Ğwietliü wszyst
wydajnym rozwiązaniem jest
ystkie zzmiany dokonane w wierszu
O ly
we wskazanym przedziale czasu. Funkcja taa umo umoĪliwia
Īliwia dodoáączenie
ączenie do instrukcji
áąączenie in SELECT klauzuli

l & On
VERSIONS okreĞlającej przedziaá systemowych
w którym chce siĊ obserwowaü zmiany iany wartoĞci
numerów
temowych numeró
wiersza.
wartoĞci wier
rów zmiany SCN lub punktów w czasie,
ersza. Zapytanie zzwraca takĪe związane

na e
z wierszem metadane, takie jakk transakcje odpowiedzialne
Ponadto po odnalezieniu báĊdnej
odpow
áĊdnej transakcjii mo
owiedzialne za wp
moĪna
m Īna uuĪyü
wprowadzane modyfikacje.
zapytania dotyczącego tej transakcji w celu
Īyü zapy

tabeli, przywróciü dan


t e r
sprawdzenia innych dokonanych
danąą tabel
U s
okonanych przezz ni
tabelĊĊ do stanu
nią NastĊpnie
n ą zmian. Nast Ċ
sta u sprzed wprowadzenia
wprow
moĪna, za pomocą funkcji odtwarzania
niepoprawnych zmian.
MoĪna utworzyü
wszystkich
In tabeli z klauzulą
zyü zapytanie tabe VERSIONS w celu uzyskania wszystkich wersji
zulą VE
ch wierszy, które iistnieją lub kiedykolwiek istniaáy w okresie miĊdzy momentem

c l e
uruchomienia
omienia zapytania a czasem wczeĞniejszym wzglĊdem bieĪącej godziny o wartoĞü
ndo_retentio wyraĪoną w sekundach. Parametr undo_retention jest automatycznie
undo_retention

r a
dostosowującym
dostosowującym
ącym si
jest nazywane
siĊ parametrem inicjalizacyjnym. Zapytanie, które zawiera klauzulĊ VERSIONS
nazywa zapytaniem o wersje. Wyniki zapytania o wersje zachowują siĊ tak, jakby klauzula
WHERE zostaáa zastosowana do wersji wierszy. Zapytania o wersje zwracają wartoĞci wierszy na
Okon
koniec poszczególnych transakcji.
Systemowy numer zmiany (SCN): serwer Oracle przypisuje operacjom systemowy numer zmiany
(SCN) w celu rozróĪniania operacji wykonywanych na wierszach przez kaĪdą zatwierdzoną
transakcjĊ.

Oracle Database 10g: Podstawy jĊzyka SQL II 3-31


Zapytanie z klauzulą wersji: przykáad

SELECT salary FROM employees3


WHERE employee_id = 107; 1

UPDATE employees3 SET salary = salary * 1.30


WHERE employee_id = 107;
2
COMMIT;

SELECT salary FROM employees3


VERSIONS BETWEEN SCN MINVALUE AND MAXVALUE 3
WHERE employee_id = 107;

m y
d e
3-32 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Zapytanie z klauzulą wersji: przykáad
e A
c l
Przykáad na slajdzie pobiera informacje o zarobkach pracownika „107” (1). Zarobki
pracownika „107” są zwiĊkszane o 30 procent i taa zmiana zostaje zzatwierdzona (2). NastĊpnie

r a
zostają wyĞwietlone dwie róĪne wersje zarobków ków (3).

O ly
Klauzula VERSIONS nie zmienia planu zapytania. Na przyk
na tabeli stosującej indeksową metodĊ dĊ dostĊpu,
przykáad
pr
dostĊpu, to zapytanie
za
áad jjeĞli uruchomi siĊ zapytanie
to na tej samej tabeli z dodaną

l & On
astosuje indeksow
klauzulą VERSIONS równieĪ zastosuje ową metodĊ
indeksową metodĊ dostĊpu.
dos Wersje wierszy zwrócone

n a e
Klauzula VERSIONS nie ma wpáywu
wartoĞciami wierszy
przez zapytanie o wersje są wartoĞciami
wpáywu na
wie na koniec poszczególnych transakcji.
n transakcyjne zachowanie siĊ zapytania. Oznacza to,
eli z klauzul
Īe zapytanie na tabeli
akcji.
trwającej transakcji.
t e r U s
klauzuląą VERSIONS
ERSIONS nadal
VE nada dziedziczy Ğrodowisko zapytania

I n
DomyĞlna klauzula VERSIONS
VERS by okreĞlona jako
moĪe byü

c l e
SIONS BETWEEN
VERSIONS BETWEE {SCN|TIMESTAMP} MINVALUE AND MAXVALUE.
Klauzula VERSIONS
VERS jest rozszerzeniem instrukcji SQL dostĊpnym tylko w zapytaniach.

ra
MoĪna tworzyü
MoĪna twor
Zapytanie
operacje DML i DDL stosujące tĊ klauzulĊ wewnątrz zapytaĔ podrzĊdnych.
Zapytan o wersje wierszy zwraca wszystkie zatwierdzone wersje wybranych wierszy, czyli
OrównieĪ
rów wartoĞci usuniĊte i inne wartoĞci wstawione póĨniej. Zmiany dokonywane przez
bieĪącą transakcjĊ nie są podawane.

Oracle Database 10g: Podstawy jĊzyka SQL II 3-32


Uzyskiwanie informacji o wersjach wierszy: przykáad
Podczas zapytania o wersje są dwa sposoby uzyskiwania dostĊpu do wierszy:
• DostĊp do wierszy na podstawie numeru ROWID: w tym wypadku wszystkie wersje
wiersza o okreĞlonym numerze ROWID są zwracane niezaleĪnie od ich zawartoĞci.
To w szczególnoĞci oznacza, Īe są zwracane wszystkie wersje pozycji w bloku
wyznaczonym przez numer ROWID.
• DostĊp do wszystkich innych wierszy: w tym wypadku są zwracane wszystkie
wersje wierszy.

m y
d e
c a
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 3-33
Klauzula VERSIONS BETWEEN

SELECT versions_starttime "START_DATE",


versions_endtime "END_DATE",
salary
FROM employees
VERSIONS BETWEEN SCN MINVALUE
AND MAXVALUE
WHERE last_name = 'Lorentz';

m y
d e
3-34 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Klauzula VERSIONS BETWEEN
e A
c l
Klauzula VERSIONS BETWEEN sáuĪy do wyĞwietlania wersji wierszy, które
ania wszystkich w

momentem w przeszáoĞci.
r a
istnieją i kiedykolwiek istniaáy miĊdzy momentem m uruchomi
uruchomienia
enia zapytania a okreĞlonym

O ly
JeĞli punkt w czasie wyznaczony przez parametr undo_retention
undo_
o_retent jest wczeĞniejszy

l
wówczas zapytanie zwraca wartoĞci& On
niĪ dolna granica wyznaczona przezz znacznik czasowy sowy lub numer SCN w klauzuli BETWEEN,
czaso
rtoĞci tylko od chwili
ch wskazane
wskazanej przez ten parametr. Przedziaá
czasowy klauzuli BETWEEN
n a e
moĪe byü
N moĪe byü okreĞlony
okre
reĞlony jako prz
przedziaá numerów SCN lub przedziaá
czasowy (wáączając oba

t e r
ba koĔce).
koĔce).

U s
dzie pobiera informacje
Przykáad na slajdzie informacje o zmian
zmianach zarobków pracownika o nazwisku
„Lorentz”. Warto
WartoĞü
I n pr daciee ko
Ğü NULL przy
istniejącaa w momencie uruchamiania
u
Ĕco
koĔcowej pierwszej wersji oznacza, Īe byáa to wersja
zapytania. WartoĞü NULL dla daty początkowej

c l e
tniej wersji ozna
ostatniej oznacza, Īe ta wersja zostaáa utworzona jeszcze przed punktem w czasie
wyznaczonym pprzez parametr undo_retention.

r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 3-34
Podsumowanie

Podczas tej lekcji przedstawiono, jak:


• UĪywaü instrukcji DML i kontrolowaü transakcje.
• Opisywaü funkcje wstawiania wielotabelowego.
• UĪywaü nastĊpujących typów wstawiania
wielotabelowego:
– bezwarunkowa instrukcja INSERT;
– przestawna instrukcja INSERT;
– warunkowa instrukcja INSERT ALL;
– warunkowa instrukcja INSERT FIRST.
• Scalaü wiersze w tabeli.
• Operowaü danymi za pomocą zapytaĔ podrzĊdnych.
• ĝledziü zmiany danych w okreĞlonym przedziale
czasowym.
m y
d e
3-35 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Podsumowanie
e A
c l
Podczas tej lekcji omówiono wykonywanie dziaáaĔ na danych w bazi
bazie danych Oracle za

r a
pomocą zapytaĔ podrzĊdnych. Przedstawiono teĪ zagadnienia dotyczące
instrukcji INSERT, instrukcji MERGE oraz Ğledzenia
do wielotabelowych
ledzenia zmian w bazie danych.

O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 3-35
ûwiczenie 3: Omówienie

To üwiczenie obejmuje nastĊpujące zagadnienia:


• Wykonywanie wielotabelowych instrukcji
wstawiania.
• Wykonywanie operacji scalania za pomocą
instrukcji MERGE.
• ĝledzenie wersji wierszy.

m y
d e
3-36 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
ûwiczenie 3: Omówienie
e A
c l
To üwiczenie obejmuje dodawanie wierszy do tabeli emp_data, aktualizowanie danych,
emp_data, aktu

r a
usuwanie ich z tabeli, a nastĊpnie Ğledzenie wykonanych
onanych transakc
transakcji.

O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 3-36
ûwiczenie 3
1. Wykonaü skrypt lab_03_01.sql znajdujący siĊ w folderze laboratorium, aby
utworzyü tabelĊ SAL_HISTORY.
2. WyĞwietliü strukturĊ tabeli SAL_HISTORY.

3. Wykonaü skrypt lab_03_03.sql znajdujący siĊ w folderze laboratorium, aby


utworzyü tabelĊ MGR_HISTORY.
4. WyĞwietliü strukturĊ tabeli MGR_HISTORY.

5. Wykonaü skrypt lab_03_05.sql znajdujący siĊ w folderze laboratorium,


aby utworzyü tabelĊ SPECIAL_SAL.
6. WyĞwietliü strukturĊ tabeli SPECIAL_SAL.

m y
d e
7. a. Utworzyü zapytanie, które wykonuje nastĊpujące czynnoĞci: ci:
c a
- Pobiera z tabeli EMPLOYEES numery pracowników,
oraz numery kierowników wszystkich pracowników
e
w,
A
daty zatrudnienia, zarobki
zatrudnie
numerach mniejszych
ników o numerac
od 125.
c l
- JeĞli zarobki są wiĊksze od 20 000 USD,
D, to wstawia nunumery pracowników

r a
oraz ich zarobki do tabeli SPECIAL_SAL.
AL_SAL.

SAL_HISTORY. O ly
- Wstawia numery pracowników, w, daty zatrudnie
zatrudnienia
ienia or
oraz zarobki do tabeli

l & On
- Wstawia numery pracowników, numery
cowników, numemery kierowników oraz zarobki do tabeli
MGR_HISTORY.

n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 3-37
ûwiczenie 3 (kontynuacja)
b. WyĞwietliü wiersze z tabeli SPECIAL_SAL.

c. WyĞwietliü wiersze z tabeli SAL_HISTORY.

m y
d e
ca
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 3-38
ûwiczenie 3 (kontynuacja)
d. WyĞwietliü wiersze z tabeli MGR_HISTORY.

m y
d e
c a
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 3-39
ûwiczenie 3 (kontynuacja)
8. a. Wykonaü skrypt lab_03_08a.sql znajdujący siĊ w folderze laboratorium, aby
utworzyü tabelĊ SALES_SOURCE_DATA.
b. Wykonaü skrypt lab_03_08b.sql znajdujący siĊ w folderze laboratorium, aby
wstawiü wiersze do tabeli SALES_SOURCE_DATA.
c. WyĞwietliü strukturĊ tabeli SALES_SOURCE_DATA.

d. WyĞwietliü wiersze z tabeli SALES_SOURCE_DATA.

utworzyü tabelĊ SALES_INFO.


m y
e. Wykonaü skrypt lab_03_08c.sql znajdujący siĊ w folderze laboratorium,
m, aby

f. WyĞwietliü strukturĊ tabeli SALES_INFO.

d e
c a
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 3-40
ûwiczenie 3 (kontynuacja)
g. Utworzyü zapytanie, które wykonuje nastĊpujące czynnoĞci:
Pobiera z tabeli SALES_SOURCE_DATA numery pracowników, numery tygodni,
wielkoĞci sprzedaĪy w poniedziaáki, wielkoĞci sprzedaĪy we wtorki, wielkoĞci
sprzedaĪy w Ğrody, wielkoĞci sprzedaĪy w czwartki oraz wielkoĞci sprzedaĪy
w piątki.
Konstruuje przeksztaácenie zamieniające kaĪdy wiersz pobrany z tabeli
SALES_SOURCE_DATA na wiele wierszy w tabeli SALES_INFO.
Wskazówka: UĪyü przestawnej instrukcji INSERT.
h. WyĞwietliü wiersze z tabeli SALES_INFO.

9. Dane o byáych pracownikach są zapisane w zwykáym pliku tekstowym o nazwie


emp.data. NaleĪy wstawiü do tabeli nazwiska i adresy poczty elektronicznej
wszystkich (zarówno byáych, jak i obecnych) pracowników. W tym celu naleĪy
najpierw utworzyü zewnĊtrzną tabelĊ o nazwie EMP_DATA korzystającą z pliku
Ĩródáowego emp.dat, znajdującego siĊ w katalogu emp_dir. MoĪna w tym celu
uĪyü skryptu lab_03_09.sql.
m y elu

a. ZwiĊkszyü rozmiar kolumny poczty elektronicznej do 45 znaków.


d e
10. NastĊpnie wykonaü skrypt lab_03_10.sql w celu utworzenia tabeli EMP_HIST.
ków.
EMP_HIST.

b. Scaliü dane w tabeli EMP_DATA utworzonej w poprzednim


w tabeli EMP_HIST. Przyjąü, Īe dane w tabeli zewnĊtrznej
c a
im zadaniu z danymi
Ċtrznej EMP_DATA
EMP_DA
dan

są najbardziej aktualne. JeĞli wiersz w tabeli EMP_DATA

e
w tabeli EMP_HIST, to naleĪy uaktualniü kolumnĊ A
P_DATA jest zgo
zgodny z wierszem
lumnĊ adresów poczty elektronicznej

c l
w tabeli EMP_HIST, tak aby jej wartoĞü odpowiadaáa
odpowiadaáa wierszowi
w w tabeli

r a
EMP_DATA. JeĞli wiersz w tabeli EMP_DATA
MP_DATA nie pasuje
w tabeli EMP_HIST, to naleĪy go wstawiü
wstawiü do tej
pa do Īadnego wiersza
drugiej tabeli. Wiersze są
te dr
O ly
uwaĪane za pasujące wtedy, y, gdy zgadzają
zgadzają siĊ
siĊ imiona i nazwiska pracowników.

l & On
c. WyĞwietliü wiersze z tabeli
beli EMP_HIST ST po scaleniu.

n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 3-41
ûwiczenie 3 (kontynuacja)

m y
d e
c
numer dziaáu dla pracownika „Kochhar” na „60” i zatwierdziüü zmianĊ.a
11. Utworzyü tabelĊ EMP3 za pomocą skryptu lab_03_11.sql. W tabeli EMP3 zmieniü
zmianĊ. NastĊpnie
NastĊ
zm

e
PrzeĞledziü zmiany w wierszach pracownika „Kochhar” A
zmieniü numer dziaáu dla pracownika „Kochhar” na „50”” i zatwierdzi
zatwierdziüü zmianĊ.
zm
pomocąą funkcji
har” za pomoc f Ğledzenia
wersji wierszy.
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 3-42
Tworzenie raportów przez grupowanie
wzajemnie powiązanych danych

m y
d e
a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Cele

Zagadnienia przedstawione w ramach


tej lekcji pozwalają:
• UĪywaü operatora ROLLUP do obliczania
sum czĊĞciowych.
• UĪywaü operatora CUBE do obliczania
wartoĞci krzyĪowych.
• UĪywaü funkcji GROUPING do rozpoznawania
wartoĞci wierszy utworzonych za pomocą
operacji ROLLUP lub CUBE.
• UĪywaü operatora GROUPING SETS do tworzenia
pojedynczych zbiorów wyników.

m y
d e
4-2 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Cele
e A
Podczas tej lekcji przedstawiono, jak:
c l
• Grupowaü dane w celu uzyskania:
r a
- sum czĊĞciowych za pomocą operatora ratora ROLLUP;
ROLLUP;

• UĪywaü funkcji GROUPING do O ly


- wartoĞci krzyĪowych za pomocą ocą operatora CUBE.
o rozpoznawania
UBE.
CU
agregacji zbioru wyników
nia poziomu agr

l
utworzonego przez operator & On
or ROLLUP lub CUBE.
CUBE.
• UĪywaü operatora GROUPING
równowaĪnego wynikowi
n a e
OUPING SETS
ynikowi operatora
operator
S do tworzenia pojedynczego
tora UNION ALL.
p zbioru wyników

t e r U s
AL

I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 4-2
Omówienie funkcji grupowych

• Funkcje grupowe dziaáają na zbiorach wierszy


i zwracają jeden wynik dla kaĪdej grupy.
• SELECT [column,] group_function(column). . .
FROM table
• [WHERE condition]
• [GROUP BY group_by_expression]
[ORDER BY column];

• Przykáad:
SELECT AVG(salary), STDDEV(salary),
COUNT(commission_pct),MAX(hire_date)
FROM employees
WHERE job_id LIKE 'SA%';

m y
d e
4-3
a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c
Funkcje grupowe
e A
c l
Klauzula GROUP BY sáuĪy do áączenia wierszy tabeli w grupy.
zwraca dla kaĪdej z grup konkretną informacjĊ podsumowującą.
upy. U
mowując
UĪyta nastĊpnie
Īyta nast Ċp funkcja grupowa
ą. Funkcje grupowe mo
ącą. moĪna umieszczaü

r a
na liĞcie klauzuli SELECT oraz w klauzulach ORDER
funkcji grupowej i dla kaĪdej z grup zwraca po
HAVING. Serwer Oracle oblicza wartoĞü
ER BY i HAVING
o jednym wierszu wynikowym.
u wynik
O ly
Typy funkcji grupowych: KaĪda z funkcji cji grupowych AV VG, SUM
AVG, SUM,, MMAX,
AX MIN, COUNT, STDDEV

l
wartoĞciach liczbowych, a funkcje & On
oraz VARIANCE ma jeden argument. Funkcje AVG
je MAX i MIN mo
AVG,, SU
mogą
UM, STDDEV i V
SUM,
dziaáaü
ogą dzia
VARIANCE dziaáają tylko na
áaü na wartoĞciach
wa liczbowych, znakowych
i datach. Funkcja COUNT zwraca
n a e
raca liczbĊ
liczbĊ niepus
ustych wierszy dla danego wyraĪenia. Przykáad na slajdzie
niepustych

stanowiska zaczyna
t e
prowizje oraz najpóĨniejsząr
Ĩniejszą dat s
oblicza Ğrednie zarobki, standardowe odch
datĊĊ zatru
U
siĊĊ od liter „S
zyna si
odchylenie
zatrudnienia
„SA”.
zarobków, liczbĊ pracowników otrzymujących
chylenie zarobków
udnienia wszystk
wszystkich tych pracowników, których nazwa

Wskazówki
I n
ki dotyczące
dotyczące stosowania
stos funkcji
cji grupowych

c l e
• Typem danych arg
• Wszystkie fun
argumentów funkcji grupowych moĪe byü CHAR, VARCHAR2, NUMBER i DATE.
funkcje grupowe oprócz funkcji COUNT(*) ignorują wartoĞci NULL. Aby

r a
uwzgl
uwzglĊdniü
wart
Ċdn wartoĞci NULL, naleĪy uĪyü funkcji NVL. Funkcja COUNT zwraca albo zliczoną
wartoĞü, albo zero.

O • S Serwer Oracle niejawnie sortuje zbiór wyników w porządku rosnącym wedáug kolumn
grupujących podanych w klauzuli GROUP BY. Aby odwróciü ten domyĞlny porządek, naleĪy
w klauzuli ORDER BY uĪyü sáowa kluczowego DESC.

Oracle Database 10g: Podstawy jĊzyka SQL II 4-3


Omówienie klauzuli GROUP BY

• Skáadnia:
• SELECT [column,] group_function(column). . .
• FROM table
[WHERE condition]
• [GROUP BY group_by_expression]
• [ORDER BY column];

• Przykáad:
SELECT department_id, job_id, SUM(salary),
COUNT(employee_id)
FROM employees

y
GROUP BY department_id, job_id ;

e m
4-4
ad
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

Omówienie klauzuli GROUP BY A c


c le
Przykáad na slajdzie jest obliczany przez serwer Oracle nastĊpujący
cle w nast ący sposób:
Ċpujący

r a
• Klauzula SELECT okreĞla, Īe mają zostaü pobrane nastĊpujące
- numery dziaáów i numery stanowisk
nastĊpuj
isk w tabeli EMPLOYEES;
EMPPL
dane:

klauzulĊ GROUP BY. O ly


- sumy zarobków i liczby pracowników
owników w ka kaĪdej
Īdej grupie okreĞlonej przez
d grupi

• Klauzula GROUP BY definiuje


l & On grupowania
niuje sposób gru wierszy tabeli.
rupowania wiersz
Dla kaĪdego stanowiska
Wyniki są grupowane
n
wane weda e
ka w dziale ssąą obliczane
wedáug
áug numerów
num
ob
umerów dziaáów,
czne zarobki oraz liczba pracowników.
áąączne
áączne
dziaáów a nastĊpnie wedáug stanowisk
w kaĪdym z dzia
e
dziaáów.
áów.
t r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 4-4
Omówienie klauzuli HAVING

• Klauzula HAVING okreĞla, które grupy mają


byü wyĞwietlane.
• Dalsze zawĊĪanie grup odbywa siĊ na podstawie
warunku ograniczającego.
SELECT [column,] group_function(column)...
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[HAVING having_expression]
[ORDER BY column];

m y
d e
4-5 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Klauzula HAVING
e A
c l
Formowanie grup i obliczanie funkcji grupowych jestt wykonywane przed
p zastosowaniem

r a
klauzuli HAVING. Klauzula HAVING moĪe poprzedzaü zedzaü klauzulĊ
klauzulĊ GROUP BY, ale zaleca siĊ
uĪycie jej po klauzuli GROUP BY, gdyĪ jest to bardziej logic
logiczne.
icz

O ly
W wypadku uĪycia klauzuli HAVING serwer erwer Oracle przeprowadza
rzeprowadz nastĊpujące czynnoĞci:
prz
1. Grupuje wiersze.

l & On
2. Oblicza wartoĞci funkcji grupowych dlaa pposzczególnych grup i wyĞwietla tylko

n a e
iają kryteria podane
te grupy, które speániają poda
dane w klauzuli HAVING.

t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 4-5
Klauzula GROUP BY z operatorami
ROLLUP i CUBE

• Operatory ROLLUP i CUBE w klauzuli GROUP BY


tworzą specjalne wiersze agregowane w wyniku
krzyĪowania kolumn.
• Operator ROLLUP tworzy zbiór wynikowy
skáadający siĊ z normalnie pogrupowanych
wierszy i sum czĊĞciowych.
• Operator CUBE tworzy zbiór wynikowy skáadający
siĊ z wierszy operatora ROLLUP i wierszy
krzyĪowych.

m y
d e
4-6 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Klauzula GROUP BY z operatorami ROLLUP i CUBE
e A
c l
Operatory ROLLUP i CUBE stosuje siĊ w zapytaniu w klauzuli GROU
GROUP BY. UĪycie operatora

a
ROLLUP daje zbiór wyników w postaci zwykáychh grup wierszy i wierszy sum czĊĞciowych
r
dla tych grup. UĪycie operatora CUBE w klauzuli
uzuli GROUP BY B powoduje pogrupowanie

O ly
wybranych wierszy na podstawie wartoĞcici wszystkich mo
podanych w specyfikacji zapytania i zwraca dla ka
kaĪdej
moĪliwych
m Īliwyc kombinacji wyraĪeĔ
d grupy po jednym
Īdej j wierszu z informacją
podsumowującą. Operatora CUBE
l & On
moĪna uĪywaü
E moĪna uĪyw
waü do tworzenia wierszy krzyĪowych.

n a e
orów ROLLUP i CUBE,
Uwaga: UĪywając operatorów CUBE, naleĪy
naleĪy siĊ
s upewniü, Īe kolumny podane
w klauzuli GROUP BY są
r
są powiązane
powiązane
ązane sensownymi,
s
ypadku operatory zwróc
w przeciwnym wypadku
t e U s realnymi
re zwi
związkami, gdyĪ
zupeá nieistotne informacje.
zwrócąą zupeánie

I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 4-6
Operator ROLLUP

• Operator ROLLUP jest rozszerzeniem klauzuli


GROUP BY.
• Operator ROLLUP sáuĪy do tworzenia róĪnych
agregacji, takich jak sumy czĊĞciowe.
SELECT [column,] group_function(column). . .
FROM table
[WHERE condition]
[GROUP BY [ROLLUP] group_by_expression]
[HAVING having_expression];
[ORDER BY column];

m y
d e
4-7 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Operator ROLLUP
e A
c l
Operator ROLLUP tworzy podsumowania oraz specjalne
podanych w klauzuli GROUP BY. MoĪe byü uĪywany
podsumowania dla wyraĪeĔ
lne podsumowan
wany do wydobywania
wydoby ze zbiorów

r a
wynikowych róĪnych statystyk i informacji podsumowuj
podsumowujących ącyc
ych na potrzeby raportów,
ących
zestawieĔ lub wykresów.
O ly
l & On
Operator ROLLUP grupuje dane, poruszając
oruszając
kolumn okreĞlonej w klauzuli GROUP
siĊĊ odd sstrony prawej do
ąc si
BY. NastĊpnie
ROUP BY. NasstĊpnie do utworzonych
utwo
d lewej wzdáuĪ listy
grup stosuje podane
funkcje grupowe.
n a e
Uwaga
• Aby utworzyü
t e r U s
zyü sumy czĊĞciowe
czĊĞci we w n wymiarach
wymia (tzn. w n kolumnach klauzuli GROUP
BY) bez
ez uuĪycia
instrukcji I n
Īycia operatora
operato ROLLUP,LUP, trzeba
tr powiązaü operatorem UNION ALL n+1
SELECT Takie wykonywanie zapytaĔ jest nieefektywne, poniewaĪ kaĪda
strukcji SELECT.

c l e
z instrukcji SELECT
SE
wyniki, uzyskując
uz
wymaga dostĊpu do tabeli. Operator ROLLUP gromadzi swoje
dostĊp do tabeli tylko raz. Jest szczególnie przydatny wówczas,

r a gdy w tworzeniu sum czĊĞciowych bierze udziaá wiele kolumn.


• Sumy
S czĊĞciowe i sumy áączne są tworzone za pomocą operatora ROLLUP. Operator
O CUBE równieĪ oblicza sumy áączne, ale efektywnie grupuje dane w dowolnym
moĪliwym kierunku, tworząc podsumowania krzyĪowe.

Oracle Database 10g: Podstawy jĊzyka SQL II 4-7


Operator ROLLUP: przykáad

SELECT department_id, job_id, SUM(salary)


FROM employees
WHERE department_id < 60
GROUP BY ROLLUP(department_id, job_id);

3
m y
d e
4-8
a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c
Przykáad uĪycia operatora ROLLUP
e A
W przykáadzie na slajdzie:

c l
• Klauzula GROUP BY wyĞwietla áączne zarobki poszczególnych stanowiskach
ki na poszczegól

• Operator ROLLUP wyĞwietla:


r a
w tych dziaáach, których numer jest mniejszy szy od 60.

O ly
- áączne zarobki dla kaĪdego dziaáu
- áączne zarobki we wszystkich
dziaáu o numerzee mn
tkich dziaáach,
dziaáach, których
k
mniejszym
iejsz od 60;
numer jest mniejszy od 60,

l & On
niezaleĪnie od numerów
W przykáadzie na slajdzie cyfrą
ów stanowisk.
frą 1 jest oznaczona
czona grupa ppodsumowana
oznacz pods wedáug kolumn
DEPARTMENT_ID i JOB_ID.
n a e
B_ID. Cyfra 2 oznacza
oz grupĊ
grupĊ podsumowaną
po tylko wedáug

e r
numerów dziaáów (DEPARTMENT_ID),
s
EPARTMENT_ID
Operator ROLLUP tworzy sumy czĊĞciowe,
szczegóáowego
t U
ID), natomiast cyfra
cy 3 — podsumowanie caáoĞci.
czzĊĞciowe, które są „zwijane” od najbardziej
podsumowania
o ppoziomu ppodsu wania aaĪĪ do áącznego podsumowania caáoĞci, zgodnie
sumy czĊĞcioweI n
z listą grupowania
owania okreĞloną
okreĞlon w klauzuliuli GROUP
GR BY. Najpierw są obliczane standardowe
ĊĞciowe dla grup okreĞlonych w klauzuli GROUP BY (w podanym przykáadzie

c l e
są to sumy zarobków
zarobków, pogrupowane wedáug stanowisk w kaĪdym dziale). NastĊpnie
w wyniku przejĞcia
czĊĞciowe
przejĞc po liĞcie grupowanych kolumn od prawej do lewej są tworzone sumy
czĊĞciowe kol

r a kolejnych wyĪszych poziomów. (W podanym przykáadzie są obliczane sumy


zarobków w poszczególnych dziaáach oraz suma zarobków we wszystkich dziaáach.)
• JeĞli
Je w operatorze ROLLUP w klauzuli GROUP BY jest n wyraĪeĔ, to w wyniku
O operacji otrzymuje siĊ n + 1 grup (w omawianym przykáadzie 2 + 1 = 3).
• Wiersze uzyskane na podstawie wartoĞci pierwszych n wyraĪeĔ są nazywane
wierszami zwykáymi, pozostaáe wiersze są nazywane wierszami specjalnymi.

Oracle Database 10g: Podstawy jĊzyka SQL II 4-8


Operator CUBE

• Operator CUBE jest rozszerzeniem klauzuli


GROUP BY.
• Operator CUBE sáuĪy do tworzenia podsumowaĔ
krzyĪowych za pomocą jednej instrukcji SELECT.
SELECT [column,] group_function(column)...
FROM table
[WHERE condition]
[GROUP BY [CUBE] group_by_expression]
[HAVING having_expression]
[ORDER BY column];

m y
d e
4-9 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Operator CUBE
e A
l
Operator CUBE jest dodatkowym parametrem klauzuli GROUP BY w instrukcji SELECT.
c
MoĪe byü zastosowany do wszystkich funkcji grupowych,
powych, takich ja jak AVG, SUM, MAX, MIN

r a
i COUNT. Jest uĪywany do tworzenia zbiorów wyni
w raportach krzyĪowych. Podczas gdy operator
wynikowych,
kowych, z kktórych korzysta siĊ najczĊĞciej
rator ROLLUP tworzy
tw
tworz tylko czĊĞü kombinacji sum
O ly
czĊĞciowych, operator CUBE tworzy sumy my czczĊĞciowe
ĊĞciowe dla wszystkich moĪliwych kombinacji
dl wszystk

l & On
grup okreĞlonych w klauzuli GROUP BY oraz ich sumĊ
Operator CUBE z funkcją agregującąącą jest uĪywany
gując
suumĊ caákowitą.
caákowitą
wany do tworzenia
uĪywa tworzen dodatkowych wierszy zbioru
wyników. Kolumny w klauzuli
nadzbioru grup. NastĊpnie
n a e
zuli GROUP BY Y są
są wzajemnie krzyĪowane w celu utworzenia
p jest stosowana funkcja sumująca podana w klauzuli
nie do tych grup

specjalnych. Liczba
t r U
zba dodatkowych s
SELECT, w wyniku czego powstajee zbiór wartoĞci
e
wartoĞci podsumowujących dla wszystkich wierszy
dodatkowyc grup w zbiorze
zbior wynikowym jest bezpoĞrednio zaleĪna od
liczby kolumn
W rzeczywistoĞci I n
mn w klauzuli GROUP
GR
zywistoĞci do utworzenia
utw
Y.
BY.
wierszy specjalnych jest uĪywana kaĪda moĪliwa
kombinacja
lub
c l
ub wyraĪeĔ, e
binacja kolumn lub
wyraĪeĔ, to jest
l wyraĪeĔ podanych w klauzuli GROUP BY. JeĞli podano n kolumn
je moĪliwe utworzenie 2n kombinacji grup. Mówiąc jĊzykiem

r a
matematycznym,
matematyczn
nazwa tego
kombinacje te tworzą n–wymiarową kostkĊ, co wyjaĞnia, skąd wziĊáa siĊ
teg operatora (ang. cube oznacza kostkĊ).

OWartoĞci
Wart podsumowaĔ krzyĪowych mogą — za pomocą aplikacji lub narzĊdzi
programistycznych
pr — zostaü wstawione do zestawieĔ i wykresów, które dobrze obrazują
wyniki i relacje miĊdzy danymi.

Oracle Database 10g: Podstawy jĊzyka SQL II 4-9


Operator CUBE: przykáad

SELECT department_id, job_id, SUM(salary)


FROM employees
WHERE department_id < 60
GROUP BY CUBE (department_id, job_id) ;

m y 4

d e
4-10
a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c
Przykáad uĪycia operatora CUBE
e A
l
Przykáadowa instrukcja SELECT zwraca nastĊpujące wyniki:
c
• àączne zarobki dla kaĪdego stanowiska w dziale ziale (dla dziaáów
dziaáów o numerze mniejszym

r a
od 60) wyĞwietlane za sprawą klauzuli GROUPROUP BY;
• àączne zarobki dla kaĪdego dziaáu o numerze mniejszym
BY;
szym od 60.
mniejsz
O ly
• àączne zarobki dla kaĪdego stanowiska, niezaleĪnie
owiska, niezale Īnie od dziaáów.
dzi
• àączne zarobki we wszystkich

l
niezaleĪnie od stanowisk. & On dziaáach,
h dzia áach, których
rych numer jest
któryc jest mniejszy od 60,

wiersze podsumowane tylko


n a e
cyfrą 1 jest oznaczone
W przykáadzie na slajdzie cyfrą
ylko wed
oznac
aczone podsumo
áug stanowisk
wedáug stan
podsumowanie caáoĞci. Cyfra 2 oznacza
anowisk (JOB_ID).
(JOB_ Cyfra 3 oznacza niektóre

t e r
wanych wed
z wierszy podsumowanych
s
áug kolumn
wedáug k
óre z wierszy podsumowanych
cyfra 4 — niektóre
U
DEPAR
DEPARTMENT_ID i JOB_ID, natomiast
pod umowanych ttylko wedáug numerów dziaáów

I n
NT_ID).
(DEPARTMENT_ID).
wykonaá równieĪ operacjĊ ROLLUP w celu wyĞwietlenia sum czĊĞciowych
Operator CUBE wykonaá

c l e
ziaáów o numera
dla dziaáów numerach mniejszych od 60 oraz áącznych zarobków we wszystkich dziaáach,
których numer jest
jes mniejszy od 60, niezaleĪnie od numerów stanowisk. Ponadto operator

r a
CUBE wyĞwietliá
wyĞwie áączne zarobki dla wszystkich stanowisk niezaleĪnie od dziaáów.
Uwaga: Podobnie
P jak w wypadku operatora ROLLUP, tworzenie sum czĊĞciowych

Ow n wymiarach
w
w (tzn. za pomocą n kolumn w klauzuli GROUP BY) bez operatora CUBE
wymagaáoby 2n instrukcji SELECT poáączonych operatorem UNION ALL. Na przykáad
raport trójwymiarowy wymagaáby 23 = 8 instrukcji SELECT poáączonych operatorem
UNION ALL.

Oracle Database 10g: Podstawy jĊzyka SQL II 4-10


Funkcja GROUPING

Funkcja GROUPING:
• Jest stosowana razem z operatorem CUBE lub ROLLUP.
• SáuĪy do znajdowania grup tworzących daną sumĊ
czĊĞciową w wierszu.
• Jest uĪywana do odróĪniania przechowywanych
wartoĞci NULL od wartoĞci NULL utworzonych przez
operator ROLLUP lub CUBE.
• Zwraca wartoĞü 0 lub 1.
SELECT [column,] group_function(column) .. ,
GROUPING(expr)
FROM table
[WHERE condition]
[GROUP BY [ROLLUP][CUBE] group_by_expression]
[HAVING having_expression]
[ORDER BY column];
m y
d e
4-11
a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c
Funkcja GROUPING
e A
c l
Funkcja GROUPING moĪe byü uĪywana z operatorami CUBE oraz ROLLUP.
w zrozumieniu, w jaki sposób zostaáa uzyskana wartoĞü
RO
artoĞü podsumowania.
podsumow
Pomaga

r a
Funkcja GROUPING ma jeden argument bĊdący
GROUPING musi byü jednym z wyraĪeĔ podanych
cy kolumną.
kolumną.ą. WyraĪenie
odanych w klauzuli
Wyr
Wyra expr w funkcji
uzuli GROUP BY. Funkcja
klauz
zwraca wartoĞü 0 lub 1.
O ly
l
• OkreĞleniu poziomu agregowania& On
WartoĞci zwrócone przez funkcjĊ GROUPING
ggowania sumy
poma
y cz
magają w:
ROUPING pomagają
czĊĞciowej,
ĊĞciowej,j tzn. grupy
g lub grup,
na podstawie których zosta
• Rozpoznawaniu znaczenia
n a e
zostaáa
áa obliczonaa dana suma cz
wartoĞci
aczenia warto Ğcii NULL w kolumnie
czĊĞciowa.
kolum wyraĪenia w wierszu
zbioru wyników:

- wartoĞü
t e r
utwo
U
toĞü NULL utworzona
s
- wartoĞü NULL z tabeli podstawowej
p (przechowywana wartoĞü NULL);
(p
a przez operacjĊ
op ROLLUP lub CUBE (jako wynik
Zwrócenie I
wartoĞci
nie warto n
funkcji grupowej
grupowe dla danego
Ğci 0 przez
pr
wyraĪenia).
go w
funkcjĊ GROUPING dziaáającą na wyraĪeniu Ğwiadczy
o tym,

c l
m, Īe:
Īe:
e
• WyraĪenie
WyraĪenie to zostaáo uĪyte do obliczenia wartoĞci podsumowania.

r a
• WartoĞü
WartoĞü NULL w kolumnie wyraĪenia jest przechowywaną wartoĞcią pustą.
Zwrócenie
Zwróceni wartoĞci 1 przez funkcjĊ GROUPING dziaáającą na wyraĪeniu Ğwiadczy

Oo tym,
tym Īe:
• WyraĪenie to nie zostaáo uĪyte do obliczenia wartoĞci podsumowania.
• WartoĞü NULL w kolumnie wyraĪenia jest utworzona przez operator ROLLUP
lub CUBE w wyniku grupowania.

Oracle Database 10g: Podstawy jĊzyka SQL II 4-11


Funkcja GROUPING: przykáad
SELECT department_id DEPTID, job_id JOB,
SUM(salary),
GROUPING(department_id) GRP_DEPT,
GROUPING(job_id) GRP_JOB
FROM employees
WHERE department_id < 50
GROUP BY ROLLUP(department_id, job_id);

1
2

m y 3

de
4-12
a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c
Przykáad uĪycia funkcji GROUPING
e A
c l
W przykáadzie na slajdzie rozwaĪamy wartoĞü podsumowania mowania w pierwszym
pierw wierszu

r a
(oznaczonym cyfrą 1) wynoszącą 4400. WartoĞü ta jest áączną
pracowników na stanowisku AD_ASST w dziale
czną sumą
áąączn
iale o numerze 10
su zarobków
110. Do obliczenia tej wartoĞci

GROUPING(department_id) orazO ly
posáuĪyáy dwie kolumny: DEPARTMENT_ID B_ID. A zzatem obie funkcje:
T_ID oraz JOB_ID.
JOB_
G(job_id) zwracają
raz GROUPING(job_id) z wartoĞü 0.
& On
GROUPING

l
Zastanówmy siĊ teraz nad wartoĞcią

a e
(oznaczonym cyfrą 2). WartoĞü
oĞcią podsumowania,
podsumow
rtoĞü ta jest áączną
wania, wynoszącą
czzną sumą
áąączn
wynoszą 4400, w drugim wierszu
sumą zarobków
zarobk w dziale 10. i zostaáa

r n dnieniu danychh z kolumny DEPARTMENT_ID.


obliczona przy uwzglĊdnieniu
s
DEP Oznacza to, Īe

t e
funkcja GROUPING(department_id)
G(departmen
U
yáa brana pod uwagĊ
JOB_ID nie byáa
n
uw
nt_id) zwracazwrac wartoĞü 0. PoniewaĪ jednak kolumna
licze
przy liczeniu podsumowania, wartoĞcią funkcji

W ostatnim
e I
NG(job_id) je
GROUPING(job_id) jest 1. Podobną
statnim wierszu znajduje
z
ną ssytuacjĊ moĪna zaobserwowaü w piątym wierszu.
siĊ wartoĞü 54800 (oznaczona cyfrą 3). Są to áączne zarobki

c l
pracowników wswszystkich tych dziaáów, których numer jest mniejszy od 50, niezaleĪnie od

ra
zajmowanego
zajmowaneg stanowiska. Do obliczenia tej wartoĞci nie zostaáa uĪyta Īadna z kolumn
DEPARTMENT_ID
DEPART i JOB_ID. A zatem obie funkcje GROUPING(department_id)
Oi GROUPING(job_id)
GR zwracają wartoĞü 1.

Oracle Database 10g: Podstawy jĊzyka SQL II 4-12


Operator GROUPING SETS

• Operator GROUPING SETS sáuĪy do definiowania


wielu zbiorów grup w tym samym zapytaniu.
• Najpierw są obliczane wyniki wszystkich zbiorów
grup okreĞlonych przez operator GROUPING SETS,
a nastĊpnie wyniki te są áączone za pomocą operacji
UNION ALL.
• Zalety uĪycia zbiorów grup:
– jest wymagany tylko jeden przebiegpo
tabeli podstawowej;
– nie ma potrzeby zapisywania záoĪonych
instrukcji UNION;
– im wiĊcej elementów wymienia operator GROUPING
SETS, tym wiĊksza korzyĞü pod wzglĊdemwydajnoĞci.
oĞci.
m y
d e
4-13 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Operator GROUPING SETS
e A
c l
Operator GROUPING SETS jest kolejnym rozszerzeniem niem klauzuli GR
okreĞlania wielu grup danych. Pozwala to na zwiĊkszenie
GROUP BY. SáuĪy do
kszenie wydajnoĞci
wydajno tworzenia podsumowaĔ

r a
co usprawnia analizĊ danych wielowymiarowych.
ych.
Zamiast tworzyü wiele instrukcji SELECT poáączonych
poáąączonych
czonych operatorami
operato
op UNION ALL moĪna
O ly
uĪyü pojedynczej instrukcji SELECT z operatorem GROUPING
GRROUPING SETS do okreĞlenia wielu

przykáad:
l & On
zbiorów grup (z których kaĪdy moĪee byü
byü opatrzonyny operatorem ROLLUP
R lub CUBE). Oto

SELECT department_id,

n a e , manager_id,
_id, job_id, manager_id AVG(salary)
FROM employees
GROUP BY
GROUPING SETS
t e r U s
I n
((department_id,
artment_id, job_id, manager_id),
(department_id,
man
epartment_id manager_id),(job_id, manager_id));
Podana
l e
dana instrukcja oblicza
c
o podsumowania w trzech grupach:

r a
(department_id,
(departm
man
manager_id)oraz
job_id, manager_id), (department_id,
(job_id, manager_id)

OUzyskanie
Uzysk tego wyniku bez nowej funkcji wymagaáoby utworzenia wielu zapytaĔ
poáączonych
p operatorem UNION ALL. PodejĞcie takie nie jest jednak wydajne,
poniewaĪ wymaga wielokrotnego przeglądania tych samych danych.

Oracle Database 10g: Podstawy jĊzyka SQL II 4-13


Operator GROUPING SETS (kontynuacja)
Porównajmy poprzedni przykáad z nastĊpującym alternatywnym rozwiązaniem:
SELECT department_id, job_id, manager_id, AVG(salary)
FROM employees
GROUP BY CUBE(department_id, job_id, manager_id);
Instrukcja ta przeprowadza obliczenia dla wszystkich 8 (2 *2 *2) grup, chociaĪ są potrzebne
tylko grupy (department_id, job_id, manager_id), (department_id,
manager_id) oraz (job_id, manager_id).
Innym rozwiązaniem jest nastĊpująca instrukcja:
SELECT department_id, job_id, manager_id, AVG(salary)
FROM employees
GROUP BY department_id, job_id, manager_id
UNION ALL
SELECT department_id, NULL, manager_id, AVG(salary)
FROM employees
GROUP BY department_id, manager_id
UNION ALL
SELECT NULL, job_id, manager_id, AVG(salary)
FROM employees
GROUP BY job_id, manager_id;
Ta instrukcja z kolei wymaga trzech przebiegów po tabeli podstawowej, co sprawia, Īe nie
jest to rozwiązanie wydajne.
Operatory CUBE i ROLLUP mogą byü traktowane jako bardzo konkretne zbiory grupujące.
NastĊpujące porównania pokazują ten fakt:
pujące.
ące.

m y
d e
CUBE(a, b, c) GROUPING SETS
c a
jest równowaĪna
instrukcji A
((a, b, c), (a, b), (a, c), (b, c),

e
l
(a), (b), (c), ())

a c
r
ROLLUP(a, b,c) GROUPING SETS ((a,
, b, c), (a, b),(a), ())
jest równowaĪna
instrukcji
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 4-14
Operator GROUPING SETS: przykáad
SELECT department_id, job_id,
manager_id,avg(salary)
FROM employees
GROUP BY GROUPING SETS
((department_id,job_id), (job_id,manager_id));

… m y 2

d e
4-15
a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c
Operator GROUPING SETS: przykáad
e A
c l
Przykáad na slajdzie oblicza podsumowania w dwóch nastĊpujących
h nast ących zbiorach
Ċpujących z grup, na które
zostaáa podzielona tabela:
r a
• numery stanowisk, numery kierowników; ów;

O ly
• numery dziaáów, numery stanowisk. sk.

l & On
Dla kaĪdej z tych grup są obliczanee Ğrednie
Ğrednie zarobki dla kaĪdej z tych
Ğrednie zarobki
ych dwóch grup.p.
bki pracowników.
zarobk pracowników Zbiór wynikowy wyĞwietla

n a e
Grupa oznaczona w wynikach cyfrąą 1 moĪe
nikach cyfr moĪe byü
byü interpretowana
interpr w nastĊpujący sposób:
• ĝrednie zarobki

t e r s
kowi „100” wynoszą
kierownikowi
U wyno
pracowników na stanowisku AD_VP podlegających
ki wszystkich pra
US
17 000 USD.
• ĝrednie
In
nie zarobki wszystkich
wszy cown
pracowników
„10 wynoszą 12 000 USD itd.
kierownikowi „101”
na stanowisku AC_MGR podlegających

c l e
Grupa oznaczona w wynikach cyfrą 2 moĪe byü interpretowana w nastĊpujący sposób:

ra
ĝrednie zarobki wszystkich pracowników na stanowisku FI_MGR w dziale „100”
• ĝrednie
wy
wynoszą 12 000 USD.

O • ĝrednie zarobki wszystkich pracowników na stanowisku FI_ACCOUNT w dziale „100”


wynoszą 7 920 USD itd.

Oracle Database 10g: Podstawy jĊzyka SQL II 4-15


Operator GROUPING SETS: przykáad (kontynuacja)
Przykáad na slajdzie moĪe byü teĪ zapisany w nastĊpującej postaci:
SELECT department_id, job_id, NULL as manager_id,
AVG(salary) as AVGSAL
FROM employees
GROUP BY department_id, job_id
UNION ALL
SELECT NULL, job_id, manager_id, avg(salary) as AVGSAL
FROM employees
GROUP BY job_id, manager_id;
Bez uĪycia optymalizatora, który przegląda bloki zapytania w celu ustalenia planu
wykonania, podane zapytanie wymagaáoby dwukrotnego przejrzenia tabeli podstawowej
EMPLOYEES.
To mogáoby byü bardzo niewydajne. Dlatego teĪ zaleca siĊ uĪywanie operatora
GROUPING SETS.

m y
d e
ca
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 4-16
Kolumny záoĪone

• Kolumna záoĪona to zbiór kolumn traktowany


jak jedna kolumna.
ROLLUP (a, (b,c) , d)
• Nawiasy w klauzuli GROUP BY powodują,
Īe grupy kolumny bĊdą podczas obliczania
operacji ROLLUP lub CUBE traktowane
jak jedna kolumna.
• Kolumna záoĪona w operatorach ROLLUP
lub CUBE powoduje pominiĊcie agregacji
na niektórych poziomach.

m y
d e
4-17 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Kolumny záoĪone
e A
c l
Kolumna záoĪona to zbiór kolumn traktowany podczass grupowania dan
kolumna. Podany przykáad pokazuje, jak naleĪy okreĞlaü
reĞlaü taką
danych jak jedna
taką kolumnĊ:
kolum
ROLLUP (a, (b, c), d)
r
W tym wypadku wyraĪenie (b,c) tworzy a kolumnĊĊ zzáoĪoną,
y kolumn áoĪon
o ą,
ą, która
k jest traktowana jak
O ly
jednoĞü. Ogólnie kolumny záoĪone są przydatne
GROUPING SETS. Na przykáad w operatorach CUBE
operatorach
rzydatne w opera
eratorach ROLLUP,
BE lub ROLLUP
R CUBE oraz
ROLLU uĪycie kolumny záoĪonej
powoduje pominiĊcie niektórych
l & On CUB
sumowania.
h poziomów sum mowania.

równowaĪna instrukcji:
n a e
To znaczy, Īe na przykáad instrukcja
nstrukcja GROUPP BY ROLLUP(a,
ROLLUP (b, c)) jest

t e r
GROUP BY a, b, c UNION ALL
GROUP BY a UNION ALL
A

U s
n
GROUP BY
Y ()
W tym wypadku
jest stosowany I
wyraĪenie
ypadku wyra
osowany w obr
e
Īeni (b, c) jest traktowane jak jednoĞü i operator ROLLUP nie
obrĊbie
Ċb kolumny (b, c). To tak, jakby zbiór (b, c) zostaá opatrzony
aliasem
c l
sem z a wyraĪenie
GROUP BY RO
wyraĪe GROUP BY zostaáo zredukowane do postaci
ROLLUP(a, z).

ra
Uwaga: Wy WyraĪenie GROUP BY( ) wystĊpuje zazwyczaj w instrukcji SELECT
wartoĞciami
z warto Ğ NULL w kolumnach a i b oraz tylko z funkcją podsumowującą. SáuĪy to

OnajczĊĞciej
najcz
SELECT
FROM
tworzeniu sum caákowitych.
NULL, NULL, aggregate_col
<table_name>
GROUP BY ( );

Oracle Database 10g: Podstawy jĊzyka SQL II 4-17


Kolumny záoĪone (kontynuacja)
WeĨmy na początek zwykáy operator ROLLUP:
GROUP BY ROLLUP(a, b, c)
jest on równowaĪny nastĊpującej konstrukcji:
GROUP BY a, b, c UNION ALL
GROUP BY a, b UNION ALL
GROUP BY a UNION ALL
GROUP BY ()
Podobnie instrukcja:
GROUP BY CUBE((a, b), c)
jest równowaĪna instrukcji:
GROUP BY a, b, c UNION ALL
GROUP BY a, b UNION ALL
GROUP BY c UNION ALL
GROUP BY ()
Podana tabela zawiera okreĞlenia zbiorów grup i równowaĪnych instrukcji GROUP BY.

Operatory GROUPING SETS RównowaĪne instrukcje


GROUP BY

GROUP BY GROUPING SETS(a, b, c) y


GROUP BY a UNION ALL

m
L

e
GROUP BY b UNION ALL

d
GROUP BY c

GROUP BY GROUPING SETS(a, b,(b, c))


c
(WyraĪenie GROUPING SETS z kolumną záoĪoną.)
a GROUP BY a UNION ALL

A
GROUP BY b UNION ALL
GROUP
OUP BY b, c

GROUP BY GROUPING SETS((a, b, c))


c l e GROUP BY a, b, c

r a
GROUP BY GROUPING SETS(a, (b), ()) GROUP
U BY a UNION ALL
GROU

O ly G
GROUP BY b UNION ALL
GROUP B
BY ()

l & On
GROUP BY GROUPING SETS
(a,ROLLUP(b, c))
n a e
ETS GROUP BY a UNION ALL
GR
GROUP BY ROLLUP(b, c)
(WyraĪenie GROUPING

t er U s
kolumną
olumną zzáoĪoną.)
ING SETS z kol áoĪoną )

I n
cl e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 4-18
Kolumny záoĪone: przykáad

SELECT department_id, job_id, manager_id,


SUM(salary)
FROM employees
GROUP BY ROLLUP( department_id,(job_id, manager_id));

2

3

m y 4

d e
4-19
a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c
Kolumny záoĪone: przykáad
e A
RozwaĪmy nastĊpujący przykáad:
c l
FROM employees
r a
SELECT department_id, job_id,manager_id, SUM(salary)
ger_id, SUM(s

O ly
GROUP BY ROLLUP( department_id,job_id,
To zapytanie sprawia, Īe serwer Oracle
manager_id);
_id,job_id, manag
acle oblicza podsumowania
pods
dsumowania dldla nastĊpujących
zbiorów grup:
l & On
1. (job_id, manager_id);

n
2. (department_id, job_id,a emanager_id);
b_id, manager_i
_id);
3. (department_id);
4. Podsumowanie
d);

t e r U s
caákowite.
wanie ca ákowite.
Nie moĪna zaw
I
zawĊziün
Ċziü obliczeĔ
oblicz tylko do interesujących
inte grup bez uĪycia kolumn záoĪonych.

ROLLUP
c l e
DziĊkii nim w przyk
przykáadzie
áad na slajdzie jest moĪliwe potraktowanie podczas operacji
OLLUP kolumn JOB_ID i MANAGER_ID jak jednej kolumny záoĪonej. Kolumny

r a
w nawiasach są
umieszczenie
umieszcz
s traktowane przez operacje ROLLUP i CUBE jak jednoĞü, dlatego

Ow nawiasach
naw
traktowaá
tr
kolumn JOB_ID oraz MANAGER_ID, wskazuje serwerowi Oracle, aby
JOB_ID oraz MANAGER_ID jak jedną kolumnĊ (záoĪoną).

Oracle Database 10g: Podstawy jĊzyka SQL II 4-19


Kolumny záoĪone: przykáad (kontynuacja)
Przykáad na slajdzie uĪywa w obliczeniach nastĊpujących zbiorów grup:
• (department_id, job_id, manager_id);
• (department_id);
• ( ).
W wyniku tego zapytania zostają wyĞwietlone nastĊpujące dane:
• àączne zarobki dla kaĪdego stanowiska i kierownika (cyfra 1).
• àączne zarobki dla kaĪdego dziaáu, stanowiska i kierownika (cyfra 2).
• àączne zarobki dla kaĪdego dziaáu (cyfra 3).
• Podsumowanie caákowite (cyfra 4).
Przykáad na slajdzie moĪe byü teĪ zapisany w nastĊpującej postaci:
SELECT department_id, job_id, manager_id, SUM(salary)
FROM employees
GROUP BY department_id,job_id, manager_id
UNION ALL
SELECT department_id, TO_CHAR(NULL),TO_NUMBER(NULL), SUM(salary)
FROM employees
GROUP BY department_id
UNION ALL
SELECT TO_NUMBER(NULL), TO_CHAR(NULL),TO_NUMBER(NULL), SUM(salary)
FROM employees
GROUP BY ();

m y
Bez uĪycia optymalizatora, który przegląda bloki zapytania w celu ustalenia planu
wykonania, poprzednie zapytanie wymagaáoby trzykrotnego przejrzenia tabeli podstawowej
dstawowej

záoĪonych.
d e
EMPLOYEES. To mogáoby byü bardzo niewydajne. Dlatego teĪ zaleca siĊ uĪywanieywanie kolumn

ca
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 4-20
Konkatenowanie zbiorów grup

• Konkatenowanie zbiorów grup jest zwiĊzáym


sposobem generowania przydatnych kombinacji
zbiorów grup.
• Aby okreĞliü konkatenowane zbiory grup, naleĪy
oddzieliü przecinkami zbiory grup oraz operatory
ROLLUP i CUBE. Wówczas serwer Oracle poáączy
je w jednej klauzuli GROUP BY.
• Wynik jest produktem krzyĪowym grup
ze wszystkich zbiorów grup.
GROUP BY GROUPING SETS(a, b), GROUPING SETS(c, d)

m y
d e
4-21 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Konkatenowanie kolumn
e A
c l
Konkatenowanie zbiorów grup stanowi zwiĊzáy sposóbób generowania pprzydatnych kombinacji

r a
zbiorów grup. Konkatenowane zbiory grup definiuje
iuje siĊ,
siĊ, wypisując
zbiory grup oraz operatory CUBE i ROLLUP. Przykáadem
wypisuj oddzielone przecinkami
Przykáadem konkonkatenowanych
onk zbiorów grup jest
wyraĪenie:
O ly
l
Definiuje ono nastĊpujące grupy:
py:& On
GROUP BY GROUPING SETS(a, b), GROUPING
NG SETS(c, d
d)

(a, c), (a, d), (b,


n a e
b, c), (b, d)
Konkatenowanie zbiorów
• àawoĞü tworzenia
t e r U s
jest
biorów grup je przydatne z nastĊpujących powodów:
stt bardzo przydat
zapytaĔ: nie trzeba rrĊcznie wypisywaü wszystkich zbiorów grup.
worzenia zapyt
• MoĪliwoĞü
OLAP
LAP czĊsto I n
iwoĞü uĪycia
uĪycia przez
pr aplikacje:
acje: instrukcje SQL wygenerowane przez aplikacje
wymagają konkatenowania zbiorów grup, z których kaĪdy definiuje grupy
czĊsto wym
l e
na potrzeby wymiaru.
c
w

r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 4-21
Konkatenowanie zbiorów grup: przykáad
SELECT department_id, job_id, manager_id,
SUM(salary)
FROM employees
GROUP BY department_id,
ROLLUP(job_id),
CUBE(manager_id);

1

2

3

4 5

m y
d e
4-22
a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c
Konkatenowanie zbiorów grup: przykáad
e A
l
Przykáad na slajdzie okreĞla nastĊpujące zbiory grup:
c


(job_id, manager_id) (1);
r a
(department_id,job_id, manager_id) nager_id) (2);
);
• (job_id) (3);
O ly
er_id) (4);


(department_id,manager_id)
(department_id) (5).
l & On
n a e
NastĊpnie są obliczana áączne
zne zarobki w ra kaĪdej
ramach ka Īdej z tych grup.

te r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 4-22
Podsumowanie

Podczas tej lekcji przedstawiono, jak:


• UĪywaü operatora ROLLUP do obliczania
sum czĊĞciowych.
• UĪywaü operatora CUBE do obliczania
wartoĞci krzyĪowych.
• UĪywaü funkcji GROUPING do rozpoznawania
wartoĞci wierszy utworzonych za pomocą
operacji ROLLUP lub CUBE.
• UĪywaü operatora GROUPING SETS do definiowania
wielu zbiorów grup w tym samym zapytaniu.
• UĪywaü klauzuli GROUP BY do áączenia wyraĪeĔ
na róĪne sposoby:
– tworzenie kolumn záoĪonych;
– konkatenowanie zbiorów grup. m y
d e
4-23 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Podsumowanie
e A

c l
Operatory ROLLUP i CUBE są rozszerzeniami klauzuli
Operator ROLLUP jest uĪywany do tworzenia
auzuli GROUP BY.
ia sum czczĊĞciowych
ĊĞciowy i sum caákowitych.
a


r
Operator CUBE jest uĪywany do obliczania

O ly
• Funkcja GROUPING umoĪliwia rozpoznanie,
utworzonym przez operator CUBE
wartoĞci
nia warto
poznanie, czy dany
BE lub ROLLUP.
ROLLUP P.
krzyĪowych.
Ğci krzy
wiersz jest podsumowaniem
da wie

• Operator GROUPING SETS


samym zapytaniu. Klauzula l & On
S umoĪliwia
umoĪliwia zdefiniowanie
uzula GROUP BY
definiowanie wielu
zde
B oblicza podsu
wie zbiorów grup w tym
podsumowania dla wszystkich
okreĞlonych zbiorów
n a e
ów grup i áączy
czy je za pomocą
áąączy pomocą operatora
op UNION ALL.
• WyraĪenia w klauzuli
- umieszczając
t e r U
ąc kolumny
eszczając s
lauzuli GROUP BY moĪna
moĪna áączyü
kolumn w nawiasach,
áąąc na róĪne sposoby:
nawiasach co tworzy kolumny zzáoĪone, które serwer

I n
Oracle traktuje jak
ROLLUP lub CUBE.
ja jedną caáoĞü
aáoĞü podczas obliczania wartoĞci operatorów

c l e
- wypisując
wypisuj oddzielone przecinkami zbiorów grup oraz operatory ROLLUP
i CUBE,
CU co tworzy konkatenowane zbiory grup, które serwer Oracle obejmuje

r a jedną klauzulą GROUP BY. Wynik jest produktem krzyĪowym grup

O z kaĪdego ze zbiorów grup.

Oracle Database 10g: Podstawy jĊzyka SQL II 4-23


ûwiczenie 4: Omówienie

To üwiczenie obejmuje nastĊpujące zagadnienia:


• UĪywanie operatora ROLLUP.
• UĪywanie operatora CUBE.
• UĪywanie funkcji GROUPING.
• UĪywanie operatora GROUPING SETS.

m y
d e
4-24 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
ûwiczenie 4: Omówienie
e A
c l
To üwiczenie obejmuje uĪywanie klauzuli GROUP BY
Y z operatorami ROLLUP, CUBE oraz
GROUPING SETS.
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 4-24
ûwiczenie 4
1. Utworzyü zapytanie wyĞwietlające nastĊpujące dane dotyczące pracowników
podlegáych kierownikom o identyfikatorach mniejszych od 120:
- numery kierowników;
- numery stanowisk oraz áączne zarobki na tych stanowiskach pracowników
podlegáych temu samemu kierownikowi;
- áączne zarobki tych kierowników;
- áączne zarobki tych kierowników, niezaleĪnie od stanowisk.

… y
d em
c a
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 4-25
ûwiczenie 4 (kontynuacja)
2. Przyjrzeü siĊ wynikowi zadania 1. Za pomocą funkcji GROUPING utworzyü zapytanie
rozpoznające, czy wartoĞci NULL w kolumnach odpowiadających wyraĪeniom GROUP
BY powstaáy w wyniku dziaáania operatora ROLLUP.

m y
d e
c a
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 4-26
ûwiczenie 4 (kontynuacja)
3. Utworzyü zapytanie wyĞwietlające nastĊpujące dane dotyczące pracowników
podlegáych kierownikom o identyfikatorach mniejszych od 120:
- numery kierowników;
- numery stanowisk oraz áączne zarobki na tych stanowiskach pracowników
podlegáych temu samemu kierownikowi;
- áączne zarobki tych kierowników;
- podsumowania krzyĪowe áącznych zarobków na wszystkich stanowiskach,
niezaleĪnie od kierownika;
- áączne zarobki, niezaleĪnie od stanowisk.

m y
d e
c a
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 4-27
ûwiczenie 4 (kontynuacja)
4. Przyjrzeü siĊ wynikowi zadania 3. Za pomocą funkcji GROUPING utworzyü zapytanie
rozpoznające, czy wartoĞci NULL w kolumnach odpowiadających wyraĪeniom GROUP
BY powstaáy w wyniku dziaáania operatora CUBE.

… m y
d e
c a
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 4-28
ûwiczenie 4 (kontynuacja)
5. UĪywając operatora GROUPING SETS utworzyü zapytanie wyĞwietlające
nastĊpujące grupy:
- department_id, manager_id, job_id;
- department_id, job_id;
- manager_id, job_id.
Zapytanie powinno obliczaü áączne zarobki dla kaĪdej z tych grup.

… m y
d e
c a
e A

c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 4-29
m y
d e
ca
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Zarządzanie danymi w róĪnych
strefach czasowych

m y
d e
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Cele

Zagadnienia przedstawione w ramach tej lekcji


pozwalają na korzystanie z nastĊpujących funkcji
daty i godziny:
• TZ_OFFSET • CURRENT_DATE
• FROM_TZ • CURRENT_TIMESTAMP
• TO_TIMESTAMP • LOCALTIMESTAMP
• TO_TIMESTAMP_TZ • DBTIMEZONE
• TO_YMINTERVAL • SESSIONTIMEZONE
• TO_DSINTERVAL • EXTRACT

m y
d e
5-2 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Cele
e A
c l
Podczas tej lekcji przedstawiono niektóre funkcje daty dostĊpne w bazie
ty i godziny dost
danych Oracle.
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 5-2
Strefy czasowe

-08:00 +07:00

+02:00 +10:00
-05:00

Rysunek przedstawia godziny

m y
we wszystkich strefach czasowych
ych
o godzinie 12:00 czasu Greenwich.
nwich.

d e
5-3
a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c
Strefy czasowe
e A
c l
Godziny w ciągu dnia są wyznaczane przez obrót Ziemi
w danej chwili zaleĪy od miejsca, w którym znajduje
mi dookoáa
dookoáa wáasnej
wáas osi. Godzina
siĊĊ obserwator.
duje si obserwat Gdy w Greenwich

r a
w Anglii jest poáudnie, wówczas na MiĊdzynarodowej
arodowej Linii Zm Zmiany
Z Daty jest póánoc. Ziemia

O ly
jest podzielona na 24 strefy czasowe, wiĊc
wzdáuĪ poáudnika zerowego przechodzącego
Ċc w kaĪdej
dzącego
strefie
kaĪdej stref czasowej jest inna godzina. Czas
efie czaso
miejscowoĞü
ącego przez miejscowo
m Ğü Greenwich
G w Anglii jest
nazywany czasem Greenwich (GMT).
l & On standardowy
tandardowy czas,
GMT). Jest to stan czas do którego odnoszą siĊ
wszystkie inne strefy czasowe.
w nim zmiany na czas letni.
n a e
we. Przez caáy
Poáudnik
etni. Po
caáy rok
áudnik jest
ro jest to czas nniezmienny i nie uwzglĊdnia siĊ
umownąą linią
je umown lini áączącą Biegun Póánocny z
Biegunem Poáudniowym.

t e
linia, od której mierzy si
r
owym. Poáudnik

U s
siĊĊ wszystkie
wszy e pozostaáe
wyznacza dáugoĞü geograficzną zerową i jest to
Poáudnikk zerowy wyznac
pozostaáe dáugoĞci geograficzne. RównieĪ wszystkie

geograficzną I n
godziny są mierzone w odniesieniu
odn do czasu Greenwich. KaĪde miejsce ma swoją szerokoĞü
o cza
(odlegáoĞ na póánoc lub poáudnie od równika) oraz dáugoĞü geograficzną
aficzną (odlegáoĞü
(odlegáoĞü
l e
dlegáoĞü na wschód
c
wsch lub zachód od poáudnika zerowego).

r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 5-3
Parametr sesji TIME_ZONE

Parametr TIME_ZONE moĪe przyjąü jedną


z nastĊpujących wartoĞci:
• wartoĞü bezwzglĊdnego przesuniĊcia;
• strefa czasowa bazy danych;
• lokalna strefa czasowa systemu operacyjnego;
• nazwa regionu.
ALTER SESSION SET TIME_ZONE = '-05:00';
ALTER SESSION SET TIME_ZONE = dbtimezone;
ALTER SESSION SET TIME_ZONE = local;
ALTER SESSION SET TIME_ZONE = 'America/New_York';

m y
d e
5-4 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Parametr sesji TIME_ZONE
e A
l
Baza danych Oracle pozwala na przechowywanie w danych typu daty i godziny informacji
c
o strefie czasowej, jak równieĪ uáamkowych czĊĞci
ci sekundy. Do zmiany
z strefy czasowej

r a
w sesji uĪytkownika sáuĪy polecenie ALTER SESSION.
SESSION. StreStrefa
e czasowa moĪe byü okreĞlona

lokalną strefĊ czasową. O ly j, strefĊ


przez bezwzglĊdne przesuniĊcie, nazwĊ strefy czasowej, streffĊĊ czasową
c bazy danych lub

l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 5-4
Funkcje CURRENT_DATE,
CURRENT_TIMESTAMP
i LOCALTIMESTAMP
• CURRENT_DATE
– zwraca bieĪącą datĊ systemową;
– jest typu DATE.
• CURRENT_TIMESTAMP
– zwraca bieĪącą datĊ i godzinĊ systemową;
– jest typu TIMESTAMP WITH TIME ZONE.
• LOCALTIMESTAMP
– zwraca bieĪącą datĊ i godzinĊ sesji uĪytkownika;
– jest typu TIMESTAMP.

m y
d e
5-5 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Funkcje CURRENT_DATE, CURRENT_TIMESTAMP i LOCALTIMESTAMP
e
CALTIMESTAM A
c l
Funkcje CURRENT_DATE i CURRENT_TIMESTAMP zwracaj zwracająą odpow
odpowiednio bieĪącą datĊ

r a
i bieĪącą datĊ i godzinĊ z dokáadnoĞcią do uáamkowych
zwracanym przez funkcjĊ CURRENT_DATE jest DATE,
czĊĞci
owych cz ĊĞci sekundy.
DATE, a typem
sek
pe funkcji
type
Typem danych

CURRENT_TIMESTAMP jest TIMESTAMP


O ly
zawierają przesuniĊcie strefy czasowej
MP WITH TIMETIM
wywoáującej
ej sesji SQL wyw
ywoáującej
ZON Zwracane wartoĞci
ME ZONE.
PrzesuniĊcie
ącej te funkcje. Przesuni

a czasem uniwersalnym (UTC).


l & On
strefy czasowej jest róĪnicą (w godzinach minutach)
odzinach i minut miĊdzy
utach) mi Ċdzy czasem
cz
C). Typ danych TIMESTAMP WITH TIME ZONE ma
lokalnym

nastĊpujący format:
n a e
t er U s
TIMESTAMP [ (fractional_seconds_precision)
(fractiona al_seconds_
gdzie parametr fractional_seconds_precision
] WITH TIME ZONE
opcjonalnie okreĞla liczbĊ
n
fractional_ conds_p

domyĞlna
kowej cz
cyfr uáamkowej
lna to 6.
e I ĊĞci pola SECOND i moĪe
czĊĞci mo byü liczbą z zakresu od 0 do 9. WartoĞü

Funkcja
c l
unkcja LOCALTIMESTAMP
LOCALT zwraca bieĪącą datĊ i godzinĊ w strefie czasowej sesji. FunkcjĊ

r
LOCALT a
LOCALTIME
LOCALTIMESTAMP
LOCALTIMESTAMP
od funkcji CURRENT_TIMESTAMP odróĪnia to, Īe funkcja
zwraca wartoĞü typu TIMESTAMP, a funkcja CURRENT_TIMESTAMP

Ozwrac wartoĞü typu TIMESTAMP WITH TIME ZONE.


zwraca
F
Funkcje te są zgodne z NLS, co oznacza, Īe ich wyniki są podawane w bieĪącym formacie
kalendarza i zegara NLS.

Oracle Database 10g: Podstawy jĊzyka SQL II 5-5


Funkcja CURRENT_DATE

WyĞwietla bieĪącą datĊ w strefie czasowej sesji.

ALTER SESSION
SET NLS_DATE_FORMAT = 'DD-MON-YYYY HH24:MI:SS';

ALTER SESSION SET TIME_ZONE = '-5:0';


SELECT SESSIONTIMEZONE, CURRENT_DATE FROM DUAL;

ALTER SESSION SET TIME_ZONE = '-8:0';


SELECT SESSIONTIMEZONE, CURRENT_DATE FROM DUAL;

m y
d e
5-6 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Funkcja CURRENT_DATE
e A
c l
Funkcja CURRENT_DATE zwraca bieĪącą datĊ w strefie sesji. Zwracana wartoĞü
efie czasowej ses
jest datą w kalendarzu gregoriaĔskim.
r a
W przykáadach na slajdzie moĪna zauwaĪyü,, Īe Īe wartoĞü
wartoĞü funkcji
unkcj CURRENT_DATE jest
fun
O ly
zaleĪna od strefy czasowej sesji. W pierwszym przykáadzie
rwszym przyk ad parametrowi
áadzie param TIME_ZONE sesji

l
czasowej dla bieĪącej sesji SQL.& On
nadano wartoĞü „–5:0”. Parametr TIME_ZONE okreĞla okrreĞla przesuniĊcie
L. Parametr tenn jjest jednak
przesuniĊ domyĞlnej lokalnej strefy
jednak tylko
tylk parametrem sesji, a nie
parametrem inicjalizacyjnym.
n a e
ym. OkreĞla
OkreĞla siĊ
siĊ go w nastĊpujący
nastĊpują sposób:

Maska formatu (([+


t r
TIME_ZONE = '[+ | -] hh:mm'

e U s h
hh: m) oznacza lliczbĊ godzin i minut przed lub po czasie UTC
[+ | -] hh:mm)

gim przyk
W drugim I n
Coordinate nazywany
(Universal Time Coordinate, ny wc
wczeĞniej czasem Greenwich).
áadzie naleĪy zauwaĪyü, Īe zwrócona wartoĞü CURRENT_DATE jest inna po
przykáadzie

c l
mianie warto
zmianie e
Ğci parametru
wartoĞci p TIME_ZONE na „–8:0”.

r
HH24:M aPole
Uwaga: Polecenie
HH24:MI:SS'
ALTER SESSION ustawia format daty sesji na 'DD-MON-YYYY
tzn. dzieĔ_miesiąca (1–31)–skrócona_nazwa_miesiąca–czterocyfrowy_rok
Ogodz (0–23):minuta (0–59):sekunda (0–59).
godzina

Oracle Database 10g: Podstawy jĊzyka SQL II 5-6


Funkcja CURRENT_TIMESTAMP

WyĞwietla bieĪącą datĊ i godzinĊ z uáamkowymi


czĊĞciami sekundy w strefie czasowej sesji.
ALTER SESSION SET TIME_ZONE = '-5:0';
SELECT SESSIONTIMEZONE, CURRENT_TIMESTAMP
FROM DUAL;

ALTER SESSION SET TIME_ZONE = '-8:0';


SELECT SESSIONTIMEZONE, CURRENT_TIMESTAMP
FROM DUAL;

m y
d e
5-7 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Funkcja CURRENT_TIMESTAMP
e A
c l
Funkcja CURRENT_TIMESTAMP zwraca bieĪącą datĊĊ i godzinĊgodzinĊ w st
strefie czasowej sesji jako

r a
wartoĞü typu TIMESTAMP WITH TIME ZONE.. PrzesuniĊcie
bieĪący czas lokalny sesji SQL. Skáadnia funkcji
PrzesuniĊcie strefy
st
nkcji CURRENT_TIMESTAMP
CURRENT_T_T
czasowej odzwierciedla
jest nastĊpująca:
CURRENT_TIMESTAMP (precision)
O ly
ision)
gdzie precision jest opcjonalnym
l
uáamkowych czĊĞci sekundy. JeĞli & On
nym argumentem
JeĞli pominie si
m okreĞlającym
okreĞlającym precyzjĊ dziesiĊtną
ącym precyzj
siĊĊ ten argument, to zostanie uĪyta domyĞlna
wartoĞü 6.
n a e
W przykáadach na slajdzie
zaleĪna od strefy
t e r
lajdzie moĪna

U s
moĪna zauwaĪyü,
sesji.
fy czasowej se
zauwaĪyü, ĪeĪe wartoĞü
wa funkcji CURRENT_TIMESTAMP jest
sji. W pierwszym przykáadzie parametrowi TIME_ZONE sesji
nadano wartoĞü
I n
toĞü „–5:0”. W drugim
d przykáadzie
zykáa naleĪy zauwaĪyü, Īe zmiana parametru
_ZONE na „–8:0” powoduje zmianĊ zwracanej wartoĞci CURRENT_TIMESTAMP.
TIME_ZONE

c le
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 5-7
Funkcja LOCALTIMESTAMP

• WyĞwietla bieĪącą datĊ i godzinĊ w strefie


czasowej sesji jako wartoĞü typu TIMESTAMP.
ALTER SESSION SET TIME_ZONE = '-5:0';
SELECT CURRENT_TIMESTAMP, LOCALTIMESTAMP
FROM DUAL;

ALTER SESSION SET TIME_ZONE = '-8:0';


SELECT CURRENT_TIMESTAMP, LOCALTIMESTAMP
FROM DUAL;

• Funkcja LOCALTIMESTAMP zwraca wartoĞü typu


TIMESTAMP, natomiast funkcja CURRENT_TIMESTAMP
MP
zwraca wartoĞü typu TIMESTAMP WITH TIME ZONE.
ZONE.
m y
d e
5-8 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Funkcja LOCALTIMESTAMP
e A
c l
Funkcja LOCALTIMESTAMP zwraca bieĪącą datĊ i godzinĊ
godzinĊ w strefie czasowej sesji w

r a
postaci wartoĞci typu TIMESTAMP. Skáadnia funkcji
LOCAL_TIMESTAMP (TIMESTAMP_precision)
nkcji LOCAL_TIMESTAMP
_precision)
LOCAL_TI
n)
jest nastĊpująca:

O ly
gdzie TIMESTAMP precision jestt opcjonalnym argumentem
ar okreĞlającym precyzjĊ

l
Przykáady na slajdzie ilustrują
& On
dziesiĊtną uáamkowych czĊĞci sekundy
kundy zwraconej
ją róĪnicĊ
róĪnicĊ miĊdzy
wartoĞci
ej warto Ğci typu TIMESTAMP.
dz funkcjami LOCALTIMESTAMP
miĊdzy
i CURRENT_TIMESTAMP.
n a e
MP. NaleĪy
NaleĪy zauwaĪyü,
zauw Īe funkcja
uwaĪyü, Īe
LO
funkcj LOCALTIMESTAMP
nie wyĞwietla wartoĞci

t e
MESTAMP.
CURRENT_TIMESTAMP.
r U s
Ğci strefy czasowej,
owej, natomiast
czasow natomiast robi
r to funkcja

In
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 5-8
Funkcje DBTIMEZONE i SESSIONTIMEZONE

• WyĞwietla wartoĞü strefy czasowej bazy danych.


SELECT DBTIMEZONE FROM DUAL;

• WyĞwietla wartoĞü strefy czasowej sesji.


SELECT SESSIONTIMEZONE FROM DUAL;

m y
d e
5-9 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Funkcje DBTIMEZONE i SESSIONTIMEZONE
e A
c l
Administrator bazy danych okreĞla domyĞlną strefĊ czasową
w instrukcji CREATE DATABASE klauzulĊ SET TIME_ZONE.
asową bazy dan
TIME_ZONE JeĞli J
danych, podając
tego nie zrobi,

r a
wówczas domyĞlną strefą czasową bazy danych ch bbĊdzie
Ċdzie strefa cczasowa systemu operacyjnego.
Strefa czasowa bazy danych nie moĪe byü zmieniana w ramach ram sesji za pomocą instrukcji
ALTER SESSION. O ly
l & On
Funkcja DBTIMEZONE zwraca wartoĞü czasowej
artoĞü strefy cza
ma postaü przesuniĊcia strefy czasowej (typ znakowy
zn
zasowej bazy dandanych. Zwracana wartoĞü
formacie '[+|-]TZH:TZM')
w form

n a e
lub nazwy regionu strefy czasowej, w zale
zaleĪnoĞci
aleĪnoĞci od tego,
tego jak uĪytkownik okreĞliá wartoĞü

ALTER DATABASE.
t e r
strefy czasowej bazy danych w ostatni
ostatnio
s
SE. W przykáadzie
nio uuĪytej
Īytej instrukcji
instruk CREATE DATABASE lub
przykáadzzie na slajdzie strefa
ustawiona na „–05:00”. Param
U
Parametr TIME_ZONE
s czasowa bazy danych jest
IME_ZON ma nastĊpujący format:
TIME_ZONE
I n
ME_ZONE = '[+ ' | -] hh:mm'
hh
Funkcja
l e
kcja SESSIONTIMEZONE
SESSIONT

c
Zwracana wartoĞü
zwraca wartoĞü strefy czasowej bieĪącej sesji.
wartoĞ ma postaü przesuniĊcia strefy czasowej (typ znakowy w formacie

r a
'[+|-]TZH:TZM') lub nazwy regionu strefy czasowej, w zaleĪnoĞci od tego, jak
'[+|-]TZH
uĪytkownik
uĪytkown okreĞliá wartoĞü strefy czasowej sesji w ostatnio uĪytej instrukcji ALTER

OSESSION.
SESS
wzglĊdem
w
Przykáad na slajdzie pokazuje, Īe strefa czasowa sesji jest przesuniĊta
czasu uniwersalnego o 8 godzin wstecz. NaleĪy zauwaĪyü, Īe strefa czasowa
bazy danych jest inna niĪ strefa czasowa bieĪącej sesji.

Oracle Database 10g: Podstawy jĊzyka SQL II 5-9


Typ danych TIMESTAMP

• Typ danych TIMESTAMP jest rozszerzeniem


typu danych DATE.
• Przechowuje rok, miesiąc i dzieĔ typu danych
DATE, a ponadto wartoĞci godzin, minut
i sekund oraz uáamkową wartoĞü sekundy.
• Typ TIMESTAMP ma nastĊpujące odmiany:
– TIMESTAMP
[(fractional_seconds_precision)] _
– TIMESTAMP
[(fractional_seconds_precision)] _
WITH TIME ZONE
– TIMESTAMP
[(fractional_seconds_precision)] _
WITH LOCAL TIME ZONE
m y
d e
5-10 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Typy danych daty i godziny
e A
c l
Typ danych TIMESTAMP zawiera pola YEAR, MONTH, H, DAY HOUR, MINUTE i SECOND
DAY,, HOUR
oraz uáamkowe czĊĞci sekundy.
Typ danych TIMESTAMP WITH TIME ZONEr a ONE zawiera pola
po YEAR, MONTH, DAY, HOUR,
MINUTE, SECOND, TIMEZONE_HOUR
O lyUR i TIMEZONE_ E_MINUTE oraz uáamkowe czĊĞci
TIMEZONE_MINUTE
sekundy.
Typ danych TIMESTAMP WITH
l & On
TH LOCAL TIMET zawiera te same informacje co typ
ZONE zaw

n a e
TIMESTAMP, przy czym dane przechowywane
przechowywane w bazie danych są znormalizowane wzglĊdem

czasowej klienta.
t e r U s
strefy czasowej bazy danych, a danee pobierane
p baz danych są dostosowywane do strefy
z bazy

cyfr uáamkowej I n
ametr fractional_seconds_precision
Uwaga: Parametr fractio
amkowej czĊĞci
econ opcjonalnie okreĞla liczbĊ
czĊĞci ppola SECOND i moĪe byü liczbą z zakresu od 0 do 9. WartoĞü
domyĞlna
l e
myĞlna to 6.
c
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 5-10
Typy danych TIMESTAMP

Typ danych Pola

TIMESTAMP Rok, miesiąc, dzieĔ, godzina, minuta,


sekunda i uáamkowe czĊĞci sekundy

TIMESTAMP WITH TIME


ZONE Taki sam, jak typ danych TIMESTAMP;
zawiera równieĪ pola:
TimeZone_Hour i TimeZone_Minute
lub TimeZone_Region

Taki sam, jak typ danych TIMESTAMP;


TIMESTAMP WITH LOCAL
TIME ZONE zawiera równieĪ wartoĞü przesuniĊcia

y
strefy czasowej

m
d e
5-11
a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c
Typy danych TIMESTAMP
e A
l
TIMESTAMP (fractional_seconds_ precision)
ision)
c
r a
Ten typ danych zawiera rok, miesiąc i dzieĔ oznaczające
naczające datĊ,
ące dat
oznaczające godzinĊ, przy czym fractional_seconds_precision
nal_seconds ds_p
Ċ ooraz godzinĊ, minutĊ i sekundĊ
opcjonalnie
O ly
okreĞla liczbĊ cyfr uáamkowej czĊĞci pola
ola SECOND i mo
moĪe
Īe byü
byü liczbą
li z zakresu od 0 do 9.
WartoĞü domyĞlna to 6.

l & On
TIMESTAMP (fractional_seconds_precision)
al_seconds_p _precision) WITH TIME ZONE

n a e warto
toĞci typu TIMESTAMP
Ten typ danych zawiera wszystkie wartoĞci TIME oraz wartoĞü przesuniĊcia
strefy czasowej.

t e r U s
(fractional_ econds_p
TIMESTAMP (fractional_seconds_precision) WITH LOCAL TIME ZONE

I
anych zawiera wszystkie
Ten typ danych
n ws artoĞ typu TIMESTAMP z nastĊpującymi róĪnicami:
wartoĞci

c l eprzechowy
• Dane przechowywane
danych
bazy danych.
w bazie danych są znormalizowane wzglĊdem strefy czasowej

ra
po
• Dane pobierane z bazy danych są dostosowywane do strefy czasowej sesji.

O
Oracle Database 10g: Podstawy jĊzyka SQL II 5-11
Pola TIMESTAMP

Pola daty i godziny Poprawne wartoĞci


YEAR od –4712 do 9999 (bez roku 0)
MONTH od 01 do 12
DAY od 01 do 31
HOUR od 00 do 23
MINUTE od 00 do 59
SECOND od 00 do 59.9(N), gdzie 9(N)
jest precyzją dziesiĊtną
TIMEZONE_HOUR od –12 do 14
TIMEZONE_MINUTE od 00 do 59

m y
d e
5-12 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Pola TIMESTAMP
e A
c l
KaĪdy typ danych daty i godziny skáada siĊ z kilku z podanych pól. T
Typy te są wzajemnie

pola daty i godziny.


r a
wymienne (w operacjach porównywania i przypisywania)
isywania) tylko wtedy,
w gdy zawierają te same

O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 5-12
RóĪnica miĊdzy typem DATE i TIMESTAMP
A B
-- gdy hire_date ALTER TABLE emp5
jest typu DATE MODIFY hire_date TIMESTAMP;

SELECT hire_date SELECT hire_date


FROM emp5; FROM emp5;


… m y
d e
5-13 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Typ danych TIMESTAMP: przykáad
e A
c l
Przykáad „A” na slajdzie wyĞwietla dane typu DATE w kolumnie hir hire_date tabeli EMP5.

r a
W przykáadzie „B” typ kolumny hire_date zostaje
WyĞwietlone dane róĪnią siĊ. Typ DATE moĪna
ostaje zmieniony na TIMESTAMP.
Īna zmieniü
zmieniü na TIMESTAMP
T
TI nawet wówczas,

TIMESTAMP WITH TIME ZONE moĪna O ly


gdy kolumna zawiera dane. Jednak konwersjĊwersjĊ typu DATE
moĪna wykonaü
DATE lub TIMESTAMP
TI
wykonaaü tylko wtedy,
na typ
wtedy gdy kolumna jest pusta.

l & On
Dla typu TIMESTAMP moĪna okreĞliüokreĞliü precyzjĊ
zjĊ uáamkowych
precyzj uáamkowych czĊĞci sekundy. JeĞli parametr

n a e
ten nie zostanie okreĞlony,, tak jak w pokaz
pokazanym przykáadzie,
azanym przyk áad to przyjmuje on wartoĞü
domyĞlną 6.

t
NastĊpująca instrukcja
e r U sparametrowi
rukcja nadaje par precyzji uáamkowych czĊĞci sekundy wartoĞü 7:
metrowi prec
ALTER TABLE
MODIFY
I n
ABLE emp5
FY hire_date
hire_dat TIMESTAMP(7); M
Uwaga:
c l e danyc daty Oracle domyĞlnie jest wyĞwietlany tak, jak w przykáadzie na
waga: Typ danych
Zawiera on jednak równieĪ inne informacje, takie jak godzinĊ, minutĊ, sekundĊ oraz
slajdzie. Zawie

r a
oznaczenia a.m. i p.m. Aby uzyskaü datĊ w potrzebnym formacie, naleĪy zastosowaü do jej

O wartoĞci
wartoĞ odpowiednią maskĊ formatowania lub funkcjĊ.

Oracle Database 10g: Podstawy jĊzyka SQL II 5-13


Typ danych TIMESTAMP WITH TIME ZONE

• Typ danych TIMESTAMP WITH TIME ZONE jest


odmianą typu TIMESTAMP zawierającą informacje
o przesuniĊciu strefy czasowej.
• PrzesuniĊcie strefy czasowej jest róĪnicą
w godzinach i minutach miĊdzy czasem lokalnym
i czasem uniwersalnym UTC.
• Jest okreĞlony w nastĊpujący sposób:
TIMESTAMP[(fractional_seconds_precision)]
WITH TIME ZONE

m y
d e
5-14 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Typ danych TIMESTAMP WITH TIME ZONE
e A
c l
Skrót UTC oznacza czas uniwersalny (nazywany wczeĞniej
zeĞniej czasem GGreenwich). Dwie

r a
wartoĞci typu TIMESTAMP WITH TIME ZONE
tĊ samą chwilĊ w czasie UTC, niezaleĪnie od
E ssąą uwa
d przesuni
przesuniĊcia
Īane za identyczne, jeĞli oznaczają
uwaĪane
Ċcia stre
strefy
str czasowej TIME ZONE
zawartego w danych. Na przykáad:
O ly
TIMESTAMP '1999-04-15 8:00:00
oznacza ten sam czas, co
l & On
:00:00 -8:00'
-8:0 00'

TIMESTAMP '1999-04-15
n a e
4-15 11:00:00
0:00 -5:00'.
11:00 -5:00'

t e
wschodnioamerykaĔskiego. r
Tzn. godzina 8:00 urzĊdowego
ykaĔskiego.
U s
zĊdowego czasu godzina 11:00 urzĊdowego czasu
u Pacyfiku to go

Ta sama godzina
TIMESTAMP I n
moĪe
dzina mo Īe byü
byü teĪ zapisana, jako:
ana, ja
'1999-04-15 8:00:00 US/Pacific'
STAMP '1999

c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 5-14
Typ danych
TIMESTAMP WITH TIMEZONE: przykáad

CREATE TABLE web_orders


(ord_id number primary key,
order_date TIMESTAMP WITH TIME ZONE);

INSERT INTO web_orders values


(ord_seq.nextval, current_date);

SELECT * FROM web_orders;

m y
d e
5-15 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Typ danych TIMESTAMP WITH TIME ZONE: przykáad
ad
e A
c l
Przykáad na slajdzie tworzy nową tabelĊ web_orders rs zawierającą
ącą kolumny
zawierając k typu

r a
TIMESTAMP WITH TIME ZONE. Dane do tej tabeli ssąą wstawiane
skáadane zamówienie. Data i godzina oraz strefa
wstawi
efa czasowa uuĪytkownika
Īyt
wówczas, gdy jest
skáadającego

O ly
zamówienie jest okreĞlana na podstawie warto
firma prowadząca sprzedaĪ internetową
wartoĞci
wą moĪe
Ğci funkcji
moĪe oszacowaü
ji CURRENT_DATE.
CURRE
oszacowaü czas dos
DziĊki temu
dostawy na podstawie strefy

l & On
czasowej osoby skáadającej zamówienie.
ówienie.

n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 5-15
Typ danych TIMESTAMP WITH LOCAL
TIMEZONE
• Typ danych TIMESTAMP WITH LOCAL TIME ZONE
jest kolejną odmianą typu TIMESTAMP zawierającą
informacje o przesuniĊciu strefy czasowej.
• Dane przechowywane w bazie danych są
znormalizowane wzglĊdem strefy czasowej
bazy danych.
• PrzesuniĊcie strefy czasowej nie jest
przechowywane w kolumnie danych.
• Baza danych Oracle dostosowuje pobierane dane
do strefy czasowej lokalnej sesji uĪytkownika.
• Typ danych TIMESTAMP WITH LOCAL TIME ZONE
jest okreĞlony w nastĊpujący sposób:
TIMESTAMP[(fractional_seconds_precision)]
WITH LOCAL TIME ZONE
m y
d e
5-16
a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c
Typ danych TIMESTAMP WITH LOCAL TIMEZONE
e A
c l
W odróĪnieniu od typu TIMESTAMP WITH TIME ZONE, ZONE, kolumny typu TIMESTAMP

r a
WITH LOCAL TIME ZONE moĪna okreĞlaü jako
unikatowego. PrzesuniĊcie strefy czasowej jest
ko czĊĞü
czĊĞü klucza gáównego lub klucza
est róĪnicą
róĪnicą (w god
godzinach
go i minutach) miĊdzy

nie ma literaáów. O ly
czasem lokalnym i czasem uniwersalnym.m. Typ TIMESTAMP
TIMEST TAMP WITH
W LOCAL TIME ZONE

l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 5-16
Typ danych TIMESTAMP WITH LOCAL
TIMEZONE: przykáad

CREATE TABLE shipping (delivery_time TIMESTAMP WITH


LOCAL TIME ZONE);
INSERT INTO shipping VALUES(current_timestamp + 2);

SELECT * FROM shipping;

ALTER SESSION SET TIME_ZONE = 'EUROPE/LONDON';


SELECT * FROM shipping;

m y
d e
5-17 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Typ danych TIMESTAMP WITH LOCAL TIME ZONE: przyk
e
przykáadáad A
c l
Przykáad na slajdzie tworzy nową tabelĊ SHIPPING z kolumnąkolumną typu TIMESTAMP WITH

r a
LOCAL TIME ZONE. WartoĞci wstawiane do tej
są datami przesuniĊtymi do przodu o dwa dni
ej tabeli przy kaĪdym
wzglĊdem
ni wzgl Ċdem wartoĞci
wart
kaĪ záoĪeniu zamówienia
rto CURRENT_TIMESTAMP.

czasowej. Polecenie ALTER SESSION O ly


Widaü, Īe dane pobierane z tabeli SHIPPING
PING nie zawierają
ION zostaáo
zostaáo wykonane
wyk
ierają informacji
zawier info o przesuniĊciu strefy
ykonane w celu zmiany strefy czasowej na

l & On
lokalną strefĊ czasową miejsca zzáoĪenia
áoĪenia zamówienia.
zamówiwienia. Drugie za zapytanie dla tej samej tabeli

informowani o spodziewanym
n a e
tym razem zwraca juĪ informacje
rmacje o lokalnejej strefie czasowej,
wanym czasie dostawy.
do
czasow dziĊki czemu klienci mogą byü

t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 5-17
Typy danych INTERVAL

• Typy danych INTERVAL sáuĪą do przechowywania


róĪnic miĊdzy dwiema wartoĞciami typu daty
i godziny.
• Istnieją dwie klasy przedziaáów czasu:
– Lata-miesiące;
– Dni-godziny.
• Precyzją przedziaáu czasu jest:
– rzeczywisty podzbiór pól stanowiących przedziaá
– okreĞlany w definicji przedziaáu.
Typ danych Pola
INTERVAL YEAR TO MONTH Lata, miesiące

INTERVAL DAY TO SECOND Dni, godziny, minuty, sekundy


z czĊĞciami uáamkowymi
m y
d e
5-18 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

ca
Typy danych INTERVAL
e A
c l
Typy danych INTERVAL są uĪywane do przechowywania wania róĪnic
róĪnic miĊdzy
mi dwiema

r a
wartoĞciami typu daty i godziny. Są dwie klasy przedzia
i przedziaáy dni-godziny. Przedziaá lata-miesiące
przedziaáów
ące skáada
iące
áów czasu:
skáada siĊ
czas przedziaáy lata-miesiące
siĊ z podzbioru
p kolejnych pól

HOUR, MINUTE i SECOND. Rzeczywisty O ly


YEAR i MONTH, natomiast przedziaá dni-godziny
-godziny sk
skáada
áadaa siĊ
wisty podzbiór pól
p sk
siĊ z podzbioru
pod
skáadających
áadających
ący siĊ
kolejnych pól DAY,
si na przedziaá czasu

l & On
kreĞlany w defin
wyznacza jego precyzjĊ i jest okreĞlany inicji przedzia
definicji áu PoniewaĪ liczba dni w roku
przedziaáu.

n a e
m, przedziaá
jest związana z kalendarzem, przedziaá lata-miesiące
est niezale
przedziaá dni-godziny jest
lata-
a-miesiące
Īny od NLS.
niezaleĪny
ące jest zale
z
zaleĪny od NLS. Natomiast

w wypadku gdy t e r
dziaáu okreĞla
Kwalifikator przedziaáu
dy ostatnim pole
U s
okreĞla pr ecyzjĊ — liczbĊ
precyzjĊ liczb cyfr pierwszego (lub jedynego) pola oraz,
polem jest pole SECOND, liczbĊ cyfr uáamkowej czĊĞci sekundy.

I n
ametry te nie zost
JeĞli parametry
SE
zostaną podane, to domyĞlną precyzją pierwszego pola jest 2,

c le
a domyĞlną
myĞlną precyzją
precyzją uáamkowej czĊĞci sekundy jest 6.

r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 5-18
Typy danych INTERVAL (kontynuacja)
INTERVAL YEAR (year_precision) TO MONTH
Ten typ danych sáuĪy do przechowywania przedziaáów czasu wyraĪonych w latach
i miesiącach. Parametr year_precision jest liczbą cyfr pola YEAR. Dopuszczalnymi
wartoĞciami są liczby z zakresu od 0 do 9. DomyĞlną wartoĞcią jest 2.
INTERVAL DAY (day_precision) TO SECOND
(fractional_seconds_precision)
Ten typ danych sáuĪy do przechowywania przedziaáów czasu wyraĪonych w dniach,
godzinach, minutach i sekundach. Parametr day_precision jest maksymalną liczbą cyfr
w polu DAY (dopuszczalne wartoĞci naleĪą do zakresu od 0 do 9, domyĞlną wartoĞcią jest 2),
a parametr fractional_seconds_precision okreĞla liczbĊ cyfr uáamkowej czĊĞci
sekundy w polu SECOND (dopuszczalne wartoĞci naleĪą do zakresu od 0 do 9, domyĞlną
wartoĞcią jest 6).

m y
d e
c a
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 5-19
Pola INTERVAL

Pole INTERVAL Poprawne wartoĞci przedziaáów czasu


YEAR Dowolna liczba caákowita dodatnia lub ujemna

MONTH od 00 do 11

DAY Dowolna liczba caákowita dodatnia lub ujemna

HOUR od 00 do 23

MINUTE od 00 do 59

SECOND od 00 do 59.9(N), gdzie 9(N) jest precyzją dziesiĊtną

m y
d e
5-20 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Pola INTERVAL
e A
c l
Typ danych INTERVAL YEAR TO MONTH moĪe zawieraü YEAR i MONTH.
awieraü pola YE

oraz SECOND. r a
Typ danych INTERVAL DAY TO SECOND moĪe zawieraüü po
oĪe zawiera pola DAY, HOUR, MINUTE

O ly
Rzeczywisty podzbiór pól stanowiący element jednego typów przedziaáów czasu
go z dwóch ty

l & On
jest okreĞlany w definicji przedziaáu
ten jest nazywany precyzją danego
áu za pomocą
pomocą odpowiednich
anego elementu. u.
od sáów
sá kluczowych. Podzbiór

n a e
Przedziaáy czasu typu lata-miesiące
ące ssąą wzajemnie
ta-miesiące w wymienne (w operacjach porównywania
wym
i przypisywania) tylko
dotyczy przedziaáów
t e r U s
ko z innymi przedziaáami
zedziaáami czasu typu lata-miesiące. Analogiczna sytuacja
prze
iaáów czasu typu dni-godziny.
i-godziny.

In
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 5-20
Typ danych INTERVAL YEAR TO MONTH

Typ danych INTERVAL YEAR TO MONTH sáuĪy


do przechowywania informacji o przedziale czasu
w polach YEAR i MONTH.
INTERVAL YEAR [(year_precision)] TO MONTH
• Na przykáad:
WartoĞü '312-2' przypisana danej typu
INTERVAL YEAR(3) TO MONTH
oznacza przedziaá czasu 312 lat i 2 miesiące
WartoĞü '312-0' przypisana danej typu
INTERVAL YEAR(3) TO MONTH
oznacza przedziaá czasu 312 lat i 0 miesiĊcy
WartoĞü '0-3' przypisana danej typu
INTERVAL YEAR TO MONTH
oznacza przedziaá czasu 3 miesiące
m y
d e
5-21
a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c
Typ danych INTERVAL YEAR TO MONTH
e A
c l
Typ danych INTERVAL YEAR TO MONTH sáuĪy do przechowywania
przechowywan informacji

siĊ w nastĊpujący sposób:


r a
o przedziaáach czasu w polach YEAR i MONTH. Typ INTERVAL YEAR TO MONTH okreĞla

INTERVAL YEAR [(year_precision)]


O ly sion)] TO MONTH
M

parametru jest 2.
l & On
gdzie year_precision jest liczbą
czbą cyfr w poluu YEAR. DomyĞlną
YEAR. Domy Ğ wartoĞcią tego

n a e
Ograniczenie: Pierwszee pole musi byü
byü bardziej
b znaczące
znacz od ostatniego pola. Na przykáad

NastĊpująca wartoĞü
t e r U s
INTERVAL '0-1' MONTH TO YEAR nie jest poprawnym p okreĞleniem typu.
INTERVA YEAR TO MONTH oznacza przedziaá czasu 123 lata
artoĞü INTERVAL
e:
i 3 miesiące:
In

c
INTERVAL
l
WartoĞü
Warto e
NTERVAL '12 '123-3' YEAR(3) TO MONTH
Ğü INTERVAL
INT '123' YEAR(3) oznacza przedziaá czasu 123 lata i 0 miesiĊcy.

ra
• WartoĞü
Warto Ğü INTERVAL '3' MONTH oznacza przedziaá czasu 3 miesiĊce.

O
Oracle Database 10g: Podstawy jĊzyka SQL II 5-21
Typ danych
INTERVAL YEARTO MONTH: przykáad

CREATE TABLE warranty


(prod_id number, warranty_time INTERVAL YEAR(3)
TO MONTH);
INSERT INTO warranty VALUES (123, INTERVAL '8'
MONTH);
INSERT INTO warranty VALUES (155, INTERVAL '200'
YEAR(3));
INSERT INTO warranty VALUES (678, '200-11');
SELECT * FROM warranty;

m y
d e
5-22 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Typ danych INTERVAL YEAR TO MONTH (kontynuacja)
cja)
e A
c l
Typ danych INTERVAL YEAR TO MONTH sáuĪy do przechowywania
czasu w polach YEAR i MONTH. Typ INTERVAL YEAR
echowywania informaci
info o przedziaáach
R TO MONTH ookreĞla siĊ w nastĊpujący
sposób:
r a
INTERVAL YEAR [(year_precision)]
O ly
gdzie year_precision jest liczbą cyfr
)] TO MONTH
YEAR. DomyĞlną
yfr w polu YEAR. DomyĞlną wartoĞcią
war tego parametru jest 2.

l & On
Ograniczenie: Pierwsze pole musi byü
byü bardziej znaczące
znac ące od ostatniego
aczące przykáad INTERVAL
ostatnie pola. Na przyk
'0-1' MONTH TO YEAR nie

n
Baza danych Oracle obsáuguje a e
ie jest poprawnym okreĞleniem
m okre Ğleniem typu.
przedziaáów:
typ
przedziaáów: przedziaáy
uguje dwa typy pr przed lata–miesiące oraz przedziaáy

z tych dwóch typów.


t e
dni-sekundy. Typ kolumny,
r
JednakĪe
ów. Jednak
U s
lumny, argument PL/SQL,
P
Īe w wypadku
zmienna i wartoĞü zwracana musi byü jednego
zmienn
w adku literaáów
literaáów oznaczających przedziaáy system rozpoznaje

W tego typu I n
teĪ inne typy przedziaáów
przedziaáów ANSI,
ANS takie jak
ypu sytuacjach przedziaáy
prz
k INTERVAL
INT '2' YEAR lub INTERVAL '10' HOUR.
są konwertowane na jeden z dwóch obsáugiwanych typów.

c l
Przykáad
e
ykáad na slajdzie tworzy
INTERVAL YEA
tw tabelĊ WARRANTY zawierającą kolumnĊ warranty_time typu
YEAR(3) TO MONTH. Są do niej wstawiane wartoĞci oznaczające róĪne okresy

r a
gwarancyjne poszczególnych produktów, wyraĪone w latach i miesiącach. Podczas pobierania
wierszy z bazy danych, wartoĞci lat są oddzielane znakami „-” od wartoĞci miesiĊcy.

O
Oracle Database 10g: Podstawy jĊzyka SQL II 5-22
Typ danych INTERVAL DAY TO SECOND

Typ danych INTERVAL DAY TO SECOND


(fractional_seconds_precision)przechowuje
informacje o przedziale czasu wyraĪoną w dniach,
godzinach, minutach i sekundach.
INTERVAL DAY[(day_precision)] TO Second
• Na przykáad:
INTERVAL '6 03:30:16' DAY TO SECOND
oznacza przedziaá czasu 6 dni 3 godziny 30 minut
i 16 sekund

INTERVAL '6 00:00:00' DAY TO SECOND


oznacza przedziaá czasu 6 dni 0 godzin,
0 minut i 0 sekund
m y
d e
5-23
a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c
Typ danych INTERVAL DAY TO SECOND
e A
Typ danych INTERVAL DAY (day_precision)
c l ) TO SECOND
(fractional_seconds_precision) sáuĪy
r a
wyraĪonych w dniach, godzinach, minutach i sekundach. Par
przechowywania przedziaáów czasu
Īy do przechowy
Parametr
ra day_precision jest

O ly
maksymalną liczbą cyfr w polu DAY (dopuszczalne
domyĞlną wartoĞcią jest 2), a parametr
puszczalne wartoĞci
rtoĞci naleĪą
warto nal
etr fractional_seconds_precision
do zakresu od 0 do 9,
okreĞla

l & On
liczbĊ cyfr uáamkowej czĊĞci sekundy
fractiona
kundy w polu SECOND
S
nal_seconds
(dopuszczalne
(dopusz wartoĞci naleĪą do

n a e
zakresu od 0 do 9, domyĞlnąą wartoĞcią
wartoĞcią jestt 66).
W przykáadzie na slajdzie
minut i sekund.
t e r U soznacza
dzie cyfra 6 ozna liczbĊĊ dni, a „03:30:16” oznacza wartoĞci godzin,
nacza liczb

I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 5-23
Typ danych
INTERVAL DAY TO SECOND: przykáad

CREATE TABLE lab


( exp_id number, test_time INTERVAL DAY(2) TO
SECOND);

INSERT INTO lab VALUES (100012, '90 00:00:00');


INSERT INTO lab VALUES (56098,
INTERVAL '6 03:30:16' DAY TO SECOND);

SELECT * FROM lab;

m y
d e
5-24 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Typ danych INTERVAL DAY TO SECOND: przykáad
e A
c l
Przykáad na slajdzie tworzy tabelĊ z kolumną test_time
_time typu INTERVAL
INT DAY TO

r a
SECOND. NastĊpnie wstawia do niej wartoĞü „900 00:00:00” oznaczającą
ozna 90 dni 0 godzin,
minut i sekund oraz wartoĞü INTERVAL '6 03:30:16' DAY TO SECOND. Instrukcja

O ly
SELECT sprawdza, jak te dane są wyĞwietlane
ietlane w bazie danych.
d

l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 5-24
Funkcja EXTRACT

• WyĞwietliü skáadnik YEAR daty SYSDATE.


SELECT EXTRACT (YEAR FROM SYSDATE) FROM DUAL;

• WyĞwietliü skáadnik MONTH daty HIRE_DATE


wszystkich tych pracowników, których pole
MANAGER_ID zawiera wartoĞü „100”.
SELECT last_name, hire_date,
EXTRACT (MONTH FROM HIRE_DATE)
FROM employees
WHERE manager_id = 100;

m y
d e
5-25 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Funkcja EXTRACT
e A
c l
Funkcja EXTRACT pobiera i zwraca wartoĞü konkretnego nego pola z wyraĪenia
wyra oznaczającego

r a
wartoĞü daty i godziny lub przedziaá. Za pomocąą tej funkcji mo
skáadnik wymieniony w nastĊpującej skáadni::
moĪna
Ī wydobyü dowolny

SELECT
O ly
EXTRACT ([YEAR] [MONTH][DAY]
NTH][DAY] [HOUR]
HOUR] [MINUTE][SECOND]
[H

& On
[TIMEZONE_HOUR] [TIMEZONE_MINUTE]
NE_HOUR] [TIM
IMEZONE_MIN

l
[TIMEZONE_REGION]
EZONE_REGION

a e
FROM [datetime_value_expression]
[TIMEZONE_ABBR]
N] [TIMEZONE
on] [interval_value_expression]);
ue_expression [interva

r n
Gdy pobiera siĊ siĊ wartoĞci
toĞci TIMEZONE_REGION
TIMEZON
s
NE_REGION lub TIMEZONE_ABBR (skrót), wówczas

skrót. Gdy pobiera


n t e
zwrócona wartoĞü jest napisem zawierającym
siĊĊ dowolną
biera si
U
zaw ącym odpowiednią
wierającym
dowoln innąą wartoĞü,
odp
odpowiedni nazwĊ strefy czasowej lub jej
wartoĞü wówczas jest ona zwracana jako data

e
rzu gregoria
w kalendarzu
z informacją I Ĕski Gdy pobiera
gregoriaĔskim.
rmacją o strefie czasowej,
c
biera siĊ zawartoĞü pola z wartoĞci typu daty i godziny
wówczas wynik jest dostosowywany do czasu UTC.

c l
W pierwszym przykáadzie
prz na slajdzie funkcja EXTRACT pobiera wartoĞü pola YEAR daty

r a
systemowej SYSDATE. W drugim przykáadzie funkcja EXTRACT pobiera wartoĞci pola
MONTH w kolumnie HIRE_DATE tabeli EMPLOYEES wszystkich podwáadnych kierownika
O o identyfikatorze
ide EMPLOYEE_ID równym „100”.

Oracle Database 10g: Podstawy jĊzyka SQL II 5-25


Funkcja TZ_OFFSET

• WyĞwietliü wartoĞü przesuniĊcia strefy czasowej


dla strefy czasowej 'US/Eastern'.
SELECT TZ_OFFSET('US/Eastern') FROM DUAL;

• WyĞwietliü wartoĞü przesuniĊcia strefy czasowej


dla strefy czasowej 'Canada/Yukon'.
SELECT TZ_OFFSET('Canada/Yukon') FROM DUAL;

• WyĞwietliü wartoĞü przesuniĊcia strefy czasowej


dla strefy czasowej 'Europe/London'.
SELECT TZ_OFFSET('Europe/London') FROM DUAL;

m y
de
5-26
a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c
Funkcja TZ_OFFSET
e A
c l
Funkcja TZ_OFFSET zwraca wielkoĞü przesuniĊcia strefy czasowej
wartoĞü zaleĪy od daty wykonania instrukcji. Na przykáad,
zasowej dla podanej
jeĞli
d, je
podan wartoĞci. Zwracana
TZ_OFFSET zwraca wartoĞü
Ğli funkcja TZ

r a
„–08:00”, oznacza to, Īe strefa czasowa, dla której zostaáa
o osiem godzin wstecz wzglĊdem czasu UTC. Jako
ostaáa wykonana in instrukcja, jest przesuniĊta
funkcji moĪna podaü poprawną nazwĊ
ko argument tej fun
fu

O ly
strefy czasowej, wartoĞü przesuniĊcia strefy czasowej wzgl
taka sama) albo sáowo kluczowe SESSIONTIMEZONE
NTIMEZONE lub
wzglĊdemem czasu UTC (zwrócona wartoĞü bĊdzie
Ċdem
DBTIMEZONE. Skáadnia funkcji
b DBTIMEZO
TZ_OFFSET jest nastĊpująca:

l & On
TZ_OFFSET ( ['time_zone_name']
_zone_name'] '[+ | -] hh hh:mm' ]

n a e
[ SESSIONTIMEZONE]
SSIONTIMEZON [DBTIMEZONE]
NE] [DBTIMEZ

w Stanach Zjednoczonych

t
Prezes przedsiĊbiorstwa,
er
WyobraĨmy sobie nastĊpujący
ujący
ący scenariusz:

U s
z: firma Fold Motor
nych w stanie Michigan,
Moto Company ma swoj
ichigan, który leĪy
Mic
orstwa, Mr. Fold, chce
ce przeprowadziü
swoją gáówną siedzibĊ
leĪ w strefie czasu wschodnioamerykaĔskiego.
przeprowad konferencjĊ telefoniczną z wiceprezesem

odpowiednio
I n
ds. oddziaáu kanadyjskiego oraz wiceprezesem
nio w strefach czasowych
cza
ezesem ds. oddziaáów europejskich, którzy znajdują siĊ
Kanada/Yukon
d oraz Europa/Londyn. Mr. Fold chce poznaü

c l e
godzinĊĊ w obu tych miejscach,
w rozmowie. Asyste
mie aby upewniü siĊ, Īe obaj wiceprezesi bĊdą mogli uczestniczyü
Asystent prezesa, Mr. Scott, pomaga szefowi w sformuáowaniu zapytaĔ bazodanowych
pokazanych na sslajdzie i uzyskuje nastĊpujące wyniki:

r a
• Strefa czasowa 'US/Eastern' jest przesuniĊta wzglĊdem czasu UTC o cztery godziny
wstecz.
w
O • Strefa czasowa 'Canada/Yukon' jest przesuniĊta wzglĊdem czasu UTC o siedem
godzin wstecz.
• Strefa czasowa 'Europe/London' jest przesuniĊta wzglĊdem czasu UTC o jedną godzinĊ
w przód.

Oracle Database 10g: Podstawy jĊzyka SQL II 5-26


Funkcja TZ_OFFSET (kontynuacja)
Aby uzyskaü listĊ poprawnych nazw stref czasowych, moĪna utworzyü zapytanie dla
perspektywy dynamicznej V$TIMEZONE_NAMES.
SELECT * FROM V$TIMEZONE_NAMES;

m y
… d e
c a
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 5-27
Konwertowanie wartoĞci typu TIMESTAMP
za pomocą funkcji FROM_TZ

• WyĞwietliü wartoĞü '2000-03-28 08:00:00' typu TIMESTAMP


jako wartoĞü typu TIMESTAMP WITH TIME ZONE.
SELECT FROM_TZ(TIMESTAMP
'2000-03-28 08:00:00','3:00')
FROM DUAL;

• WyĞwietliü wartoĞü '2000-03-28 08:00:00' typu TIMESTAMP


jako wartoĞü typu TIMESTAMP WITH TIME ZONE dla strefy
czasowej 'Australia/North'.
SELECT FROM_TZ(TIMESTAMP
'2000-03-28 08:00:00', 'Australia/North')
FROM DUAL;

m y
de
5-28
a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c
e A
Konwertowanie wartoĞci typu TIMESTAMP za pomocą cą funkcji FRO
FROM_TZ

c l
Funkcja FROM_TZ konwertuje wartoĞü typu TIMESTAMP wartoĞü
AMP na warto Ğü typu TIMESTAMP
WITH TIME ZONE.

r a
Skáadnia funkcji FROM_TZ jest nastĊpująca:

O ly
FROM_TZ(TIMESTAMP timestamp_value, time_zone_value)
amp_value, ti
time_zone_

zwracającym napis w formacie


l & On
gdzie time_zone_value jest napisem w form formacie
cie TZR (regionn strefy
s
'TZH:TZM' lub wyraĪeniem
macie 'TZH:TZ
czasowej)
czasowej z opcjonalnym formatem TZD.

n a e
Czáon TZD jest skróconąą nazwą
nazwą strefy czasowej
cz zawierającą
zawiera informacjĊ o uwzglĊdnianiu

reprezentującym
t e r s
czasu letniego. Czáonn TZR natomiast
datĊĊ i godzinĊ.
m dat
U
st jest regionem strefy czasowej w napisie
godzinĊ Przykáadowymi
zykáadowym wartoĞciami są: 'Australia/North',
'PST' dla urz
Aby uzyskaü I
yskaü listĊ n
urzĊdowego
Ċdowego czasu
czas Pacyfiku
listĊ poprawnych
popra
oraz 'PDT' dla urzĊdowego letniego czasu Pacyfiku.
iku ora
wartoĞci w formacie TZR i TZD, naleĪy utworzyü zapytanie

c l
Przykáad
e
dla perspektywy dyn
dynamicznej V$TIMEZONE_NAMES.
Przykáad na slajdzie
sla konwertuje wartoĞü typu TIMESTAMP na wartoĞü typu TIMESTAMP

ra
WITH TIME
TI ZONE.

O
Oracle Database 10g: Podstawy jĊzyka SQL II 5-28
Konwertowanie na wartoĞü typu TIMESTAMP
za pomocą funkcji TO_TIMESTAMP
i TO_TIMESTAMP_TZ
• WyĞwietliü napis '2000-12-01 11:00:00'
jako wartoĞü typu TIMESTAMP.
SELECT TO_TIMESTAMP ('2000-12-01 11:00:00',
'YYYY-MM-DD HH:MI:SS')
FROM DUAL;

• WyĞwietliü napis '1999-12-01 11:00:00 -8:00‘


jako wartoĞü typu TIMESTAMP WITH TIME ZONE.
SELECT
TO_TIMESTAMP_TZ('1999-12-01 11:00:00 -8:00',
'YYYY-MM-DD HH:MI:SS TZH:TZM')
FROM DUAL;

m y
de
5-29
a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c
e A
Konwertowanie na wartoĞü typu TIMESTAMP za pomocą mocą funkcji T
TO_TIMESTAMP
i TO_TIMESTAMP_TZ

c l
Funkcja TO_TIMESTAMP konwertuje napis typu CHAR VARCHAR2, NCHAR lub
CHAR,, VARCHA

r a
NVARCHAR2 na wartoĞü typu TIMESTAMP. Skáadnia
nastĊpująca:
káadnia funkcji TO_TIMESTAMP jest

O ly
TO_TIMESTAMP (char,[fmt],['nlsparam'])
,['nlsparam'
'])

l & On
Opcjonalny parametr fmt okreĞla format warto
to napis musi byü zgodny z domyĞlnym
wartoĞci
omyĞlnym formatem
Ğci typu char
matem typu danych
forma
JeĞli zostanie pominiĊty,
char.. Je
danyc TIMESTAMP. Opcjonalny
parametr nlsparam okreĞla
n a e
Ğla jĊzyk, którym
tórym ssąą podawane
jĊzyk, w któ podawa nazwy miesiĊcy i dni, i w którym

t e r
bĊdą zwracane skróty stref. Ten argum
'NLS_DATE_LANGUAGE
U s argument
language'
_LANGUAGE = l anguage'
moĪe
ument mo Īe mieü
mieü nastĊpującą postaü:

W wypadku pomini
okreĞlonego
I n
pominiĊcia
Ċcia parametru
param nlsparams funkcja uĪyje domyĞlnego jĊzyka dat
nlspar
Przykáad na slajdzie
ego dla sesji. Przy dz konwertuje napis na wartoĞü typu TIMESTAMP.
Funkcja

c l e
TO_TIMESTAMP_TZ konwertuje napis typu CHAR, VARCHAR2, NCHAR lub
kcja TO_TIMEST
VARCHAR2 na wartoĞü typu TIMESTAMP WITH TIME ZONE. Skáadnia funkcji
NVARCHAR2

ra
TO_TIMESTAMP_TZ jest nastĊpująca:
TO_TIMEST
TO_TIMESTAMP_TZ (char,[fmt],['nlsparam'])
TO_

OOpcjonalny parametr fmt okreĞla format napisu char. JeĞli zostanie pominiĊty, to napis
Opcj
musi byü zgodny z domyĞlnym formatem typu danych TIMESTAMP WITH TIME ZONE.
Przykáad na slajdzie konwertuje napis na wartoĞü typu TIMESTAMP WITH TIME ZONE.

Oracle Database 10g: Podstawy jĊzyka SQL II 5-29


Konwertowanie przedziaáów czasu
za pomocą funkcji TO_YMINTERVAL

WyĞwietlaü daty przesuniĊte o rok i dwa


miesiące w przód wzglĊdem dat zatrudnienia
pracowników dziaáu o identyfikatorze
DEPARTMENT_ID równym „20”.
SELECT hire_date,
hire_date + TO_YMINTERVAL('01-02') AS
HIRE_DATE_YMININTERVAL
FROM employees
WHERE department_id = 20;

m y
d e
5-30 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Konwertowanie przedziaáów czasu za pomocą funkcji
e
cji TO_YMINTE
TO_YMINTERVAL A
c l
Funkcja TO_YMINTERVAL konwertuje napis typu CHAR,
NVARCHAR2 na wartoĞü typu INTERVAL YEAR TO MONTH
VARCHAR2, NCHAR lub
AR, VARCHAR2
MONTH.. Typ
Ty danych INTERVAL
Format typu INTERVAL YEAR TO MONTH
r a
YEAR TO MONTH przechowuje informacje o przedzia
przedziaáach
áach czasu
czas w polach YEAR i MONTH.
nastĊpujący:
H jest nast Ċpujący:
ący

O ly
INTERVAL YEAR [(year_precision)]
sion)] TO MONTH
MO

parametru jest 2.
l & On
gdzie year_precision jest liczbą
bą cyfr pola YEAR.
AR. DomyĞlną
YEA DomyĞlną wartoĞcią tego

n a e
Skáadnia funkcji TO_YMINTERVAL
NTERVAL jest nast
nastĊpująca:
na Ċpująca:
ąca:

Przykáad na slajdzie
ajdzie
j
t e r
TO_YMINTERVAL (char)
gdzie char jest konwertowanym
U s
onwertowanym napisem.
n
daty póĨniejsze
oblicza da óĨniejsze o rok i dwa miesiące od dat zatrudnienia
pracowników
Obliczenie I n
ów z dziaáu
dziaáu 20. w tabeli EMPLOYEES.
nie odwrotne m
MPLO
moĪe byü równieĪ wykonane za pomocą funkcji TO_YMINTERVAL.

c l
Na przyk
e
przykáad:
áad:
hire_date, hire_date + TO_YMINTERVAL('-02-04') AS
SELECT hi

r a HIRE_DATE_YMINTERVAL

O
FROM EMPLOYEES WHERE department_id = 20;
FRO
NaleĪy zauwaĪyü, Īe napis przekazywany do funkcji TO_YMINTERVAL ma wartoĞü ujemną.
Nal
Przykáad zwraca daty wczeĞniejsze o dwa lata i cztery miesiące od dat zatrudnienia
pracowników dziaáu 20. w tabeli EMPLOYEES.

Oracle Database 10g: Podstawy jĊzyka SQL II 5-30


Korzystanie
z funkcji TO_DSINTERVAL: przykáad
Funkcja TO_DSINTERVAL: konwertuje napis
na wartoĞü typu INTERVAL DAY TO SECOND
SELECT last_name,
TO_CHAR(hire_date, 'mm-dd-yy:hh:mi:ss') hire_date,
TO_CHAR(hire_date +
TO_DSINTERVAL('100 10:00:00'),
'mm-dd-yy:hh:mi:ss') hiredate2
FROM employees;

… m y
d e
5-31 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Funkcja TO_DSINTERVAL
e A
c l
Funkcja TO_DSINTERVAL konwertuje napis typu CHAR,
NVARCHAR2 na wartoĞü typu INTERVAL DAY TO SECOND.
VARCHAR2, NCHAR lub
HAR, VARCHAR

r a
Przykáad na slajdzie uzyskuje daty póĨniejsze
SECOND
ze o 100 dni i 10 godzin wzglĊdem dat
0 go
zatrudnienia.
O ly
Funkcja TO_YMINTERVAL
l & On
n a e
Funkcja TO_YMINTERVAL konwertuje napis
NVARCHAR2 na wartoĞü typu INTERVAL
INTERVA
napi
pis typu CHAR,
CHAR VARCHAR2,
AL YEAR TO MONTH.
V NCHAR lub

t e r
W nastĊpującym przykáadzie
atrudnienia.
wzglĊdem dat zatrudnienia.
U s
rzykáadzie zostają
zostaj
ają uzyskane daty póĨniejsze o rok i dwa miesiące

I
FROM employees; n
SELECT hire_date, hire_date
h te + TO_YMINTERVAL('01-02') ytm

cl e
HIRE_DATE YTM
Y

r a
---------
--------
17-JUN-87
17-JUN
---------
17-AUG-88

O 21-SEP-89
21-S
13-JAN-93
1
03-JAN-90
21-MAY-91
21-NOV-90
13-MAR-94
03-MAR-91
21-JUL-92

Oracle Database 10g: Podstawy jĊzyka SQL II 5-31


Czas letni

• Pierwsza niedziela kwietnia:


– czas zostaje przesuniĊty z godziny 01:59:59
bezpoĞrednio na godzinĊ 03:00:00.
– wartoĞci z przedziaáu od 02:00:00 do 02:59:59
nie są poprawne.
• Ostatnia niedziela paĨdziernika:
– czas zostaje przesuniĊty z godziny 02:00:00
z powrotem na godzinĊ 01:00:01.
– wartoĞci z przedziaáu od 01:00:01 do 02:00:00 są
niejednoznaczne, poniewaĪ są uĪywane dwukrotnie.

m y
d e
5-32 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Czas letni
e A
c l
WiĊkszoĞü krajów rozwiniĊtych w miesiącach letnich h przesuwa zegar o jedną godzinĊ

r a
w przód. Ten okres jest nazywany czasem letnim. m. Czas letni trwa od pierwszej niedzieli
kwietnia do ostatniej niedzieli paĨdziernika w wiĊkszoĞci
wiĊkszoĞci regionów
reg
egio Stanów Zjednoczonych,

O ly
Meksyku i Kanady. W krajach Unii Europejskiej
wczeĞniej niĪ w Ameryce Póánocnejj i ko
opejskiej czas letni
koĔczy
Ĕczy siĊ
siĊ w tym
t
let rozpoczyna
rozpo
samym cz czasie.
siĊ o tydzieĔ

l
Baza danych Oracle automatycznie & On okreĞla,
cznie okre dowolnego regionu strefy czasowej
Ğla, czy dla dowolneg
czas letni jest uwzglĊdniany
n a e
ny i zwraca poprawne
popra wartoĞci
prawne warto Ğci czasu lokalnego. WartoĞü typu
daty i godziny wystarcza
letni dla danego regionu
t e r
cza bazie danych
s
egionu we wszystkich
ch Oracle do okreĞlenia,
wszystkich sytuacjach
U
okr czy trzeba uwzglĊdniaü czas
sytuacjac oprócz przypadków granicznych.
Przypadek graniczny
byü stosowany.
I n wystĊpuje
aniczny wyst
przykáad
wany. Na przyk
Ċpuj podczas
czas okre
á w strefie cz
okresu, w którym czas letni zaczyna lub przestaje
czasu wschodnioamerykaĔskiego, gdzie czas letni

c l e
jest stosowany,
tosowany, czas zmienia
godzinami 02:00:00
02:00
z siĊ z godziny 01:59:59 na godzinĊ 3:00:00. Przedziaá miĊdzy
i 02:59:59 nie istnieje. Gdy czas letni przestaje obowiązywaü, wówczas

r a
godzina zmienia
godziną
zmie siĊ z 02:00:00 z powrotem na 01:00:01 i jednogodzinowy przedziaá miĊdzy
godziną 01:00:01 a 02:00:00 zostaje powtórzony.
O
Oracle Database 10g: Podstawy jĊzyka SQL II 5-32
Czas letni (kontynuacja)
ERROR_ON_OVERLAP_TIME
Parametr sesji ERROR_ON_OVERLAP_TIME wáącza w systemie mechanizm powiadamiania
o báĊdach powstaáych w wyniku napotkania daty i godziny w nakáadającym siĊ przedziale
czasu, dla którego nie zostaá podany skrót strefy czasowej, pozwalający na odróĪnienie
danego przedziaáu.
Na przykáad, jeĞli czas letni koĔczy siĊ w dniu 31 paĨdziernika o godzinie 02:00:01,
to nakáadają siĊ nastĊpujące przedziaáy:
• 31-10-2004 01:00:01 a.m. do 31-10-2004 02:00:00 a.m. (EDT);
• 31-10-2004 01:00:01 a.m. do 31-10-2004 02:00:00 a.m. (EST).
Podając napis oznaczający datĊ i godzinĊ w jednym z tych przedziaáów czasu, trzeba okreĞliü
skrót strefy czasowej (na przykáad „EDT” lub „EST”), aby system mógá odróĪniü ten
przedziaá. Bez skrótu strefy czasowej system wykona nastĊpujące czynnoĞci:
JeĞli parametr ERROR_ON_OVERLAP_TIME ma wartoĞü FALSE, system uzna, Īe podany
czas jest czasem standardowym (na przykáad „EST”). W przeciwnym wypadku zostanie
zgáoszony báąd.

m y
d e
c a
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 5-33
Podsumowanie

Podczas tej lekcji przedstawiono, jak korzystaü


z nastĊpujących funkcji:
• TZ_OFFSET • CURRENT_DATE
• FROM_TZ • CURRENT_TIMESTAMP
• TO_TIMESTAMP • LOCALTIMESTAMP
• TO_TIMESTAMP_TZ • DBTIMEZONE
• TO_YMINTERVAL • SESSIONTIMEZONE
• EXTRACT

m y
d e
5-34 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Podsumowanie
e A
c l
Podczas tej lekcji przedstawiono niektóre funkcji daty dostĊpne w bazie
y i godziny dost
danych Oracle.
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 5-34
ûwiczenie 5: Omówienie

To üwiczenie obejmuje posáugiwanie siĊ funkcjami


daty i godziny.

m y
d e
5-35 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
ûwiczenie 5: Omówienie
e A
c l
To üwiczenie obejmuje wyĞwietlanie wartoĞci przesuniĊü
uniĊü stref czasowych,
czasow wartoĞci funkcji

r a
CURRENT_DATE, CURRENT_TIMESTAMP i LOCALTIMESTAMP
czasowych i korzystanie z funkcji EXTRACT..
OCALTIMESTA oraz ustawianie stref

O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 5-35
ûwiczenie 5
1. Zmodyfikowaü sesjĊ, nadając parametrowi NLS_DATE_FORMAT wartoĞü formatu
„DD-MON-YYYY HH24:MI:SS”.
2. a. Utworzyü zapytania wyĞwietlające wartoĞci przesuniĊcia (TZ_OFFSET)
nastĊpujących stref czasowych:
- US/Pacific-New

- Singapore

- Egypt

b. Zmodyfikowaü sesjĊ, nadając parametrowi TIME_ZONE wartoĞü strefy


czasowej „US/Pacific-New”.
c. WyĞwietliü wartoĞci CURRENT_DATE, CURRENT_TIMESTAMP
i LOCALTIMESTAMP tej sesji.

m y
d e
d. Zmodyfikowaü sesjĊ, nadając parametrowi TIME_ZONE wartoĞüü strefy czasowej
czasowe
„Singapore”.
e. WyĞwietliü wartoĞci CURRENT_DATE, CURRENT_TIMESTAMP
MESTAMP
c a
i LOCALTIMESTAMP tej sesji.
Uwaga: Otrzymane wyniki mogą siĊ róĪniü w zaleĪnoĞci
e A
zaleĪnoĞci od da
daty
wykonania instrukcji.
c l
r a
O ly
Uwaga: Zwróciü uwagĊ
l & On
gĊ na to, Īe
CURRENT_DATE, CURRENT_TIMESTAMP
CURRENT_TIM
Īe w poprzednim
pop
LO
zadaniu wszystkie wartoĞci
zadan
IMESTAMP i LOCALTIMESTAMP zaleĪą od
strefy czasowej
a e
ej sesji.
n
t
3. Utworzyü zapytanie
er U s
wyĞwietlające
apytanie wy Ğwie lające wartoĞci
ące wartoĞ DBTIMEZONE i SESSIONTIMEZONE.

I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 5-36
ûwiczenie 5 (kontynuacja)
4. Utworzyü zapytanie pozwalające uzyskaü wartoĞci pola YEAR w kolumnnie
HIRE_DATE tabeli EMPLOYEES dla wszystkich pracowników zatrudnionych
w dziale 80.

m y
d e
c a
e A
c l
5. Zmodyfikowaü sesjĊ, nadając parametrowi NLS_DATE_FORMAT
LS_DATE_FORM wartoĞü formatu
„DD-MON-YYYY”.
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 5-37
ûwiczenie 5 (kontynuacja)
6. Sprawdziü i wykonaü skrypt lab_05_06.sql w celu utworzenia tabeli
SAMPLE_DATES i wypeánienia jej danymi.
a. Utworzyü zapytanie wyĞwietlające dane w tabeli.

b. Zmodyfikowaü kolumnĊ DATE_COL, zmieniając jej typ na TIMESTAMP.


Utworzyü zapytanie wyĞwietlające dane w tabeli.

c. Spróbowaü zmodyfikowaü typ danych kolumny DATE_COL na TIMESTAMP


WITH TIME ZONE. Co siĊ stanie?

7. Utworzyü zapytanie wyĞwietlające nazwiska pracowników w tabeli EMPLOYEES oraz


informacje dotyczące weryfikacji pracowników. JeĞli pracownik zostaá zatrudniony
w roku 2000, to naleĪy wyĞwietlaü informacje „Needs Review”. W pozostaáych
wypadkach naleĪy wyĞwietlaü napis „not this year!”. Nowej kolumnie nadaü
nazwĊ Review i posortowaü wyniki wedáug kolumny HIRE_DATE.
Wskazówka: Do ustalania wymogów weryfikacji pracowników naleĪy uĪyü wyraĪenia
CASE z funkcją EXTRACT.

m y
d e
c a
e A
c l
… r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 5-38
ûwiczenie 5 (kontynuacja)
8. Utworzyü zapytanie wyĞwietlające nazwiska i liczby przepracowanych lat dla
wszystkich pracowników. JeĞli pracownik jest zatrudniony od co najmniej 5 lat,
wówczas naleĪy wyĞwietlaü napis „5 years of service”. JeĞli pracownik byá
zatrudniony od co najmniej 10 lat, wówczas naleĪy wyĞwietlaü napis „10 years of
service”. JeĞli pracownik byá zatrudniony od co najmniej 15 lat, wówczas naleĪy
wyĞwietlaü napis „15 years of service”. JeĞli Īaden z tych warunków nie jest
speániony, to naleĪy wyĞwietlaü napis „maybe next year!”. Posortowaü wyniki
wedáug kolumny HIRE_DATE. UĪyü tabeli EMPLOYEES.
Wskazówka: NaleĪy uĪyü wyraĪenia CASE i funkcji TO_YMINTERVAL.

m y
d e
c a
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 5-39
m y
d e
ca
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Pobieranie danych za pomocą
zapytaĔ podrzĊdnych

m y
d e
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Cele

Zagadnienia przedstawione w ramach tej


lekcji pozwalają:
• Tworzyü wielokolumnowe zapytania podrzĊdne.
• UĪywaü skalarnych zapytaĔ podrzĊdnych
w instrukcjach SQL.
• Rozwiązywaü problemy za pomocą
skorelowanych zapytaĔ podrzĊdnych.
• Aktualizowaü i usuwaü wiersze za pomocą
skorelowanych zapytaĔ podrzĊdnych.
• UĪywaü operatorów EXISTS i NOT EXISTS.
• UĪywaü klauzuli WITH.
m y
d e
6-2 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Cele
e A
c l
Podczas tej lekcji omówiono tworzenie wielokolumnowych zapytaĔ
nowych zapyta Ĕ ppodrzĊdnych oraz

r a
uĪywanie zapytaĔ podrzĊdnych w klauzuli FROM instrukcji SELE
rnych zapyta
rozwiązywanie problemów za pomocą skalarnych
SELECT. Przedstawiono teĪ
po
pod
zapytaĔĔ podrzĊdnych, skorelowanych

O ly
zapytaĔ podrzĊdnych i klauzuli WITH.

l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 6-2
Wielokolumnowe zapytania podrzĊdne

Zapytanie gáówne
WHERE (MANAGER_ID, DEPARTMENT_ID) IN

Zapytanie podrzĊdne
100 90
102 60
124 50

KaĪdy wiersz w zapytaniu gáównym jest


porównywany z wartoĞciami wielokolumnowego
zapytania podrzĊdnego, zwracającego wiele wierszy.
szy.
m y
d e
6-3 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Wielokolumnowe zapytania podrzĊdne
e A
c l
Dotychczas tworzone zapytania podrzĊdne, które sáuĪyáyyáy do obliczania
obliczan wyraĪeĔ

r a
w nadrzĊdnych instrukcjach SELECT, byáy ograniczone
jednowierszowych lub do zapytaĔ podrzĊdnych
niczone do zapyt
ych zwracających
zwracających
ących
zapytaĔ podrzĊdnych
ych wprawdzie wiele wierszy,

O ly
ale za to tylko jedną kolumnĊ. Aby porównywaü
operatorów logicznych utworzyü záoĪoną
wnywaü wiĊcej
Īoną klauzulĊ
wiĊcejj kolumn,
klauzulĊ WHERE.
k trzeba za pomocą
. UĪywając
UĪyw wielokolumnowych

l & On
zapytaĔ podrzĊdnych, moĪna poáączyü
W
WHERE
czyü wiele warunków
áąączy wa w poje
pojedynczej klauzuli WHERE.
Skáadnia
n a e
SELECT
FROM
column,
table
e
t e r
, column,

U s
column, ...

WHERE

I n
(column,
column, column,
co
(SELECT
(S
, ...) IN
column,
ol column, ...

c le FROM table
WHERE condition);

r
w zapyta
Przykáad
Przykáad na slajdzie pokazuje, Īe wartoĞci kolumn MANAGER_ID i DEPARTMENT_ID
zapytaniu gáównym są porównywane z wartoĞciami MANAGER_ID i DEPARTMENT_ID
Opob
pobranymi przez zapytanie podrzĊdne. PoniewaĪ liczba porównywanych kolumn jest wiĊksza
niĪ jeden, jest to przykáad wielokolumnowego zapytania podrzĊdnego.

Oracle Database 10g: Podstawy jĊzyka SQL II 6-3


Porównania kolumn

Porównania kolumn w wielokolumnowym zapytaniu


podrzĊdnym mogą byü przeprowadzane jako:
• porównania sparowane;
• porównania niesparowane.

m y
d e
6-4 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Porównania sparowane a niesparowane
e A
c l
Porównania kolumn w wielokolumnowym zapytaniu podrz
podrzĊdnym
Ċdnym momogą byü przeprowadzane

r a
jako sparowane lub niesparowane. Na przykáad, wyĞwietl
wyĞwietl informacje
inform
pracują w tym samym departamencie i mają tego samego kierownika
kie
iero
o pracownikch, którzy
co pracownik Daniel.
SELECT first_name, last_name,
O ly manager_id,
me, manager r_id, department_id
de
FROM employees

l
WHERE manager_id IN (SELECT mana& On manager_id
nager_id

n a e
FROM employees
emp
mployees

AND department_id
t e r U s
WHERE
nt_id IN (SELECT
RE first_name
first_nam = ‘Daniel’)
(SELECT department_id
depa

I n FROMOM employees
WHERE
emp
RE first_name = ‘Daniel’);
W tabeli

c l e jeden pracowniko imieniu Daniel, dziĊki temu wynik jest poprawny. JeĪeli
abeli jest tylko je
podzapytanie zwracaáoby
zw wiĊcej wierszy, to wystąpiá by báąd.

r a
W przykáadzie
przykáad na nastĊpnym slajdzie w klauzuli WHERE zastosowano porównanie sparowane.

OWszystkie
Wszys
kolumnach
ko
Daniel.
kandydackie wiersze zwracane przez instrukcjĊ SELECT muszą mieü w obu
MANAGER_ID oraz DEPARTMENT_ID wartoĞci takie same, co pracowniko imieniu

Oracle Database 10g: Podstawy jĊzyka SQL II 6-4


Zapytanie podrzĊdne
z porównaniem sparowanym

WyĞwietlaü dane o pracownikach podlegáych temu


samemu kierownikowi oraz pracujących w tym samym
dziale, co pracownik o imieniu John.

SELECT employee_id, manager_id, department_id


FROM employees
WHERE (manager_id, department_id) IN
(SELECT manager_id, department_id
FROM employees
WHERE first_name= ‘John’)
AND first_name<>’John’;

m y
d e
6-5 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Zapytanie podrzĊdne z porównaniem sparowanym
e A
c l
Przykáad na slajdzie pokazuje wielokolumnowe zapytanie podrzĊdne,
ytanie podrz Ċdne, poniewaĪ zwraca

r a
ono wiĊcej niĪ jedną kolumnĊ. Przykáad porównuje
i kolumnie DEPARTMENT_ID poszczególnych
uje wartoĞci
wartoĞci w ko
ych wierszy w tab
tabe
kolumnie MANAGER_ID
tabeli EMPLOYEES z wartoĞciami

O ly
tych kolumn dla pracowników o imieniu u John.

l
i DEPARTMENT_ID dla pracowników& On
Najpierw zostaje wykonane zapytanie
nie podrz
podrzĊdne
Ċdne po
wników o imieni
imieniu
pobieraj
pobierające
eniu John.
ące warto
ące wartoĞci
wart kolumn MANAGER_ID

n a e
te r U s
I n
WartoĞci te ssąą porównywane
porównyw

c l e
nymi w kolumnie MANAGER_ID oraz kolumnie DEPARTMENT_ID poszczególnych
z danymi
wierszy w tabeli EMPLOYEES. JeĞli rozpatrywane wartoĞci wiersza są takie same, to zostaje

ra
wyĞwietlo
on wyĞwietlony. W danych wyjĞciowych nie znajdą siĊ wiersze pracowników o imieniu John.
Przykáad na slajdzie wyĞwietla nastĊpujące wyniki:
Przykáad
O
Oracle Database 10g: Podstawy jĊzyka SQL II 6-5
Zapytanie podrzĊdne
z porównaniem niesparowanym
WyĞwietlaü dane o pracownikach podlegáych temu
samemu kierownikowi, co pracownik o imieniu John i
pracujących w tym samym dziale, co pracownik o
imieniu John.

SELECT employee_id, manager_id, department_id


FROM employees
WHERE manager_id IN
(SELECT manager_id
FROM employees
WHERE first_name=‘John’)
AND department_id IN
(SELECT department_id
FROM employees
WHERE first_name=‘John’)

AND first_name<>’John’;
m y
d e
6-6
a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c
e A
Zapytanie podrzĊdne z porównaniem niesparowanym ym

dane w kolumnach EMPLOYEE_ID, MANAGER_ID


c l
Przykáad na slajdzie ilustruje niesparowane porównywaniewanie kolumn. In Instrukcja ta wyĞwietla
DEPARTMENT_ID wszystkich tych
ID i DEPARTME

r a
pracowników, których kierownik ma taki sam numer, co kierownik
o imieniu John oraz ich numer dziaáu jest taki
kierow
numer
jednego z pracowników
umer ddziaáu któregoĞ
aki sam, jak num
z pracowników o imieniu John.
O ly
MANAGER_ID dla pracowników
l & On
Najpierw zostaje wykonane zapytanie podrzĊdne
anie podrz
ów o imieniu John.
pobierające
Ċdne ppobieraj ące warto
ące wartoĞci kolumny
war
ohn. W podobny sposób drugie
Joh
zapytanie podrzĊdne pobiera
pracowników. Pobrane warto
n a e
wartoĞci
ra warto
wartoĞci
Ğci kolumn
kolumny
Ğci kolum
umny DEPARTMENT_ID
DEPARTM dla tych samych
MANAGER_ID i DEPARTMENT_ID są
n MANAGER_I
porównywane z wartoĞciami
EMPLOYEES. JeĞli
t r U s
rtoĞciami tych samych
e sa
Ğli kolumna MANAGER_ID
kolumn dla poszczególnych wierszy w tabeli
MA AGER_ID pewnego
pew wiersza w tabeli EMPLOYEES ma
taką samą wartoĞü,
zapytaniee wewn
I n
artoĞü, jak jedna z wartoĞci
wewnĊtrzne
Ċtrzne oraz
Ğci kolumny
kolu
ora kolumna DEPARTMENT_ID
E
MANAGER_ID pobranych przez pierwsze
tego samego wiersza w tabeli

l e
OYEES ma taką
EMPLOYEES
pobranych
tak samą wartoĞü, jak jedna z wartoĞci kolumny DEPARTMENT_ID
obranych przez ddrugie zapytanie wewnĊtrzne, to wiersz ten jest wyĞwietlany. Zapytanie
c
pokazane na slajdzie
sl wyĞwietla nastĊpujące wyniki:

r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 6-6
WyraĪenia skalarnych zapytaĔ
podrzĊdnych

• WyraĪenie skalarnego zapytania podrzĊdnego


jest zapytaniem podrzĊdnym, które dla kaĪdego
wiersza zwraca dokáadnie jedną wartoĞü kolumny.
• Skalarne zapytanie podrzĊdne moĪe byü
uĪyte w nastĊpujących sytuacjach:
– w warunkach i wyraĪeniach funkcji
DECODE i CASE;
– we wszystkich klauzulach instrukcji
SELECT z wyjątkiem klauzuli GROUP BY.

m y
d e
6-7
a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c
A
Skalarne zapytania podrzĊdne w instrukcjach SQL
e
c l
Zapytanie podrzĊdne, które zwraca dokáadnie jedną wartoĞü
nazywane skalarnym zapytaniem podrzĊdnym. Wielokolumnowe
rtoĞü kolumny z jednego wiersza jest
elokolumnowe zzapytania podrzĊdne

r a
sáuĪące do porównywania co najmniej dwóch kolumn, korzystające
korzysta ze záoĪonej klauzuli

O ly
WHERE
i operatorów logicznych, nie są zapytaniami skalarnymi.
niami skalarnym mi.

l & On
WartoĞcią wyraĪenia skalarnego zapytania podrz
liĞcie SELECT tego zapytania podrz
podrzĊdnego.
podrzĊdnego
Ċdnego. JeĞli
Ċdnego jest wartoĞü
wart
JeĞli zapytanie podrzĊdne
p
elementu podanego na
zwraca 0 wierszy, to
wartoĞcią wyraĪenia skalarnego
n a e
arnego zapytania podrzĊdnego
ia podrz Ċdnego jest
j NULL. JeĞli takie zapytanie
podrzĊdne zwraca wiĊcej

e r
Ċcej niĪ
zawsze obsáugiwaá skalarne zapyta
w nastĊpujących t
ych sytuacjach:
s
niĪ jeden wiersz,
zapytania
U
wi to serwer Oracle sygnalizuje báąd. Serwer Oracle
ania podrzĊdne
podrzĊdne w instrukcji SELECT. MoĪna jest stosowaü

• w warunkach
I n
arunkach i wyraĪeniach
wyraĪ
• we wszystkich klauzulach
kl
funkcji
kcji DECODE i CASE;
instrukcji SELECT z wyjątkiem klauzuli GROUP BY;
l e
• w klauzulach SET i WHERE instrukcji UPDATE.
c
r a
Skalarne zapytania
zapy podrzĊdne nie są poprawnymi wyraĪeniami w nastĊpujących sytuacjach:
• jako domyĞlne wartoĞci kolumn i wyraĪenia mieszające w klastrach;

O • w klauzuli RETURNING instrukcji DML;


• jako podstawa indeksu funkcyjnego;
• w klauzuli GROUP BY, wiĊzach CHECK i warunkach WHEN;
• w klauzuli CONNECT BY;
• w instrukcjach niezwiązanych z zapytaniami, takich jak CREATE PROFILE.

Oracle Database 10g: Podstawy jĊzyka SQL II 6-7


Skalarne zapytania podrzĊdne: przykáady

• Skalarne zapytanie podrzĊdne w wyraĪeniu CASE


SELECT employee_id, last_name,
(CASE
20
WHEN department_id =
(SELECT department_id
FROM departments
WHERE location_id = 1800)
THEN 'Canada' ELSE 'USA' END) location
FROM employees;

• Skalarne zapytanie podrzĊdne w klauzuli ORDER BY


SELECT employee_id, last_name
FROM employees e
ORDER BY (SELECT department_name
FROM departments d

y
WHERE e.department_id = d.department_id);

m
d e
6-8
a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c
Skalarne zapytania podrzĊdne: przykáady
e A
c l
Pierwszy przykáad na slajdzie pokazuje uĪywanie skalarnego
w wyraĪeniu CASE. WewnĊtrzne zapytanie zwraca
alarnego zapytania
wartoĞü
ca warto
zapytan podrzĊdnego
Ğü 20, bĊdącą
b numerem dziaáu

r a
w lokalizacji o numerze 1800. Zapytanie zewnĊtrzne
wnĊtrzne wyĞwietla
wyĞwiet etl numery pracowników,

O ly
nazwiska oraz napisy „Canada” lub „USA”
od tego, czy numer dziaáu w bieĪącym
A” wybierane przez
prz wy
zapytania
m wierszu zapyta
wyraĪenie CASE w zaleĪnoĞci
zewnĊtrznego
ytania zewn Ċtr wynosi 20, czy nie.

l & On
Przykáad na slajdzie wyĞwietla nast
nastĊpujące
Ċpujące
ące wyniki:
wyn
yniki:

n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 6-8
Skalarne zapytania podrzĊdne: przykáady (kontynuacja)
Drugi przykáad na slajdzie pokazuje uĪywanie skalarnego zapytania podrzĊdnego w klauzuli
ORDER BY. Przykáadowa instrukcja sortuje dane wynikowe na podstawie wartoĞci
w kolumnie DEPARTMENT_NAME. Instrukcja ta dopasowuje nazwy dziaáów w tabeli
DEPARTMENTS z ich numerami w kolumnie DEPARTMENT_ID w tabeli EMPLOYEES.
Porównanie to jest wykonywane w skalarnym zapytaniu podrzĊdnym w klauzuli ORDER BY.
Drugi przykáad zwraca nastĊpujące wyniki:

m y
d e
c a
e A
c l
r a
O ly
l & On
n a e
t e r
rzystuje warto
podrzĊdne wykorzystuje
U s
Drugi przykáad uĪywaa tzw. skorelowanego
wanego zapytania podrzĊdnego. Skorelowane zapytanie
skorelowa
Ğci kolumn tej tab
wartoĞci tabeli, do której odnosi siĊ instrukcja nadrzĊdna.
Zapytania te zostan
I n
zostanąą omówione
omówio dalejj w ram
ramach tej lekcji.

c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 6-9
Skorelowane zapytania podrzĊdne

Skorelowane zapytania podrzĊdne są uĪywane do przetwarzania danych


wiersz po wierszu. Takie zapytanie podrzĊdne jest wykonywane jeden raz
dla kaĪdego wiersza zapytania zewnĊtrznego.
POBRANIE
wiersza-kandydata
zapytania zewnĊtrznego

WYKONANIE
zapytania wewnĊtrznego z uĪyciem
wartoĞci wiersza-kandydata

UĩYCIE
wartoĞci wewnĊtrznego zapytania
do przyjĊcia lub odrzucenia
wiersza-kandydata
m y
d e
6-10 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Skorelowane zapytania podrzĊdne
e A
c l
Serwer Oracle wykonuje skorelowane zapytanie podrzĊdnee wówczas, gdy zapytanie
odwoáuje siĊ do kolumny tej tabeli, do której odnosi siĊĊ instrukcja nadrz
za podrzĊdne
nadrzĊdna. Skorelowane zapytanie

r a
podrzĊdne jest wykonywane jeden raz dla kaĪdego
którą moĪe byü instrukcja SELECT, UPDATE lub
o wiersza przetwarzanego
ub DELETE
DELETE..
przetwar przez instrukcjĊ nadrzĊdną,

O ly
ZagnieĪdĪone zapytania podrzĊdne a skorelowane zapy zapytania podrzĊdne
pytania podrz Ċ

wykonane wewnĊtrzne zapytanie


l
W wypadku zwykáego zagnieĪdĪonego
& On
ego zapytania podrzĊdnego,
ie SELECT
odrzĊdnego, najpierw
pod najpie zostaje jednokrotnie
wartoĞü
SELECT,, któree zwraca warto Ğü do uĪycia przez zapytanie gáówne.

n a e
Skorelowane zapytanie podrzĊdne
drzĊdne natomiastst zostaje uruchomione
uruchom jeden raz dla kaĪdego wiersza-

t e
wewnĊtrzne jest sterowane r s
ego przez zapytan
kandydata przetwarzanego anie zewn
zapytanie
erowane przez zapytanie
U
Ċtrzne. In
zewnĊtrzne.
zewnĊtrzne.
zapytanie zewn Ċtrz
Innymi sáowy skorelowane zapytanie

Wykonywanie
• Najpierw
In
ie zagnieĪdĪonego
zagnieĪdĪoneg zapytania
nia pod
wykonywane zapytanie
pierw jest wykony
podrzĊdnego
ie wewnĊtrzne, które zwraca wartoĞü.

l e
• NastĊpnie
NastĊpnie jest wykonywane
uzyskanejprzez
wy zapytanie zewnĊtrzne korzystające z wartoĞci
uzyskanejprze zapytanie wewnĊtrzne.
c
r a
Wykonywanie skorelowanego zapytania podrzĊdnego
Najpierw jest pobierany wiersz-kandydat (przez zapytanie zewnĊtrzne).
• Najp

O • JJest wykonywane zapytanie wewnĊtrzne korzystające z wartoĞci wiersza-kandydata.


• Wyniki zapytania wewnĊtrznego są uĪywane do rozstrzygniĊcia, czy wiersz-kandydat ma zostaü
przyjĊty, czy odrzucony.
• PowyĪsze operacje są powtarzane aĪ do chwili, gdy nie ma juĪ wiĊcej wierszy-kandydatów.

Oracle Database 10g: Podstawy jĊzyka SQL II 6-10


Skorelowane zapytania podrzĊdne

Zapytanie podrzĊdne odwoáuje siĊ do kolumny


w tabeli uĪywanej w zapytaniu nadrzĊdnym.
SELECT column1, column2, ...
FROM table1 outer
WHERE column1 operator
(SELECT column1, column2
FROM table2
WHERE expr1 =
outer.expr2);

m y
d e
6-11 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Skorelowane zapytania podrzĊdne (kontynuacja)
e A
c l
Skorelowane zapytanie podrzĊdne jest jednym ze sposobów
osobów porównywania
porówny wartoĞci

a
poszczególnych wierszy w tabeli z powiązanymi z nimi danymi. Jest uĪywane wówczas, gdy
r
dla kaĪdego wiersza-kandydata rozpatrywanego ego w zapytaniu iu ggáównym zapytanie podrzĊdne

O ly
musi zwróciü inną wartoĞü (lub zbiór wartoĞci).
artoĞci). Innymii ssáowy
podrzĊdne sáuĪy do odpowiadania naa pytania, na któktóre
áowy skskorelowane zapytanie
odpowiedĨĨ zaleĪy od wartoĞci wiersza
tóre odpowied

l & On
przetwarzanego przez instrukcjĊĊ nadrzĊdną.
nadrzĊdną.ą.

n a e
Serwer Oracle wykonuje skorelowane zapytanie
korelowane zapy podrzĊdne
pytanie podrz Ċdn wówczas, gdy zapytanie

Uwaga: W skorelowanym
te r
podrzĊdne odwoáuje siĊĊ do kolumny w tabeli uuĪywanej
s
zapytaniu
elowanym zapyta
U podrzĊdnym
niu podrz
Īywan w zapytaniu nadrzĊdnym.
Ċdny moĪna uĪywaü operatorów ANY i ALL.

I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 6-11
Korzystanie ze skorelowanych
zapytaĔ podrzĊdnych

WyĞwietlaü wszystkich tych pracowników, którzy zarabiają


wiĊcej niĪ wynoszą Ğrednie zarobki w ich dziaáach.
SELECT last_name, salary, department_id
FROM employees outer
WHERE salary >
(SELECT AVG(salary)
FROM employees
WHERE department_id =
outer.department_id);

Za kaĪdym razem, gdy


zapytanie zewnĊtrzne
przetwarza wiersz,
jest wykonywane
zapytanie wewnĊtrzne.
wnĊtrzne.
m y
d e
6-12 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Korzystanie ze skorelowanych zapytaĔ podrzĊdnych
e ch A
c l
Przykáadowa instrukcja na slajdzie wyĞwietla wszystkich pracowników, którzy zarabiają
kich tych pracow

r a
wiĊcej, niĪ wynoszą Ğrednie zarobki w ich dziaáach.
skorelowane zapytanie podrzĊdne oblicza Ğrednie
konkretnym wypadku
ach. W tym konk
la kkaĪdego dziaáu.
dnie zarobki dla

O ly
PoniewaĪ zarówno w zapytaniu zewnĊtrznym,trznym, jak i w zapytaniu
z wewnĊtrznym w klauzuli
w

l & On
FROM jest uĪywana tabela EMPLOYEES,
tabeli. Alias ten nie tylko sprawia,
YEES, zewnĊtrzna
Īe caáa
wia, Īe
zewnĊtrznzna instrukcja SELECT
caáa instrukcja
S tworzy alias dla tej
trukcja SELECT jest bardziej czytelna — bez
instru

n
oby poprawnie,
niego zapytanie nie dziaáaáoby
a e e, poniewa wew
poniewaĪĪ wewnĊtrzna instrukcja nie byáaby
w stanie odróĪniü kolumny

t e r
umny tabeli wewnĊtrznej

U s wewwnĊtrznej od kolumny
kol tabeli zewnĊtrznej.

I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 6-12
Korzystanie ze skorelowanych
zapytaĔ podrzĊdnych

WyĞwietlaü dane wszystkich tych pracowników,


którzy zmienili pracĊ przynajmniej dwukrotnie.
SELECT e.employee_id, last_name,e.job_id
FROM employees e
WHERE 2 <= (SELECT COUNT(*)
FROM job_history
WHERE employee_id = e.employee_id);

m y
d e
6-13
a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c
e A
Korzystanie ze skorelowanych zapytaĔ podrzĊdnych (kontynuacja)
ch (kontynuacj

c l
Przykáad na slajdzie wyĞwietla dane wszystkich tych pracowników,
dwukrotnie. Serwer Oracle wykonuje skorelowane zapytanie
owników, którzy zzmienili pracĊ co najmniej
podrzĊdne
pytanie podrz Ċdne w nastĊpujący sposób:

r a
1. Wybiera wiersz w tabeli okreĞlonej w zapytaniu zewnĊtrznym.
aniu zewn m Wiersz ten staje siĊ bieĪącym
Ċtrznym
wierszem-kandydatem.
O ly
2. ZapamiĊtuje wartoĞü wymienionej w zapytaniu podrz podrzĊdnym
drzĊdnym kolumny
kolum bieĪącego
wiersza-kandydata. (W podanym

l
3. Wykonuje zapytanie podrzĊdne & On przykáadzie
m przyk áadzie ttąą kolumn
Ċdne z warunkiem
kkolumnąą jest E
odwoáującym
m odwo áującym
E.EMPLOYEE_ID.)
siĊ
.
s do zapamiĊtanej w punkcie 2.
ącym si
a e
wartoĞci kolumny wiersza-kandydata.
rsza-kandydata. (W podanym przy
n
przykáadzie jest obliczana funkcja
COUNT(*).)
4. Przetwarza klauzulĊ
podrzĊdnego
t e r U szapytania
uzulĊ WHERE zap pytania zewn
ego wykonanego w punkcie
zewnĊtrznego,
Ċtrz korzystając z wyników zapytania
kcie 3. Na tej podstawie serwer ocenia, czy wiersz-kandydat ma
zostaüü wy
podrzĊdnym I n
wyĞwietlony
Ğwietlony w danych wynikowych.
ikow (W podanym przykáadzie, obliczona w zapytaniu
odrzĊdnym liczba zmian pracy przez danego pracownika jest w klauzuli WHERE zapytania

c l e
zewnĊtrznego
zewn Ċtrznego porównywana z liczbą 2. JeĞli warunek jest speániony, to bieĪący wiersz jest
wyĞwietlany.)
wy Ğwietla

r aPowyĪsze operacje są powtarzane aĪ do chwili, gdy nie ma juĪ wiĊcej wierszy-kandydatów.


5. Powy

OKorelacja wynika z uĪywania w zapytaniu podrzĊdnym elementu uĪywanego równieĪ w zapytaniu


Korelac
zewnĊtrznym. W podanym przykáadzie wartoĞü kolumny EMPLOYEE_ID zapytania podrzĊdnego jest
ze
porównywana z wartoĞcią kolumny EMPLOYEE_ID zapytania zewnĊtrznego.

Oracle Database 10g: Podstawy jĊzyka SQL II 6-13


Korzystanie z operatora EXISTS

• Operator EXISTS bada istnienie wierszy


w zbiorze wyników zapytania podrzĊdnego.
• JeĞli wiersz zapytania podrzĊdnego zostanie
znaleziony, to:
– wyszukiwanie w zapytaniu wewnĊtrznym
zostaje przerwane;
– warunek uzyskuje wartoĞü TRUE.
• JeĞli wiersz zapytania podrzĊdnego nie zostanie
znaleziony, to:
– warunek uzyskuje wartoĞü FALSE;
– wyszukiwanie w zapytaniu wewnĊtrznym
jest kontynuowane.
m y
d e
6-14 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Operator EXISTS
e A
c l
W zagnieĪdĪonej instrukcji SELECT moĪna uĪywaü wszystkich operatorówoper logicznych.

r a
MoĪna teĪ uĪywaü operatora EXISTS. Operator ten jest czĊsto
zapytaniach podrzĊdnych do sprawdzania, czy wartoĞü
zy warto
czĊsto uĪywany
u
Ğü pobierana
w skorelowanych
iera przez zapytanie zewnĊtrzne
pobie

podrzĊdne zwraca co najmniej jeden O ly


istnieje w zbiorze wyników pobieranych h przez zapytanie
operator
wewnĊtrzne.
ie wewn Ċ JeĞli zapytanie
erator EXISTS zwraca wartoĞü TRUE.
n wiersz, to opera

l & On
JeĞli Īaden wiersz nie istnieje, to
o operator zwraca
aca wartoĞü
zwrac wartoĞü FALSE.
FAL Analogicznie operator

zbioru wynikowego wartoĞci


n a e
NOT EXISTS sprawdza, czyy wartoĞü
wartoĞü pobierana
pobier
artoĞci pobieranych
pobierany
zapytanie zewnĊtrzne nie jest czĊĞcią
erana przez zapy
zapytanie wewnĊtrzne.
nych przez zapyta

t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 6-14
WyĞwietlanie pracowników, którzy
mają co najmniej jednego podwáadnego
SELECT employee_id, last_name, job_id, department_id
FROM employees outer
WHERE EXISTS ( SELECT 'X'
FROM employees
WHERE manager_id =
outer.employee_id);

m y
d e
6-15
a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c
Korzystanie z operatora EXISTS
e A
c l
Operator EXISTS zapewnia, Īe zapytanie wewnĊtrznee nie bbĊdzie
Ċdzie kontynuowane
kon

r a
w momencie znalezienia co najmniej jednego wiersza
WHERE manager_id = outer.employee_id.
r.employee_i
_id
speániającego
ersza speániającego
ące warunek:

O ly
NaleĪy zauwaĪyü, Īe wewnĊtrzne zapytanie
tanie SELECT nie
ni musi zwracaü
z konkretnej

l & On
wartoĞci, wiĊc moĪe byü w nim uĪyta
yta staáa.
staáa.

n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 6-15
WyĞwietlanie dziaáów,
w których nikt nie pracuje

SELECT department_id, department_name


FROM departments d
WHERE NOT EXISTS (SELECT 'X'
FROM employees
WHERE department_id = d.department_id);

m y
d e
6-16 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Korzystanie z operatora NOT EXISTS
e A
Rozwiązanie alternatywne
c l
co pokazuje nastĊpujący przykáad: r a
Operator NOT IN moĪe byü uĪywany jako alternatywa operatora NOT EXISTS,
natywa dla opera

O ly
SELECT department_id, department_n
department_name
_name
FROM departments
WHERE department_id
l & On
t_id NOT IN N (SELECT de department_id

n a e FROM employees);
No rows selected.
r
ected.

t e U s
I n
Jest jednak pewna ró
róĪnica
oĞü NULL to ope
ma wartoĞü
miĊdzy tymi
Īnica m mi operatorami.
ope JeĞli którykolwiek element zbioru
operator NOT IN zwraca wartoĞü FALSE. W takiej sytuacji zapytanie

c l e
nie zwróci ĪĪadnych
adnych wierszy,
warunek WHERE.
WHERE
w nawet jeĞli w tabeli dziaáów istnieją wiersze, które speániają

r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 6-16
Skorelowane zapytanie podrzĊdne
aktualizujące (UPDATE)

UĪywanie skorelowanego zapytania podrzĊdnego


do aktualizacji wierszy w jednej tabeli na podstawie
wierszy w innej tabeli.
UPDATE table1 alias1
SET column = (SELECT expression
FROM table2 alias2
WHERE alias1.column =
alias2.column);

m y
d e
6-17 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Skorelowane zapytanie podrzĊdne aktualizujące (UPDATE)
e
PDATE) A
c l
W wypadku instrukcji UPDATE moĪna uĪyü skorelowanego wanego zapytania podrzĊdnego

r a
do aktualizacji wierszy w jednej tabeli na podstawie innej tabeli.
wie wierszy w in

O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 6-17
Korzystanie ze skorelowanego zapytania
podrzĊdnego do aktualizacji

• Zmodyfikowaü tabelĊ EMPL6, dodając


kolumnĊ przechowującą nazwy dziaáów.
• Wypeániü tabelĊ danymi za pomocą
skorelowanego zapytania podrzĊdnego
aktualizującego.
ALTER TABLE empl6
ADD(department_name VARCHAR2(25));

UPDATE empl6 e
SET department_name =
(SELECT department_name
FROM departments d

y
WHERE e.department_id = d.department_id);

m
d e
6-18
a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c
e A
Skorelowane zapytanie podrzĊdne aktualizujące (kontynuacja)ontynuacja)

c l
Przykáad na slajdzie modyfikuje tabelĊ EMPL6, dodającjąc kolumnĊĊ prze
ąc kolumn przechowującą nazwy

podrzĊdnego aktualizującego.
r a
dziaáów, a nastĊpnie wypeánia tabelĊ danymi za pomoc
pomocąą skorelowanego
skorelow zapytania

O ly
Oto kolejny przykáad uĪycia skorelowanej
nej aktualizacji.
Przykáad rozbudowany

l & On
Tabela REWARDS zawiera listĊ pracowników, którym
k udaáo
udaáo siĊ
si uzyskaü wyniki lepsze od

w tabeli EMPL6 na podstawie


n a e
oczekiwanych. NaleĪy uĪyüü skorelowanego go zapytania pod
podrzĊdnego do aktualizacji wierszy
dstawie wierszyy w tabeli REWARDS:
UPDATE empl6
SET salary
t e
lary = (SELECT
r U s
(SELEC employees.salary
employee
REWAR

+ rewards.pay_raise

I n
FROM
FR rewards
ward
WHERE employee_id =

c l e employees.employee_id
AND payraise_date =

r a (SELECT MAX(payraise_date)
FROM rewards

O WHERE employee_id = employees.employee_id))


WHERE employees.employee_id
IN (SELECT employee_id FROM rewards);

Oracle Database 10g: Podstawy jĊzyka SQL II 6-18


Skorelowane zapytanie podrzĊdne aktualizujące (kontynuacja)
Przykáad uĪywa tabeli REWARDS. Zawiera ona kolumny EMPLOYEE_ID, PAY_RAISE
i PAYRAISE_DATE. Za kaĪdym razem, gdy pracownik otrzymuje podwyĪkĊ, do tej tabeli
zostaje wstawiona informacja o numerze pracownika, wysokoĞci podwyĪki oraz dacie jej
otrzymania. Tabela REWARDS moĪe zawieraü po kilka wierszy dla kaĪdego pracownika.
Kolumna PAYRAISE_DATE sáuĪy do ustalenia aktualnej podwyĪki otrzymanej
przez pracownika.
Kolumna SALARY w tabeli EMPL6 jest aktualizowana w taki sposób, aby odzwierciedlaü
ostatnie podwyĪki otrzymane przez pracowników. W tym celu są do niej wstawiane bieĪące
zarobki pracowników zwiĊkszone o odpowiednie podwyĪki w tabeli REWARDS.

m y
d e
c a
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 6-19
Skorelowane zapytanie podrzĊdne
usuwające (DELETE)

UĪywanie skorelowanego zapytania podrzĊdnego


do usuwania wierszy z jednej tabeli na podstawie
wierszy w innej tabeli.

DELETE FROM table1 alias1


WHERE column operator
(SELECT expression
FROM table2 alias2
WHERE alias1.column = alias2.column);

m y
d e
6-20 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Skorelowane zapytanie podrzĊdne usuwające (DELETE)
e
ETE) A
c l
W instrukcji DELETE moĪna uĪywaü skorelowanego zapytania podrz
tylko tych wierszy, które istnieją równieĪ w innej tabeli. MoĪna
podrzĊdnego do usuwania
MoĪna na przykáad sprawiü, aby

r a
w tabeli JOB_HISTORY pozostawaáy tylko ostatnie
pracownika. Gdy pracownik zmienia pracĊ po raz piąty,
wiersze dotyczące kaĪdego
tatnie cztery wie
ąty, wówczas
piąty, wówcz
wó z tabeli JOB_HISTORY
O ly
jest usuwany najstarszy wiersz. W tym cecelu
lu w tabeli JOB_HISTORY
pracownika znajdowana wartoĞü MIN(START_DATE).
JO
OB_HIST
ATE). NastĊpujący
NastĊpuj
jest dla danego
kod ilustruje

l & On
wykonywanie tej czynnoĞci za pomoc
IN(START_DAT
pomocąą skorelowanego
skorelow zapytania podrzĊdnego usuwającego:
wanego zapytan

WHERE employee_id
n
_id =a e
DELETE FROM emp_history
istory JH

(SELECT
FROM
t e r U
OM employees Es
employee_id
T employee_i
_id

In
WHERE JH.employee_id
JH.emp
AND START_DATE
START =
e_id = E.employee_id

c l e (SELECT MIN(start_date)
FROM job_history JH

r a WHERE JH.employee_id = E.employee_id)


AND 5 > (SELECT COUNT(*)

O FROM job_history JH
WHERE JH.employee_id = E.employee_id
GROUP BY EMPLOYEE_ID
HAVING COUNT(*) >= 4));

Oracle Database 10g: Podstawy jĊzyka SQL II 6-20


Korzystanie ze skorelowanego
zapytania podrzĊdnego usuwającego

UĪywanie skorelowanego zapytania podrzĊdnego


do usuwania tylko tych wierszy z tabeli EMPL6,
które istnieją równieĪ w tabeli EMP_HISTORY.
DELETE FROM empl6 E
WHERE employee_id =
(SELECT employee_id
FROM emp_history
WHERE employee_id = E.employee_id);

m y
d e
6-21 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Skorelowane zapytanie podrzĊdne usuwające (kontynuacja)
e tynuacja) A
Przykáad
c l
r a
Podany przykáad uĪywa dwóch nastĊpujących tabel:
• tabela EMPL6, która zawiera dane o wszystkich
abel:
wszystkich obecnych
obecn
cnych pracownikach;
O ly
• tabela EMP_HISTORY, która zawierawiera dane dotycz
dotyczące
czące
ące by
byáych
áyc pracowników.

l & On
Tabela EMP_HISTORY zawiera dane o byáych
gdyby wiersze tych samych pracowników
byáych pracownikach,
pra
istniaáy
racowników istn
racownikach, wiĊc
tniaáy jednoczeĞnie
wi byáoby báĊdem,
jednoczeĞ w obu tabelach EMPL6
oraz EMP_HISTORY. Takie
n a e
powtarzające
kie powtarzaj ące si
ące siĊĊ wiersze moĪna
m usunąü za pomocą
skorelowanego zapytania

t er U s
podrzĊdnego
ania podrz ego pokazanego na
Ċdneg n slajdzie.

I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 6-21
Klauzula WITH

• Za pomocą klauzuli WITH moĪna w záoĪonej


instrukcji SELECT uĪywaü powtarzającego
siĊ wielokrotnie bloku zapytania.
• Klauzula WITH pobiera wyniki bloku zapytania
i przechowuje je w tymczasowej przestrzeni
tabel uĪytkownika.
• Klauzula WITH zwiĊksza wydajnoĞü zapytania.

m y
d e
6-22
a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c
Klauzula WITH
e A
l
Za pomocą klauzuli WITH moĪna zdefiniowaü blok zapytania zanim zzostanie on uĪyty
c
r a
w zapytaniu. Klauzula WITH (formalnie subquery_factoring_clause)
wielokrotne uĪywanie tego samego bloku zapytania
ery_factori
pytania w zzáoĪonej
umoĪliwia
on instrukcji SELECT. Jest to
áoĪone

i zawiera záączenia oraz agregacje.O ly


szczególnie przydatne wówczas, gdy zapytanie
pytanie ma wiele odwoáaĔ
le odwo áa do tego samego bloku

Za pomocą klauzuli WITH moĪna


l & On
na wielokrotniee uĪywaü
uĪywaü tego samego
s zapytania bez

n a e
koniecznoĞci jego wielokrotnego (kosztownego)
otnego (kosztow wykonywania w záoĪonym zapytaniu.
wnego) wykonyw
Klauzula WITH sprawia,

t e r
ia, Īe
Īe serwer Oracle

U s Ora pobiera wy
i przechowuje je w tymczasowej pprzestrzeni
rzestrzeni tabe
wyniki zdefiniowanego bloku zapytania
tabel uĪytkownika. To moĪe zwiĊkszyü

KorzyĞci
stemu.
wydajnoĞü systemu.
I n
ci wynikające
wynikające z uĪywania klauzuli WITH

c l e
• zapytanie staje siĊ bardziej czytelne;
• klauzula jejest przetwarzana tylko raz, nawet jeĞli wielokrotnie pojawia siĊ w zapytaniu;

r a wiĊ
• w wiĊkszoĞci wypadków moĪe zwiĊkszyü wydajnoĞü duĪych zapytaĔ.

O
Oracle Database 10g: Podstawy jĊzyka SQL II 6-22
Klauzula WITH: przykáad

UĪywając klauzuli WITH utworzyü zapytanie


wyĞwietlające nazwy dziaáów oraz áączne zarobki
dla wszystkich tych dziaáów, w których áączne
zarobki są wyĪsze niĪ Ğrednie áączne zarobki
we wszystkich dziaáach.

m y
d e
6-23 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Klauzula WITH: przykáad
e A
c l
Problem podany na slajdzie wymaga nastĊpujących obliczeĔ poĞrednich:
obliczeĔ po Ğredn

pomocą klauzuli WITH.


r a
1. Obliczenie áącznych zarobków dla poszczególnych dziaáów
gólnych dzia áów i zapamiĊtanie wyniku za

za pomocą klauzuli WITH. O ly


2. Obliczenie Ğrednich áącznych zarobków wszystkich
bków we wszyst dziaáach i zapamiĊtanie wyniku
stkich dzi

l & On
3. Porównanie áącznych zarobków obliczonych
obków obliczony nych w punkcie 11. ze Ğrednimi áącznymi
zarobkami obliczonymi
wiĊksze od Ğrednich
n a e
ch áącznych
cznych zarobków
zaro
JJeĞli
mi w punkcie 2.. Je Ğli áączne
czne zarobki
áąączne
arobków we wszy
zar dziaáu są
dla konkretnego dzia
dziaáach, to naleĪy wyĞwietlaü
wszystkich dzia

t e r
nazwĊ dziaáu i áączne
áąącznych
s
czne zarobkii dla tego dzia
áąączne
U
dziaáu.
á

I n
Rozwiązanie tego problemu je jest podane
dane na nnastĊpnej stronie.

c le
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 6-23
Klauzula WITH: przykáad

WITH
dept_costs AS (
SELECT d.department_name, SUM(e.salary) AS dept_total
FROM employees e JOIN departments d
ON e.department_id = d.department_id
GROUP BY d.department_name),
avg_cost AS (
SELECT SUM(dept_total)/COUNT(*) AS dept_avg
FROM dept_costs)
SELECT *
FROM dept_costs
WHERE dept_total >
(SELECT dept_avg
FROM avg_cost)
ORDER BY department_name;

m y
d e
6-24
a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c
Klauzula WITH: przykáad (kontynuacja)
e A
c l
Kod SQL na slajdzie jest przykáadem instrukcji, w której
órej dziĊki
poprawiü wydajnoĞü i czytelnoĞü zapytania. Instrukcja
dziĊki uuĪyciu
Īyciu klauzuli WITH moĪna
zapytania o nazwach
ukcja tworzy zap

r a
DEPT_COSTS oraz AVG_COST, a nastĊpnie uĪywa Īywa ich w treĞci
Oracle traktuje klauzulĊ WITH albo jako perspektywĊ
treĞ gáównego zapytania. Serwer
erspektywĊ rozwijaną
rozwwijan (inline), albo jako tabelĊ
O ly
tymczasową. Optymalizator wybiera odpowiednie
dpowiednie rozwiązanie
rozw
związanie zaleĪnoĞci od kosztów lub
ązanie w zale

l & On
korzyĞci związanych z tymczasowymym przechowywaniem
Przykáad na slajdzie wyĞwietla nast
przechowywa
nastĊpujące
Ċpujące
waniem wyników klauzuli WITH.
ące wyniki:
wy

n a e
te r U s
Uwagi dotycz
dotyczące I n
ące uĪywania
uĪy klauzuli WITH

c l e
• Klauzula ta moĪe
mo byü uĪywana tylko w instrukcji SELECT.
• Nazwa zapytania
zapy jest widoczna we wszystkich blokach zapytañ definiowanych po

ra
danym zzapytaniu w klauzuli WITH (i w blokach ich zapytaĔ podrzĊdnych) oraz
w bl
bloku zapytania gáównego (i w jego blokach zapytaĔ podrzĊdnych).

O G nazwa zapytania jest taka sama, jak istniejąca nazwa tabeli, wówczas analizator
• Gdy
skáadniowy przeprowadza wyszukiwanie od wewnątrz, a nazwa bloku zapytania
uzyskuje pierwszeĔstwo przed nazwą tabeli.
• Klauzula WITH moĪe przechowywaü wiele zapytaĔ — są one rozdzielane przecinkami.

Oracle Database 10g: Podstawy jĊzyka SQL II 6-24


Podsumowanie

Podczas tej lekcji przedstawiono nastĊpujące


zagadnienia:
• Wielokolumnowe zapytanie podrzĊdne zwracające
wiele kolumn.
• Wielokolumnowe porównania sparowane lub
niesparowane.
• Wielokolumnowe zapytanie podrzĊdne uĪywane
takĪe w klauzuli FROM instrukcji SELECT.

m y
d e
6-25 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Podsumowanie
e A
c l
Wielokolumnowych zapytaĔ podrzĊdnych moĪna uĪywaü ywaü do áączenia
czenia wielu warunków
áąączenia

r a
WHERE w pojedynczej klauzuli WHERE. Porównania nia kolumnowe
kolumnowe w wielokolumnowym
niesparowan
zapytaniu podrzĊdnym mogą byü sparowane lub niesparowane. ane

O ly
efiniowania tabe
Zapytanie podrzĊdne moĪe sáuĪyü do definiowania beli, na któr
tabeli, której ma dziaáaü zapytanie
nadrzĊdne.

l
Skalarne zapytania podrzĊdnee mog& On
mogąą byü
byü uĪywane
uĪywane
yw w nastĊpujących
nastĊpuj miejscach:
• w warunkach i wyraĪeniach
n a e
Īeniach funkcji
ji DECODE i CASE;
CAS

t e r U s
instru
rukcji SELECT z wyjątkiem klauzuli GROUP BY;
• we wszystkich klauzulach instrukcji
• w klauzulachh SET i WHERE instrukcji
nstrukcji UPDATE.
UPD

I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 6-25
Podsumowanie

• Skorelowane zapytania podrzĊdne przydatne


wówczas, gdy zapytanie podrzĊdne musi zwróciü
inne wyniki dla kaĪdego wiersza-kandydata.
• Logiczny operator EXISTS testujący istnienie
wierszy w zbiorze wyników.
• Skorelowane zapytania podrzĊdne uĪywane
w instrukcjach SELECT, UPDATE i DELETE.
• Klauzula WITH pozwalająca na wielokrotne
uĪywanie w instrukcji SELECT tego samego
bloku zapytania.

m y
d e
6-26 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Podsumowanie (kontynuacja)
e A
c l
Serwer Oracle wykonuje skorelowane zapytanie podrzĊdne
rzĊdne wówczas, gdy zapytanie

r a
podrzĊdne odwoáuje siĊ do kolumny tej tabeli, doo której odnosi siĊ
Skorelowane zapytanie podrzĊdne jest wykonywane
nywane jeden raz
si instrukcja nadrzĊdna.
ra dla kaĪdego wiersza

O ly
przetwarzanego przez instrukcjĊ nadrzĊdną,
lub DELETE. Za pomocą klauzuli WITH
ą, którą
ną, którą moĪe
ITH moĪna
moĪe byü
b ü instrukcja
by
wielokrotnie
moĪna wiel
instr
elokrotnie uĪywaü
SELECT, UPDATE
uĪyw tego samego bloku

l & On
zapytania wówczas, gdy jego przetwarzanie
rzetwarzanie jest
st kosztowne, a ppojawia siĊ on wielokrotnie
w záoĪonym zapytaniu.

n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 6-26
ûwiczenie 6: Omówienie

To üwiczenie obejmuje nastĊpujące zagadnienia:


• Tworzenie wielokolumnowych zapytaĔ
podrzĊdnych.
• Tworzenie skorelowanych zapytaĔ podrzĊdnych.
• UĪywanie operatora EXISTS.
• UĪywanie skalarnych zapytaĔ podrzĊdnych.
• UĪywanie klauzuli WITH.

m y
d e
6-27 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
ûwiczenie 6: Omówienie
e A
c l
To üwiczenie obejmuje tworzenie zapytaĔ podrzĊdnych wielokolumnowych, skorelowanych
ych wielokolumn

r a
i skalarnych. Ponadto do rozwiązywania problemów
mów bbĊdzie
Ċdzie uĪywana
uĪyw klauzula WITH.

O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 6-27
ûwiczenie 6
1. Utworzyü zapytanie wyĞwietlające nazwiska, numery dziaáów oraz zarobki wszystkich
tych pracowników, których dziaáy i zarobki są takie same, jak dziaá i zarobki dowolnego
pracownika otrzymującego prowizjĊ.


2. WyĞwietlaü nazwiska, nazwy dziaáów oraz zarobki wszystkich tych pracowników,
których zarobki i prowizje są takie same, jak zarobki i prowizja dowolnego pracownika
znajdującego siĊ w lokalizacji o numerze 1700.

m y
d e
c a
e A
c l
r a
3. Utworzyü zapytanie wyĞwietlające nazwiska, zatrudnienia
zwiska, daty zatru
trud oraz zarobki wszystkich

o nazwisku „Kochhar”. O ly
tych pracowników, którzy mają takie
kie same zarobki prowizje, jak pracownik
ki i prowiz

l & On
Uwaga: Nie wyĞwietlaü Kochhara w wynwynikach.
ynikach.

n a e
te r U s
4. Utworzyü
wiĊcej
Ċcej niĪ I n
rzyü zapytanie wyĞwietlające
niĪ wszyscy
w ące wszystkich
ące w tych pracowników, którzy zarabiaj
zarabiają
wszysc kierownicy sprzedaĪy (JOB_ID = 'SA_MAN'). Posortowaü wyniki

c l e
wedáug
wedáug zarobków
zarob od najwyĪszych do najniĪszych.

r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 6-28
ûwiczenie 6 (kontynuacja)
5. WyĞwietlaü numery, nazwiska oraz numery dziaáów wszystkich tych pracowników,
którzy mieszkają w miastach o nazwach zaczynających siĊ od litery T.

6. Utworzyü zapytanie wyĞwietlające wszystkich tych pracowników, którzy zarabiają


wiĊcej niĪ wynoszą Ğrednie zarobki w ich dziaáach.
WyĞwietlaü nazwiska, zarobki, numery dziaáów oraz Ğrednie zarobki w poszczególnych
dziaáach. Posortowaü wyniki wedáug Ğrednich zarobków. OkreĞliü aliasy dla kolumn
pobieranych przez zapytanie zgodnie z pokazanymi wynikami przykáadowymi.

y
d em
c a

e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 6-29
ûwiczenie 6 (kontynuacja)
7. WyĞwietlaü wszystkich tych pracowników, którzy nie zajmują stanowisk nadzorczych.
a. Najpierw wykonaü to zadanie za pomocą operatora NOT EXISTS.

b. Czy moĪna to zrobiü za pomocą operatora NOT IN? Jak to zrobiü lub dlaczego
go
nie moĪna?
m y
zarabiają mniej niĪ wynoszą Ğrednie zarobki w ich dziaáach.
e
8. Utworzyü zapytanie wyĞwietlające nazwiska wszystkich tych pracowników,
ników, którzy
d
c a
e A
cl
r a
O ly
l & On
n a e

t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 6-30
ûwiczenie 6 (kontynuacja)
9. Utworzyü zapytanie wyĞwietlające nazwiska pracowników mających w swoich dziaáach
co najmniej jednego wspóápracownika zatrudnionego póĨniej, ale zarabiającego wiĊcej.

10. Utworzyü zapytanie wyĞwietlające numery wszystkich pracowników, ich nazwiska


oraz nazwy ich dziaáów.
Uwaga: Do uzyskiwania nazw dziaáów naleĪy w instrukcji SELECT uĪyü skalarnego
go
zapytania podrzĊdnego.

m y
d e
c a
e A
c l
r a
O ly
l & On
n a e
t e r U s

I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 6-31
ûwiczenie 6 (kontynuacja)
11. Utworzyü zapytanie wyĞwietlające nazwy wszystkich tych dziaáów, w których áączne
zarobki przekraczają jedną ósmą áącznych páac w caáej firmie. UĪyü klauzuli WITH,
a zapytaniu nadaü nazwĊ SUMMARY.

m y
d e
c a
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 6-32
Hierarchiczne pobieranie danych

m y
d e
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Cele

Zagadnienia przedstawione w ramach tej


lekcji pozwalają:
• Opisywaü zapytania hierarchiczne.
• Tworzyü raporty o strukturze drzewa.
• Formatowaü dane hierarchiczne.
• Wyáączaü gaáĊzie ze struktury drzewa.

m y
d e
7-2 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Cele
e A
c l
Podczas tej lekcji omówiono uĪywanie zapytaĔ hierarchicznych
rchicznych do tworzenia
tw raportów
o strukturze drzewa.
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 7-2
Przykáadowe dane w tabeli EMPLOYEES

m y
d e
7-3 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Przykáadowe dane w tabeli EMPLOYEES
e A
c l
Za pomocą zapytaĔ hierarchicznych moĪna pobieraü dane, które są
hierarchicznymi zaleĪnoĞciami. Relacyjna baza danych nie przech
są powiązane
po naturalnymi,
przechowuje wierszy w sposób

r a ystĊpują hierarchiczne
hierarchiczny. Jednak w sytuacji, w której wystĊpują hierarchh zaleĪnoĞci miĊdzy

O ly
wierszami w pojedynczej tabeli, moĪna taką ką hierarchiĊ
hierarchiĊ odtworzyü
nazywanego przechodzeniem drzewa.. Zapytanie hiera
od
odtworzy
rarchiczne jes
hierarchiczne
za pomocą procesu
jest metodą tworzenia

l & On
aniu w okre
raportów, polegającą na wyĞwietlaniu Ğlon
onej kolejnoĞci
okreĞlonej kolejnoĞci gaáĊzi
g drzewa danych.

genealogiczne, w którym
n a e
áatwo sobie wyobrazi
Drzewiastą strukturĊ danych áatwo wy
wyobraziü.
m najstarsi czáonkowie
czáonkowie
on
ü. Jako przykáad
p rozwaĪmy drzewo
rodziny są umiejscowieni w korzeniu (pniu

inne gaáĊzie itd.


wie ssąą reprezentowani
drzewa), a potomkowie

t e r U s
reprezent
ntowani przez gaáĊzie
ga drzewa, z których mogą wyrastaü

I n
Zapytanie hierarchiczne mo
ami tej samej tab
wierszami
sowa wówczas, gdy istnieje zaleĪnoĞü miĊdzy
moĪna zastosowaü
tabeli. W przykáadzie na slajdzie widaü, Īe pracownicy na stanowiskach

c l e
D_VP, ST_MAN,
AD_VP, ST_MAN SA_MAN i MK_MAN podlegają bezpoĞrednio prezesowi firmy. Wiadomo
poniewaĪ kolumna
to, poniewaĪ ko MANAGER_ID w wierszach tych pracowników zawiera identyfikator

r aczyl numer prezesa firmy (AD_PRES).


„100”, czyli

OUwag Drzewa hierarchiczne są uĪywane w wielu dziedzinach, takich jak genealogia,


Uwaga:
ho
hodowla (rozmnaĪanie zwierząt), zarządzanie firmami (struktury pracowników), produkcja
(montaĪ produktów), badania ewolucyjne (rozwój gatunków) i badania naukowe.

Oracle Database 10g: Podstawy jĊzyka SQL II 7-3


Naturalna struktura drzewa

EMPLOYEE_ID = 100 (wĊzeá nadrzĊdny)


King

MANAGER_ID = 100 (wĊzeá podrzĊdny)

Kochhar De Haan Mourgos Zlotkey Hartstein

Whalen Higgins Hunold Rajs Davies Matos Vargas

Fay

Gietz Ernst Lorentz Abel Taylor Grant

m y
d e
7-4 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Naturalna struktura drzewa
e A
c l
Tabela EMPLOYEES ma strukturĊ odzwierciedlającą zaleĪnoĞci
zaleĪnoĞci kierownicze.
kiero HierarchiĊ

r a
tĊ wyznaczają związki miĊdzy wartoĞciami kolumn
MoĪna jej uĪyü do samozáączenia tabeli. Kolumna
mn EMPLOYEE_ID
EMPLOYEE_ oraz MANAGER_ID.
umna MANAGER_ID
MANAGERER_ danego pracownika
zawiera numer jego kierownika.
O ly
na kontrolowanie nastĊpujących
l & On
ZaleĪnoĞü nadrzĊdny-podrzĊdny wystĊpująca
ystĊpująca
ąca w strukturze
ch cech hierarchi
hierarchii:
hii:
stru
trukturze drzewa pozwala

• kierunek, w którym jest


a e
przechodzona
est przechodzon
n
ona hierarchia;

Uwaga: Na slajdzie
t e r
• punkt startowy w hierarchii.

U s
odwróconą
dzie pokazano od wróconą strukturĊ
strukt drzewa hierarchii kierowniczej
pracowników
n
w w tabeli EMPLOYEES.
I
EMPL

c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 7-4
Zapytania hierarchiczne

SELECT [LEVEL], column, expr...


FROM table
[WHERE condition(s)]
[START WITH condition(s)]
[CONNECT BY PRIOR condition(s)] ;

WHERE condition:
expr comparison_operator expr

m y
d e
7-5 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Sáowa kluczowe i klauzule
e A
i START WITH. c l
Zapytanie hierarchiczne moĪna rozpoznaü po obecnoĞci ci klauzul CONNECT
CONN BY

W omawianej skáadni:
r a
SELECT
O ly
jest standardową klauzulą
uzulą SELECT
SELECT;
ersza zwróconeg
dla kaĪdego wiersza
T;
ego prz
zwróconego ez zapyt
przez zapytanie hierarchiczne
LEVEL

l & On
pseudokolumnamna LEVEL zwraca
zwr
wraca warto Ğü 1 ddla wiersza gáównego,
wartoĞü

FROM table
n a e
go wiersza podrz
2 dla jego
eĞla tabelĊ,
okreĞla
drzĊdnego itd;
podrzĊdnego
tabelĊ, perspektywĊ
persp
spektywĊ lub mi
migawkĊ, czyli obiekt zawierający

WHERE
t e r U
ogranicza ws
kolumny. W zap apytaniu mo
zapytaniu
rsze zwrócon
wiersze
Īna uĪyü tylko jednej tabeli;
moĪna
zwrócone przez zapytanie, ale nie ma wpáywu na

ion
condition In inne wie rarchii
wiersze hierarchii;
jest porównaniem z wyraĪeniami;
START

c l e
TART WITH okreĞla wiersze gáówne hierarchii (punkty startowe). Klauzula ta jest
wymagana w peánowartoĞciowym zapytaniu hierarchicznym;

r a
CONNECT BY okreĞla kolumny, w których istnieje zaleĪnoĞü miĊdzy elementem
PRIOR nadrzĊdnym a podrzĊdnym. Klauzula ta jest wymagana
O w zapytaniu hierarchicznym.
Instrukcja SELECT nie moĪe zawieraü záączenia lub zapytania dla perspektywy zawierającej
záączenie.

Oracle Database 10g: Podstawy jĊzyka SQL II 7-5


Przechodzenie drzewa

Punkt startowy.
• OkreĞla warunek, który musi byü speániony.
• Akceptuje dowolny poprawny warunek.
START WITH column1 = value

Rozpoczyna przechodzenie tabeli EMPLOYEES


od pracownika o nazwisku „Kochhar”.
...START WITH last_name = 'Kochhar'

m y
d e
7-6 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Przechodzenie drzewa
e A
c l
Wiersze, które mają byü uĪyte jako wĊzáy gáówne drzewa
przez klauzulĊ START WITH. Klauzula ta moĪe by
ewa (punkty startowe),
byüü uĪyta
star
uĪyta w poáączeniu
poáą
są okreĞlane
z dowolnym
poprawnym warunkiem.
r a
Przykáady
O ly
prezesem firmy:
l & On
Rozpoczynanie przechodzenia tabelili EMPLOYEES od pracownika „King”, bĊdącego

n a e
... START WITH manager_id I
IS NULL

Warunek START WITH mo r


Rozpoczynanie przechodzenia
Īe za
moĪe s
chodzenia tabeli EMPLOYEES od pracownika o nazwisku „Kochhar”.

t e wieraü zapytanie
zawieraü
U zapytan podrzĊdne.
... START

I n
TART WITH employee_id
emp e_id = (SELECT employee_id
FROM employees

JeĞli
c l e
eĞli klauzula START
ST
WHERE last_name = 'Kochhar')
WITH zostanie pominiĊta, to przechodzenie drzewa traktuje wszystkie

r a tabeli jako wiersze gáówne. JeĞli zostanie uĪyta klauzula WHERE, to przechodzenie
wiersze tabel
drzewa rozpoczyna
r siĊ od wszystkich wierszy speániających warunek podany w tej klauzuli.
O j to wtedy jednak prawdziwa hierarchia.
Nie jest
Uwaga: Klauzule CONNECT BY PRIOR i START WITH nie naleĪą do standardu
ANSI SQL.

Oracle Database 10g: Podstawy jĊzyka SQL II 7-6


Przechodzenie drzewa

CONNECT BY PRIOR column1 = column2

Przechodzenie tabeli EMPLOYEES od góry do doáu.


... CONNECT BY PRIOR employee_id = manager_id

Kierunek

Od góry do doáu Kolumna1 = Klucz nadrzĊdny


Kolumna2 = Klucz podrzĊdny
Od doáu do góry Kolumna1 = Klucz podrzĊdny
Kolumna2 = Klucz nadrzĊdny
y
m y
d e
7-7 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Przechodzenie drzewa (kontynuacja)
e A
c l
Kierunek zapytania, decydujący o tym, czy przechodzenie wykonywane od wĊzáa
enie jest wykony
nadrzĊdnego w kierunku wĊzáów podrzĊdnych, czyy na odwrót, jest ustalany przez poáoĪenia

r a
kolumn w klauzuli CONNECT BY PRIOR. Operator erator PRIOR odnosi
nadrzĊdnego. Aby znaleĨü wszystkie jego wiersze podrz
podrzĊdne,
od
ne, serwer
Ċdne s
siĊ do wiersza
Oracle oblicza wartoĞü

O ly
wyraĪenia PRIOR dla wskazanego wiersza
wyraĪenia dla wszystkich innych wierszy
nadrzĊdnego,
sza nadrz o, a nastĊpnie
Ċdnego,
erszy tabeli. Te wiersze,
w
nastĊ wartoĞü drugiego
dla kktórych warunek jest

l
zawsze wybiera wiersze podrzĊdne & On
speániony, są wierszami podrzĊdnymi
nymi wskazanego nadrzĊdnego. Serwer Oracle
go wiersza nadrz
warunku CONNECT BY
Ċdne w wynikuu obliczenia waru
w odniesieniu do bieĪącego
n a e
o wiersza nadrz
nadrzĊdnego.
zĊdnego.
Przykáady

e
zaleĪnoĞci, w której warto
r
wartoĞü
U
ko
s
eli EMPLOYEES od góry do doáu
Przechodzenie tabeli
t
do wymaga zdefiniowania hierarchicznej
ny EMPLOYEE_ID
Ğü kolumny EMPLO wiersza nadrzĊdnego jest równa
wartoĞci kolumny
I n
olumny MANAGER_ID
MANAGE wiersza
ersza podrzĊdnego.

e
.... CONNECT BY PRIOR employee_id = manager_id

c l
Przechodzenie tabeli EMPLOYEES od doáu do góry.
echodzenie tabe
... CONNECT
CO BY PRIOR manager_id = employee_id

r a
Operator PPRIOR nie musi koniecznie wystĊpowaü natychmiast po instrukcji CONNECT BY.
przykáad nastĊpująca klauzula CONNECT BY PRIOR daje ten sam wynik, co wyraĪenie
Na przy
Oz poprzedniego
po przykáadu.
... CONNECT BY employee_id = PRIOR manager_id
Uwaga: Klauzula CONNECT BY nie moĪe zawieraü zapytania podrzĊdnego.

Oracle Database 10g: Podstawy jĊzyka SQL II 7-7


Przechodzenie drzewa od doáu do góry

SELECT employee_id, last_name, job_id, manager_id


FROM employees
START WITH employee_id = 101
CONNECT BY PRIOR manager_id = employee_id ;

m y
d e
7-8 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Przechodzenie drzewa od doáu do góry
e A
c l
Przykáad na slajdzie wyĞwietla listĊ kierowników począwszyąwszy od pracownika
cząwszy praco o numerze 101.
Przykáad
r a
W nastĊpującym przykáadzie dla wiersza nadrzĊdnego
adrzĊdnego są
są obliczane
o
oblicz wartoĞci
kolumny EMPLOYEE_ID, a dla wierszyO ly podrzĊdnych
zy podrz wartoĞci
Ċdnychh — warto Ğc kolumn MANAGER_ID
i SALARY. Operator PRIOR odnosi
... CONNECT BY PRIOR
l & On siĊĊ tylko do wartoĞci
si si
OR employee_id
employee_ manager_id
e_id = manage
wartoĞci kolumny
w kolumn EMPLOYEE_ID.

n a e AND salary > 15000;

w kolumnie MANAGER_ID
t e r
Dany wiersz jest zaliczany

U s
wierszy
iczany do wiersz
NAGER_ID jest równa
podrzĊdnych
szy podrz Ċdnych tylko wtedy, gdy jego wartoĞü
r wna wartoĞci
wartoĞci kolumny EMPLOYEE_ID wiersza
nadrzĊdnego,
In
o, a ponadto w kolumnie
ko SALA znajduje siĊ wartoĞü wiĊksza od 15 000 USD.
SALARY

c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 7-8
Przechodzenie drzewa od góry do doáu

SELECT last_name||' reports to '||


PRIOR last_name "Walk Top Down"
FROM employees
START WITH last_name = 'King'
CONNECT BY PRIOR employee_id = manager_id ;

m y
d e
7-9 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Przechodzenie drzewa od góry do doáu
e A
c l
W wyniku przechodzenia drzewa od góry do doáu są wywyĞwietlane nazwiska pracowników
Ğwietlane naz

wyĞwietlana tylko jedna kolumna.


r a
oraz ich kierowników. Jako punktu startowego uĪyto
Īyto pracownika o nazwisku „King”. Jest

O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 7-9
WyĞwietlanie poziomu wierszy
za pomocą pseudokolumny LEVEL
Poziom 1
Wiersz
gáówny/nadrzĊdny
King

Kochhar De Haan Mourgos Zlotkey Hartstein

Poziom 3
Wiersz
Whalen Higgins Hunold Rajs Davies Matos Vargas nadrzĊdny/podrzĊdny/liĞü

Fay

Gietz Ernst Lorentz Abel Taylor Grant

Poziom 4
liĞü
m y
d e
7-10 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
WyĞwietlanie poziomu wierszy za pomocą pseudokolumny
e
olumny LEVEL A
c l
Za pomocą pseudokolumny LEVEL moĪna jawnie wyznaczyü poziom
temu raport staje siĊ bardziej czytelny. Rozwidlenie, w którym
ziom danego wiersza
wiersz w hierarchii. DziĊki
gaáĊzi
m od jednej gaáĊzi wychodzi
w kilka innych gaáĊzi,

r a
jest nazywane wĊzáem, a sam koniec gaáĊzi jest nazywanyy liĞciem.
odwróconego drzewa wraz z ich wartoĞciami pseudokolumny
liĞciem. Diagram na slajdzie przedstawia wĊzáy
kolumny LEVEL
LEVEL. NaN przykáad
p wiersz pracownika

O ly
o nazwisku „Higgens” jest wĊzáem nadrzĊdnym i jednoczeĞnie
pracownika o nazwisku „Davies” jest wĊzáem
jednoczeĞnie w
m podrzĊdnym
podrzĊdnym oraz
wĊzáem podrzĊdnym, natomiast wiersz
Ċzáem podrz
az liĞciem.
liĞciem.
Pseudokolumna LEVEL
l & On
WartoĞü
1
n a ePoziom
WĊzeá ggáówny
áówny
áówny
2
3
t e r U s
WĊzeá
W Ċzeá podrzĊdny
WĊzeá
W Ċzeá podrzĊdny
wzglĊdem
podrzĊdny wzgl
w lĊĊdem w
wezglĊdem
podrzĊd wezgl
wĊzáa
Ċzááa ggáównego
záa
wĊzáa podrzĊdnego itd.
lĊĊdem w

In
W przykáadziezie na slajdzie pracownik
prac o nazwisku
sku „King” jest wĊzáem gáównym i wĊzáem nadrzĊdnym

cl e
(LEVEL = 1). Pracownicy „Kochhar”, „De Haan”, „Mourgos”, „Zlotkey”, „Hartstein”, „Higgens”
i „Hunold”
Hunold” sąsą wĊzáami
wĊzáami podrzĊdnymi, ale teĪ wĊzáami nadrzĊdnymi (LEVEL = 2). „Whalen”, „Rajs”,
„Davies”, „Matos”,
„Matos” „Vargas”, „Gietz”, „Ernst”, „Lorentz”, „Abel”, „Taylor”, „Grant” i „Fay” są wĊzáami

r a
podrzĊdnymi i liĞümi (LEVEL = 3 i LEVEL = 4).
podrzĊdnymi
Uwaga: WĊzeá gáówny jest najwyĪszym wĊzáem w odwróconym drzewie. WĊzeá podrzĊdny jest dowolnym

O wĊzáem,
wĊzá
LiĞciem
L
który nie jest wĊzáem gáównym. WĊzeá nadrzĊdny to kaĪdy wĊzeá, który ma wĊzáy podrzĊdne.
jest natomiast kaĪdy wĊzeá, który nie ma wĊzáów podrzĊdnych. Liczba poziomów zwróconych przez
hierarchiczne zapytanie moĪe byü ograniczona przez iloĞü pamiĊci dostĊpnej dla uĪytkownika.

Oracle Database 10g: Podstawy jĊzyka SQL II 7-10


Formatowanie raportów
hierarchicznych za pomocą
pseudokolumny LEVEL i funkcji LPAD
Utworzyü raport, w którym kolejne poziomy
zarządzania w firmie, począwszy od poziomu
najwyĪszego, są oznaczane wciĊciami.

COLUMN org_chart FORMAT A12


SELECT LPAD(last_name, LENGTH(last_name)+(LEVEL*2)-2,'_')
AS org_chart
FROM employees
START WITH last_name='King'
CONNECT BY PRIOR employee_id=manager_id

m y
d e
7-11 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Formatowanie hierarchicznych raportów za pomocą
ą pseudokolum
e
pseudokolumny LEVEL A
c l
WĊzáy w drzewie są oznaczane numerami poziomów liczonych
LPAD w poáączeniu z wartoĞcią pseudokolumny LEVEL moĪna
ych od w wĊzáa
Ċzáa ggáównego.
moĪna wyĞwietlaü
áów UĪywając funkcji
wyĞwietla raport hierarchiczny
w postaci drzewa z wciĊciami.
W przykáadzie na slajdzie: r a
• LPAD(char1,n [,char2]) zwraca
O ly
z lewej strony taką liczbą napisów char2
skáadający
aca napis sk áadajjący
caáy
char2,, aby ca
siĊĊ z napisu
ący si n
miaáá ddáugoĞü
áy napis mia áu
char1 i uzupeániony
n. Argument n oznacza

l & On
wiĊc caákowitą dáugoĞü napisu zwracanego przeprzez
zez funkcjĊ
LPAD(last_name, LENGTH(last_name)+(LEVEL*2)-2,'_')okreĞla
ENGTH(last_na name)+(LEVEL
wyĞwietlanego
funkcjĊ i wy Ğw na ekranie terminala.
format

a e

wyĞwietlanej wartoĞci.
• W powyĪszym wyraĪeniu
caákowitą dáugoĞcią
r n s
argumentowi
aĪeniu argumento
Ğcią zwracanego o napisu
n
odpowiada wartoĞü LAST_NAME, n jest
towi char1 odpo
wartoĞü LAST_NAME +(LEVEL*2)-2,
i ma wart

Inaczej mówiąc,
n t
natomiast wartoĞcią
e U
argumentu char2 jest znak
artoĞcią argument
ąc, pokazana instrukcja
instr oznacza,
zn podkreĞlenia ('_').
Ī wartoĞü kolumny LAST_NAME bĊdzie poprzedzona
nacza, Īe
z lewej strony

e I
ony tyloma podkr
podkreĞleniami '_', aaby dáugoĞü wynikowego napisu byáa równa
LENGTH(last_name)+(LEVEL*2)-2.
TH(last_name
Dla
l
la pracownika o nnazwisku „King” wartoĞü LEVEL = 1, wiĊc dáugoĞü caáego napisu wynosi
c
(2 * 1) – 2 = 2 – 2 = 0. A zatem nazwisko pracownika „King” bĊdzie wyĞwietlone bez wciĊü od

r a
pierwszej ko
Pracown
kolumny.
Pracownikowi o nazwisku „Kochhar” odpowiada wartoĞü LEVEL = 2, wiĊc dáugoĞü caáego napisu
Owynosi (2 * 2) – 2 = 4 – 2 = 2. Wnioskujemy stąd, Īe nazwisko „Kochhar” zostanie poprzedzone
wyn
wciĊciem skáadającym siĊ z dwóch podkreĞleĔ ('_').
Reszta wierszy w tabeli EMPLOYEES jest wyĞwietlana podobnie.

Oracle Database 10g: Podstawy jĊzyka SQL II 7-11


Formatowanie raportów hierarchicznych za pomocą pseudokolumny LEVEL
(kontynuacja)

m y
d e
c a
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 7-12
Ucinanie gaáĊzi

UĪyü klauzuli WHERE UĪyü klauzuli CONNECT BY


do wykluczenia wĊzáa. do wykluczenia gaáĊzi.

WHERE last_name != 'Higgins' CONNECT BY PRIOR


employee_id = manager_id
AND last_name != 'Higgins'

Kochhar Kochhar

Whalen Higgins Whalen Higgins

Gietz Gietz
m y
d e
7-13 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Ucinanie gaáĊzi
e A
c l
Klauzul WHERE i CONNECT BY moĪna uĪywaü do ucinania inania gaáĊzi,
które wĊzáy (a w konsekwencji wiersze) mają byü wyĞwietlane.
tzn. do kontrolowania,
gaáĊzi, tzn
wyĞwietlane. Zastosowany
Za predykat jest
traktowany jak warunek logiczny.
Przykáady r a
O ly
NastĊpująca instrukcja powoduje, Īe — przy przechodzeniu
odzeniu drzewa
przechod drzew od wĊzáa gáównego

podrzĊdne są uwzglĊdniane.
l & On
w dóá — w wyniku jest pomijany pracownik nazwisku
k o nazw „Higgins”, ale jego wĊzáy
azwisku „Higgins

SELECT

n a e
department_id,
ment_id, employee_id,last_name,
empployee_id,la job_id, salary
FROM
WHERE
START
t r
employees
loyees

e
last_name !=
s
= 'Higgins'

U
WITH manager_id
manag id IS NUNULL
NECT
CONNECT
NastĊpująca I n PRIO employee_id
BY PRIOR yee = manager_id;
ąca instrukcja powoduje, Īe — przy przechodzeniu drzewa od wĊzáa gáównego
pująca
w dóá
l e
dóá — w wyniku jest pomijany pracownik o nazwisku „Higgins” oraz jego wĊzáy
c
podrzĊdne.
podrzĊdne.

r a SEL
SELECT department_id, employee_id,last_name, job_id, salary

O
FROM employees
START WITH manager_id IS NULL
CONNECT BY PRIOR employee_id = manager_id
AND last_name != 'Higgins';

Oracle Database 10g: Podstawy jĊzyka SQL II 7-13


Podsumowanie

Podczas tej lekcji przedstawiono nastĊpujące


zagadnienia:
• Zapytania hierarchiczne sáuĪące
do wyĞwietlania hierarchicznych
zaleĪnoĞci miĊdzy wierszami tabeli.
• OkreĞlanie kierunku i punktów
startowych zapytania.
• Ucinanie pozwalające na pomijanie
wybranych wĊzáów lub gaáĊzi drzewa.

m y
d e
7-14
a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c
Podsumowanie
e A
c l
ZapytaĔ hierarchicznych moĪna uĪywaü do pobierania zgodnie z naturalnymi
ia danych zgodni

r a
hierarchicznymi zaleĪnoĞciami wystĊpującymi mi
LEVEL wskazuje odlegáoĞü danego wĊzáa drzewa
miĊdzy
Ċdzy wierszami
wierszam w tabeli. Pseudokolumna
zewa hierarchicznego
hierarchicz
czn od wĊzáa gáównego.

O ly
Kierunek dziaáania zapytania moĪna okreĞlaü
natomiast punkt startowy wyznacza si
eĞlaü za pomocą
pomocą klauzuli
siĊĊ w klauzuli START
klauzu CONNECT BY PRIOR,
WITH Do ucinania gaáĊzi drzewa
sáuĪą klauzule WHERE i CONNECT
l & On
BY.
CT BY.
S WITH.

n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 7-14
ûwiczenie 7: Omówienie

To üwiczenie obejmuje nastĊpujące zagadnienia:


• OdróĪnianie zapytaĔ hierarchicznych
od zapytaĔ niehierarchicznych.
• Przechodzenie drzewa.
• UĪywanie wartoĞci pseudokolumny
LEVEL do tworzenia raportu z wciĊciami.
• Ucinanie struktury drzewa.
• Sortowanie danych wynikowych.

m y
d e
7-15 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
ûwiczenie 7: Omówienie
e A
c l
To üwiczenie obejmuje doskonalenie umiejĊtnoĞci tworzenia
worzenia raportów hierarchicznych.

r a
Uwaga: Na pytanie 1 naleĪy odpowiedzieü pisemnie.
mnie.

O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 7-15
ûwiczenie 7
1. Przyjrzeü siĊ nastĊpującym przykáadom danych wynikowych. Czy powstaáy
one w wyniku zapytaĔ hierarchicznych? WyjaĞniü dlaczego tak lub dlaczego nie.
Przykáad 1:

m y
d e
Przykáad 2: c a
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 7-16
ûwiczenie 7 (kontynuacja)
Przykáad 3:

2. Utworzyü raport obrazujący strukturĊ organizacyjną dziaáu, w którym pracuje Mourgos.


WyĞwietlaü nazwiska i zarobki pracowników oraz numery dziaáów.

m y
d e
c a
e
najpierw jego bezpoĞredniego przeáoĪonego. A
3. Utworzyü raport obrazujący hierarchiĊ przeáoĪonych pracownika „Lorentz”. WyĞwietlaü
acownika „Loren

c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 7-17
ûwiczenie 7 (kontynuacja)
4. Utworzyü raport z wciĊciami obrazujący hierarchiĊ kierowniczą, począwszy od
pracownika o nazwisku „Kochhar”. WyĞwietlaü nazwiska, numery kierowników oraz
numery dziaáów. OkreĞliü aliasy dla kolumn zgodnie z pokazanymi wynikami
przykáadowymi.

m y
JeĞli czas na to pozwala, proszĊ wykonaü nastĊpujące zadania:

d e
5. Utworzyü raport obrazujący hierarchiĊ pracowników. Rozpocząü odd osoby na

c a
najwyĪszym szczeblu, pomijaü wszystkie osoby na stanowisku IT_PROG oraz pomijaü
pracownika o nazwisku „De Haan” i wszystkich jego podwáadnych.
áadnych.
p

e A
c l
ra
O ly
l & On
n a e

t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 7-18
Obsáuga wyraĪeĔ regularnych

m y
d e
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Cele

Zagadnienia przedstawione w ramach tej lekcji


pozwalają na uĪywanie wyraĪeĔ regularnych
w instrukcjach SQL do wyszukiwania, porównywania
i zamiany napisów.

m y
d e
8-2
a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c
Cele
e A
c l
Podczas tej lekcji omówiono uĪywanie wyraĪeĔ regularnych,
larnych, których obsáuga zostaáa

a
wprowadzona w bazie danych Oracle 10g.
r
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 8-2
Omówienie wyraĪeĔ regularnych
Obsáuga
wielojĊzycznych
wyraĪeĔ regularnych
dla typów
napisowych SQL
i PLSQL.

ABC

Metoda opisu
zarówno prostych, Nowe funkcje
jak i záoĪonych wzor- obsáugujące
ców wyszukiwania wyraĪenia
i modyfikowania
napisów.
regularne.

m y
d e
8-3 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Omówienie wyraĪeĔ regularnych
e A
c l
W bazie danych Oracle 10g wprowadzono obsáugĊ wyra wyraĪeĔ regularnych. Ich implementacja
ĪeĔ regularny

r a
jest pod wzglĊdem skáadni i semantyki wyszukiwania wania danych
POSIX (ang. Portable Operating System for UNIX) regulowa
danych ASCII
AS
regulowanym
wan
zgodna ze standardem
przez IEEE (ang. Institute

moĪliwoĞci operatorów wyszukiwania O ly


of Electrical and Electronics Engineers).. Wieloj
WielojĊzyczne
Ċzycznee funkcje Oracle rozszerzają
nia poza standard WyraĪenia regularne są metodą
rd POSIX. Wyr

l
opisywania zarówno prostych, jak & On
ak i skomplikowanych
skomplikow wanych wzorców wyszukiwania napisów
i manipulowania nimi.

n a e
Wyszukiwanie napisów
internetowych. Obejmuje
wyraĪenia „San t e r
w i ich modyfikowanie

U s kowanie jest bardzo


modyfiko
nieskomplikowane
bejmuje zarówno nieskomp
an Francisco” w podanym
likow
tekĞcie,
nym tek
bard istotną czĊĞcią dziaáania aplikacji
zadania, takie jak znalezienie
zadania trudniejsze — na przykáad
wydobycie
I n
ie z tekstu wszys
wszystkich adresów
Ğ
w URL, oraz bardzo záoĪone — na przykáad znalezienie
wszystkich
WyraĪenia
c e
stkich sáów,
l sáów, w kktórych co druga litera jest samogáoską.
WyraĪenia regularne
regul w poáączeniu z wáaĞciwym jĊzykiem SQL pozwalają na

r a
przeprowadzanie
przeprowad
przechowywanych
przecho
bardzo zaawansowanego wyszukiwania dowolnych danych
w bazie danych Oracle. DziĊki wyraĪeniom regularnym moĪna áatwo
Orozwiązywaü
rozw problemy, które przy uĪyciu innych narzĊdzi wymagaáyby bardzo
skomplikowanych programów.

Oracle Database 10g: Podstawy jĊzyka SQL II 8-3


Metaznaki
Symbol Opis
* Oznacza zero lub wiĊcej wystąpieĔ
| Operator alternatywy oznaczający dowolne z podanych wyraĪeĔ
^/$ Oznacza początek/koniec wiersza
[] WyraĪenie nawiasowe zawierające listĊ wyraĪeĔ oznacza dowolne
wyraĪenie wymienione na liĞcie
{m} Oznacza dokáadnie m wystąpieĔ
{m,n} Oznacza co najmniej m, ale nie wiĊcej niĪ n wystąpieĔ
[: :] OkreĞla klasĊ znaków i odpowiada dowolnemu znakowi z tej klasy
\ MoĪe mieü 4 róĪne znaczenia: 1. Oznacza siebie. 2. Cytuje nastĊpny
znak. 3. Wprowadza operator. 4. Nie robi nic.
+ Oznacza co najmniej jedno wystąpienie
? Oznacza brak lub jedno wystąpienie
. Oznacza dowolny znak w obsáugiwanym zbiorze znaków, oprócz
znaku NULL
() WyraĪenie grupujące traktowane jako pojedyncze podwyraĪenie
[==] Definiuje klasy równowaĪnoĞci
\n
[..]
WyraĪenie odwoáania wstecz

m y
OkreĞla element záoĪony, na przykáad element wieloznakowy

d e
8-4
a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c
Metaznaki
e A
c l
Metaznaki to symbole o specjalnym znaczeniu, takie jak wieloznaczniki,
wieloznaczn znak powtórzenia,

r a
znak braku wystąpieĔ lub zakres znaków. Podczass wyszukiwania wzorców moĪna korzystaü
z pewnej liczby zdefiniowanych metaznaków.
w.

O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 8-4
Korzystanie z metaznaków
Problem: ZnaleĨü 'abc' w podanym napisie:
Rozwiązanie: 'abc' 1
Pasuje: abc
Nie pasuje: def
Problem: ZnaleĨü napis skáadający siĊ z litery 'a',
dowolnego znaku i litery 'c'
Metaznaki: dowolny znak jest definiowany przez symbol '.'
Rozwiązanie: 'a.c'
Pasuje: abc 2
Pasuje: adc
Pasuje: alc
Pasuje: a&c
Nie pasuje: abb
Problem: ZnaleĨü co najmniej jedno wystąpienie litery 'a'
Metaznaki: naleĪy uĪyü symbolu '+' do znalezienia co
najmniej jednego poprzedzającego go znaku
Rozwiązanie: 'a+' 3
Pasuje: a
Pasuje:
Nie pasuje:
aa
bbb
m y
d e
8-5
a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c
Korzystanie z metaznaków
e A
c l
1. W pierwszym przykáadzie jest przeprowadzane proste wyszukiw
2. W drugim przykáadzie dowolny znak jest definiowany prze
wyszukiwanie.
przez symbol „.”. WyraĪenie

r a
wyszukuje napis skáadający siĊ z litery „a”,a”, dowolnegoo znaku
z i litery „c”.

O ly
3. WyraĪenie w trzecim przykáadzie sáuĪy
najmniej jednej litery „a”. Symbol
uĪy do znalezienia
bol „+”
znalezien
„+” oznacza
enia napisu
nap skáadającego siĊ z co
za co najmniej jedno wystąpienie
& On
poprzedzającego go znaku.
l
n a e
MoĪna teĪ wyszukiwaü znaki, ki, które nie pasują
znaków definiuje zbiór znaków, których
pasu
asują do podanej listy znaków. Lista niepasujących
ch znalezienie je
jest niepoprawne. Na przykáad, aby znaleĨü

WyraĪenie:ie: t e r
Ċdący
ący literą
dowolny znak niebĊdący

U s
literą „a”,
[^
„a”,
[^abc]
” „b”
„b” ani „c”
„c” na
naleĪy uĪyü symbolu „^”.

suje:
Pasuje:
I n abcdef

cl e
Pasuje:
Nie pasuje:
pasu
ghi
abc

a
Aby znaleĨü
znaleĨü dowolną literĊ spoza przedziaáu liter miĊdzy „a” oraz „i” moĪna uĪyü wyraĪenia:
r
O WyraĪenie:
Wyr
Pasuje:
Pasuje:
[^a-i]
hijk
lmn
Nie pasuje: abcdefghi

Oracle Database 10g: Podstawy jĊzyka SQL II 8-5


Korzystanie z metaznaków (kontynuacja)

Skáadnia
metaznak Nazwa operatora Opis
u
. Dowolny znak — kropka Oznacza dowolny znak

+ Co najmniej jedno — kwantyfikator Oznacza co najmniej jedno wystąpienie


w postaci znaku plusa poprzedzającego podwyraĪenia

? Brak lub jedno wystąpienie — Oznacza brak lub jedno wystąpienie


kwan-tyfikator w postaci znaku poprzedzającego podwyraĪenia
zapytania
* Brak lub dowolna liczba — Oznacza zero lub wiĊcej wystąpieĔ
kwantyfikator w postaci gwiazdki poprzedzającego podwyraĪenia

{m} Przedziaá — dokáadna liczba Oznacza


{m,} wystąpieĔ • dokáadnie m wystąpieĔ
{m,n} • co najmniej m wystąpieĔ
• co najmniej m, ale nie wiĊcej niĪ
n wystąpieĔ poprzedzającego
podwyraĪenia

[…] Lista pasujących znaków


my
Oznacza dowolny znak z listy
y ...

[^…] Lista niepasujących znaków


de Oznacza dowolny niewymieniony
y znak niewymie

c a na liĞcie ...

| lub

e A „a|b” znajduje literĊ


literĊ „a” lub „b”.

(…)
cl
PodwyraĪenie lub grupowanie wyra
Traktuje wyraĪenie ... jako jednoĞü.
\n Odwoáanie wstecz
r a Znajdu
duje poprzednie n-te podwyraĪenie,
Znajduje

O ly gdzie
gd n jest
jes liczbą caákowitą od 1 do 9.

\ Znak cytowania
l & On Traktuje kkolejne metaznaki w

na e wyra
wyraĪeniu jak literaá napisowy.

t e r s
nik początku
Znacznik początku
ątku wiersza

U
wieersza Znajduje wyraĪenie podane po symbolu,
jeĞli pojawia siĊ ono na początku

$
I n
Znacznik koĔca
ko wierszaa
wiersza.
Znajduje wyraĪenie poprzedzające

cl e symbol tylko wtedy, gdy pojawia siĊ


ono na koĔcu wiersza.

r a
[:class:]
[:class: Klasa znaków POSIX Oznacza dowolny znak naleĪący do

O okreĞlonej klasy znaków.

Oracle Database 10g: Podstawy jĊzyka SQL II 8-6


Funkcje wyraĪeĔ regularnych

Nazwa funkcji Opis


REGEXP_LIKE Funkcja podobna do operatora LIKE, ale
przeprowadza wyszukiwanie wyraĪenia
regularnego, a nie wzorca prostego.
REGEXP_REPLACE Wyszukuje wzorzec wyraĪenia regular-
nego i zastĊpuje go podanym napisem.
REGEXP_INSTR Wyszukuje dany napis zgodnie
ze wzorcem w wyraĪeniu regularnym
i zwraca pozycjĊ, na której znaleziono
wystąpienie.
REGEXP_SUBSTR Wyszukuje wzorzec wyraĪenia regular-
nego w danym napisie i zwraca
znaleziony napis.
m y
d e
8-7
a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c
Funkcje wyraĪeĔ regularnych
e A
c l
Baza danych Oracle 10g udostĊpnia zbiór funkcji jĊzyka których moĪna uĪywaü do
yka SQL, któryc

r a
wyszukiwania i manipulowania napisami za pomocą
tych funkcji dla dowolnych znakowych typów
mocą wyraĪeĔ
wyraĪeĔ regularnych.
w danych, takich
reg MoĪna uĪywaü
ch jjak CHAR, NCHAR, CLOB,

O ly
NCLOB, NVARCHAR2 lub VARCHAR2. WyraĪenieWyraĪenie regularne
co gwarantuje, Īe caáe wyraĪenie zostanie
regula
ularne mu
zinterpretowane
musi byü ujĊte w apostrofy,
etowane przez ffunkcjĊ SQL, i moĪe siĊ
stanie zinterpreto

l & On
przyczyniü do zwiĊkszenia czytelnoĞci
elnoĞci pisanego
go kodu.
REGEXP_LIKE: wyszukuje
n a e wzorzec
uje podany wzorz rzec w kolumnie
kolumnie typu znakowego. Funkcji tej
moĪna uĪywaü w klauzuli
wyraĪeniem regularnym.
e
arnym.
t r
zuli WHERE w celu

U s ce zwracania wierszy
w zgodnych z podanym

REGEXP_REPLACE:
kaĪde wystąpienie
I
ystąpienie n
EPLACE: wyszukuje
wyszuk podany
ąpienie tego wzorca
w
wzorzec w kolumnie typu znakowego i zastĊpuje
dany wz
podanym napisem.

c l e
GEXP_INSTR: wyszukuje napis zgodny z podanym wzorcem wyraĪenia regularnego.
REGEXP_INSTR:
UĪytkownik mu
UĪytkownik musi okreĞliü, które wystąpienie ma zostaü zwrócone, oraz podaü pozycjĊ

r a
początkową,
ątkow od której ma siĊ rozpocząü wyszukiwanie. Funkcja ta zwraca liczbĊ caákowitą
początkow

O oznaczającą
oznacz pozycjĊ znalezionego wzorca w napisie.
REGEXP_SUBSTR:
R
regularnego.
zwraca rzeczywisty napis pasujący do podanego wzorca wyraĪenia

Oracle Database 10g: Podstawy jĊzyka SQL II 8-7


Funkcja REGEXP: skáadnia

REGEXP_LIKE (srcstr, pattern [,match_option])

REGEXP_INSTR (srcstr, pattern [, position [, occurrence


[, return_option [, match_option]]]])

REGEXP_SUBSTR (srcstr, pattern [, position


[, occurrence [, match_option]]])

REGEXP_REPLACE(srcstr, pattern [,replacestr [, position


[, occurrence [, match_option]]]])

m y
d e
8-8 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Funkcja REGEXP: skáadnia
e A
c l
NastĊpująca tabela zawiera opisy elementów skáadni pokazanej na slaj
slajdzie.

srcstr
r a
Wyszukiwana wartoĞü
toĞü
pattern
O ly
WyraĪenie regularne
occurrence
l & On
Numer
er znajdowanego wystąpienia
go wyst ąpienia
ąpienia
position
na e Początkowa
Początkowa
ątkowa pozycja
po wyszukiwania
wyszuki

e
return_optio
n
ttior U s Początkowa
ątkowa lub koĔcowa
Początkowa koĔco pozycja wystąpienia

I n
replacestr
lacestr Napis do zastąpienia wzorca

cl e
match_option
match_opti Opcja zmieniająca dziaáanie domyĞlnego wyszukiwania — moĪe

r a zawieraü co najmniej jedną z nastĊpujących wartoĞci:


c — w wyszukiwaniu jest uwzglĊdniana wielkoĞü liter

O (domyĞlnie);
I — nie jest uwzglĊdniana wielkoĞü liter;
n — dopuszcza siĊ stosowanie operatora znajdowania
dowolnego znaku;
m — potraktowanie napisu Ĩródáowego jako napisu
wielowierszowego.

Oracle Database 10g: Podstawy jĊzyka SQL II 8-8


Wykonywanie podstawowych wyszukiwaĔ

SELECT first_name, last_name


FROM employees
WHERE REGEXP_LIKE (first_name, '^Ste(v|ph)en$');

m y
d e
8-9 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Funkcja REGEXP_LIKE: przykáad
e A
c l
Pokazane na slajdzie zapytanie, dziaáające na tabeli EMPLOYEES,
MPLOYEES, wyĞwietla
w wszystkich

'^Ste(v|ph)en$' :
r a
pracowników o imieniu „Steven” lub „Stephen”. W uuĪytym
Īytym wyraĪeniu
wyra

• ^ oznacza początek napisu;


• $ oznacza koniec napisu; O ly
• | oznacza „lub”.
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 8-9
Sprawdzanie istnienia wzorca

SELECT street_address,
REGEXP_INSTR(street_address,'[^[:alpha:]]')
FROM locations
WHERE
REGEXP_INSTR(street_address,'[^[:alpha:]]')> 1;

m y
d e
8-10 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Sprawdzanie istnienia wzorca
e A
c l
W przykáadzie na slajdzie funkcja REGEXP_INSTR jest uuĪywana Īywana do przeszukiwania adresów

r a
miejskich w celu znalezienia lokalizacji pierwszego
maáą). Wyszukiwanie jest przeprowadzane tylko
ego znaku, który nie jest literą (ani wielką ani
ylko dla tych adresów,
ad
dres które nie zaczynają siĊ od

O ly
liczby. NaleĪy zauwaĪyü, Īe element [:<class>:]
dowoln
znak z tej klasy. Napis [:alpha:] oznacza dowolną
okkreĞla kl
<class>:] okreĞla
lną literĊ.
klasĊ znaków i znajduje dowolny
literĊ. Przykáad
Przy wyĞwietla znalezione
wyniki.
l & On
W wyraĪeniu '[^[:alpha:]]'
n a e uĪywan
anym w zapytaniu:
ha:]]' uĪywanym zapytani

egacjĊ;
• ^ oznacza negacjĊ;
t e r
raĪenie;
• [ rozpoczyna wyraĪenie;

• [:alpha:]] oznacza klasĊ U s


klasĊ liter;
l
I n
Ĕczy wyraĪenie.
• ] koĔczy wyraĪenie.
aga: Operator klas
Uwaga:

cl e
naleĪąących
kl znaków POSIX umoĪliwia wyszukiwanie wyraĪeĔ z listy znaków
cych do konkretnej
naleĪących k klasy znakowej POSIX. MoMoĪna go uĪywaü do okreĞlenia konkretnego

r a
formatowan na przykáad wielkich liter, albo do znajdowania znaków specjalnych, takich jak
formatowania,
cyfry lub
lu znaki przestankowe. Oracle obsáuguje peány zbiór klas znaków POSIX. NaleĪy uĪyü
Ozapisu
zap [:class:], gdzie class jest nazwą wyszukiwanej klasy znaków POSIX.
NastĊpujące wyraĪenie regularne wyszukuje napis skáadający siĊ z samych wielkich liter
(co najmniej jednej): '[[:upper:]]+'.

Oracle Database 10g: Podstawy jĊzyka SQL II 8-10


Wydobywanie podnapisów: przykáad

SELECT REGEXP_SUBSTR(street_address , ' [^ ]+ ')


"Road" FROM locations;

m y
d e
8-11 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Wydobywanie podnapisów: przykáad
e A
c l
Przykáad na slajdzie pobiera nazwy ulic z tabeli LOCATIONS.
ATIONS. W tym celu funkcja

r a
REGEXP_SUBSTR pobiera fragment zawartoĞci kolumny STRE
siĊ przed pierwszą spacją. W wyraĪeniu '[^ ]+ ' uĪytym
STREET_ADDRESS znajdujący
m w zapytaniu:
uĪytym
• [ rozpoczyna wyraĪenie;
• ^ oznacza negacjĊ; O ly
• oznacza spacjĊ;
l & On
• ] koĔczy wyraĪenie;
• + oznacza co najmniej
n a e
mniej jedno wyst
wystąpienie;
stąpienie;
ąpienie;
• oznacza spacjĊ.
e
cjĊ.
t r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 8-11
ZastĊpowanie wzorców

SELECT REGEXP_REPLACE( country_name, '(.)',


'\1 ') "REGEXP_REPLACE"
FROM countries;

m y
d e
8-12 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
ZastĊpowanie wzorców
e A
c l
Przykáad na slajdzie przeszukuje kolumnĊ COUNTRY_NAME. danych Oracle zmienia
_NAME. Baza da

wyĞwietla znalezione wyniki.


r a
dane w taki sposób, aby po kaĪdym niepustym znaku wystĊpowaáa
naku wyst Ċpowaá spacja. Przykáad

O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 8-12
WyraĪenia regularne i wiĊzy sprawdzania

ALTER TABLE emp8


ADD CONSTRAINT email_addr 1
CHECK(REGEXP_LIKE(email,'@'))NOVALIDATE ;

INSERT INTO emp8 VALUES


(500,'Christian','Patel',
2
'ChrisP2creme.com', 1234567890,
'12-Jan-2004', 'HR_REP', 2000, null, 102, 40) ;

m y
d e
8-13 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
WyraĪenia regularne i wiĊzy sprawdzania
e A
c l
WyraĪenia regularne mogą byü teĪ uĪywane w wiĊzach ach sprawdzania. Przykáad na slajdzie

r a
stosuje wiĊzy sprawdzania do kolumny EMAIL w tabeli EMPLOYEES.
zostaną zaakceptowane tylko napisy zawierające
jące
EMPLOY
ące symbol „@”.
„@
Gwarantują one, Īe
@ . Wstawienie wiersza powoduje

wymaganego symbolu, wiersz zostajeO ly


wykonanie sprawdzenia, ale poniewaĪ podany poczty
odany adres pococzty elektronicznej
je odrzucony. Klauzula
Kl
elekt
NOVALIDATE
NOVA
nie zawiera
zapewnia, Īe dane

l & On
juĪ istniejące nie bĊdą sprawdzane.
ane.

n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 8-13
Podsumowanie

Podczas tej lekcji przedstawiono zagadnienia


związane z obsáugą wyraĪeĔ regularnych
w jĊzykach SQL i PL/SQL do wyszukiwania,
porównywania i zamiany napisów.

m y
d e
8-14 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Podsumowanie
e A
c l
Podczas tej lekcji omówiono uĪywanie wyraĪeĔ regularnych,
larnych, których obsáuga zostaáa

a
wprowadzona w bazie danych Oracle 10g.
r
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 8-14
ûwiczenie 8: Omówienie

To üwiczenie obejmuje doskonalenie umiejĊtnoĞci


uĪywania wyraĪeĔ regularnych.

m y
d e
8-15 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
ûwiczenie 8: Omówienie
e A
c l
To üwiczenie obejmuje wyszukiwanie i zastĊpowaniee danych za pom
pomocą wyraĪeĔ
regularnych.
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 8-15
ûwiczenie 8
1. Utworzyü zapytanie wyszukujące w tabeli EMPLOYEES wszystkich tych pracowników,
których imiona zaczynają siĊ od „Ne” lub „Na.”

2. Utworzyü zapytanie usuwające spacje z kolumny STREET_ADDRESS w tabeli


LOCATIONS i wyĞwietlające zmienione dane.

m y
d e
c a
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 8-16
ûwiczenie 8 (kontynuacja)
3. Utworzyü zapytanie zmieniające napis „St” na „Street” w kolumnie
STREET_ADDRESS w tabeli LOCATIONS. NaleĪy zachowaü ostroĪnoĞü, aby nie
zmieniaü Īadnych wierszy, które juĪ zawierają napis „Street”. WyĞwietlaü tylko
zmienione wiersze.

m y
d e
c a
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 8-17
m y
d e
ca
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
_____________________

Dodatek A
Rozwiązania
üwiczeĔ
_____________________

m y
d e
ca
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
ûwiczenie 1: Rozwiązania
Począwszy od zadania 6., rozwiązanie wymaga poáączenia siĊ z bazą danych za pomocą
Ğrodowiska iSQL*Plus. W tym celu na swoim komputerze naleĪy uruchomiü przeglądarkĊ
Internet Explorer i wpisaü w niej adres URL http://NAZWA_HOSTA:5561/isqlplus/, a nastĊpnie
zalogowaü siĊ na konto oraxx, uĪywając odpowiedniego hasáa i identyfikatora usáugi
(w formacie Tx) podanych przez prowadzącego.
1. Jakie uprawnienia powinny byü nadane uĪytkownikowi, aby mógá siĊ on zalogowaü
do serwera Oracle? Czy są to uprawnienia systemowe czy obiektowe?
Uprawnienia systemowe CREATE SESSION.

2. Jakie uprawnienia powinien uzyskaü uĪytkownik, aby móc tworzyü tabele?


Uprawnienia CREATE TABLE.

3. Kto moĪe przekazywaü innym uĪytkownikom uprawnienia, które uzyskaá do


cudzej tabeli?
Twórca tabeli lub kaĪda osoba, której nadano te uprawnienia za pomocą klauzuli
WITH GRANT OPTION.

4. Zakáadając, Īe jest siĊ administratorem bazy danych i tworzy siĊ wielu uĪytkowników
wymagających tych samych uprawnieĔ, czego naleĪy uĪyü, aby uáatwiü sobie
to zadanie?
Utworzyü rolĊ z odpowiednimi uprawnieniami systemowymi i przydzieliü ją tym
uĪytkownikom.

m y
5. Jakiego polecenia uĪywa siĊ do zmiany swojego hasáa?
ALTER USER

d e
c a
6. Nadaü innemu uĪytkownikowi prawa dostĊpu do swojej tabeli DEPARTMENTS
PARTMENTS i uzyskaü
od niego uprawnienie do tworzenia zapytaĔ dla jego tabeli DEPARTMENTS.
PARTMENTS.
PARTMENTS.
u

GRANT select
e A
Drugi zespóá wykonuje nastĊpującą instrukcjĊ strukcj
trukcjĊ GRANT:
Ċ GRA

ON
TO
departments
<user1>;
c l
r a
Pierwszy zespóá wykonuje nastĊpującą astĊpuj
astĊ pują ąc ą instrukcjĊ GRANT:

O ly
GRANT select
ON departments
TO <user2>;

l & On
n a e
user1 jest nazwą pierwszego zespoáu
zespo
go zespoá u a user2
áu r2 — nazwą
er2
user nazwą drugiego.
dru

t e r
7. Utworzyü zapytanie
ENTS..
DEPARTMENTS.
MENTS
U s
pytanie wypisujące
wypisująące
wypisują ce wszystkie wiersze
wi znajdujące
znajduj siĊ we wáasnej tabeli

I n
SELECT *

c l eFROM departments;

r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II A-2
ûwiczenie 1: Rozwiązania (kontynuacja)
8. KaĪdy zespóá ma za zadanie dodaü nowy wiersz do swojej tabeli DEPARTMENTS.
Pierwszy zespóá powinien dodaü dziaá „Education” o numerze „500”, a drugi zespóá
— dziaá „Human Resources” o numerze „510”. Utworzyü zapytanie dla tabeli
drugiego zespoáu.
Pierwszy zespóá wykonuje nastĊpującą instrukcjĊ INSERT:
INSERT INTO departments(department_id, department_name)
VALUES (500, 'Education');
COMMIT;
Drugi zespóá wykonuje nastĊpującą instrukcjĊ INSERT:
INSERT INTO departments(department_id, department_name)
VALUES (510, 'Human Resources');
COMMIT;

9. Utworzyü synonim dla tabeli DEPARTMENTS drugiego zespoáu.


Pierwszy zespóá tworzy synonim o nazwie team2.
CREATE SYNONYM team2
FOR <oraxx>.DEPARTMENTS;
Drugi zespóá tworzy synonim o nazwie team1.
m y
CREATE SYNONYM team1
d e
a
FOR <oraxx>. DEPARTMENTS;

10. Utworzyü zapytanie zwracające wszystkie wiersze tabeli


beli A c
DEPARTMENTS drugiego
eli DEPARTMEN

l e
zespoáu, uĪywając utworzonego synonimu.

c
SELECT *
r a
ast
Pierwszy zespóá wykonuje nastĊpującą
stĊ pują
Ċpuj cą
ąc instrukcjĊ SELECT:
ą i

FROM team2;
O ly
l & On
nastĊppując
nuje nastĊpującą
Drugi zespóá wykonuje nastĊ p
pują cą
ą instr
instrukcjĊ SELECT:

a e
SELECT *
FROM team1;
r n s
n t e U
e I
c l
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II A-3
ûwiczenie 1: Rozwiązania (kontynuacja)
11. Utworzyü zapytanie dla sáownika danych USER_TABLES, aby uzyskaü informacjĊ
o wáasnych tabelach.

SELECT table_name
FROM user_tables;

12. Utworzyü zapytanie dla perspektywy ALL_TABLES sáownika danych, aby uzyskaü
informacje o wszystkich tabelach, do których ma siĊ dostĊp, pominąwszy wáasne tabele.

SELECT table_name, owner


FROM all_tables
WHERE owner <> 'Oraxx';

13. Odebraü drugiemu zespoáowi uprawnienie SELECT.

Pierwszy zespóá odbiera uprawnienie:


REVOKE select
ON departments
m y
e
FROM <oraxx>;
Drugi zespóá odbiera uprawnienie:
REVOKE select
a d
ON
FROM
departments
<oraxx>;
A c
c l e
14. Usunąü wiersz wstawiony do tabeli DEPARTMENTS
ENTS w zadaniu 8. i zatwierdziü
dokonane zmiany.
r a
O ly
Pierwszy zespóá wykonuje
konuje nastĊpującą
ykonuje nasttĊpuj
tĊ pują
ąc ą instrukcjĊ INSERT:

DELETE FROM
l & On
OM departments
ents
departmennts

COMMIT;
MIT;
n a e
WHERE department_id
_id = 500;
department_i

t e r
ugi zespóá
Drugi w

U s
zespóá wykonuje na
nastĊpującą instrukcjĊ INSERT:

n
F
DELETE FROM depart
departments

e I men
WHERE department_id = 510;

c l C
COMMIT;

r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II A-4
ûwiczenie 2: Rozwiązania
1. Utworzyü tabelĊ DEPT2 na podstawie podanego schematu. Zapisaü odpowiednie
instrukcje w pliku skryptu o nazwie lab_02_01.sql, a nastĊpnie go wykonaü.
Upewniü siĊ, Īe tabela zostaáa utworzona.
Nazwa kolumny ID NAME
Typ klucza
NULL/Unikat
Tabela FK
Kolumna FK
Typ danych NUMBER VARCHAR2
DáugoĞü 7 25

CREATE TABLE dept2


(id NUMBER(7),
name VARCHAR2(25));

DESCRIBE dept2
m y
d e
potrzebne kolumny.
Ċdni

c a
Ċdniüü tylko
2. Wypeániü tabelĊ DEPT2 danymi z tabeli DEPARTMENTS. UwzglĊdniü

e A
INSERT INTO dept2

c l
tment_name
SELECT department_id, department_name
FROM departments;
r a
O ly
l & On
odstawie podanego
3. Utworzyü tabelĊ EMP2 na podstawie podaneg
ego schematu. Zapisaü
tu o nazwie lab_02_03.sql,
instrukcje w pliku skryptu lab
Za odpowiednie
b_02_03.sql a nastĊpnie go wykonaü.
lab_

n a e
la zostaá
Upewniü siĊ, Īe tabela zostaáaa utworzona.
zostaáa utworrzona.

t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II A-5
ûwiczenie 2: Rozwiązania (kontynuacja)

CREATE TABLE emp2


(id NUMBER(7),
last_name VARCHAR2(25),
first_name VARCHAR2(25),
dept_id NUMBER(7));

DESCRIBE emp2

4. Zmodyfikowaü tabelĊ EMP2, tak aby umoĪliwiü wpisywanie dáuĪszych nazw


pracowników. Sprawdziü, czy modyfikacja zostaáa uwzglĊdniona.

ALTER TABLE emp2


MODIFY (last_name VARCHAR2(50));

DESCRIBE emp2

5. Sprawdziü, czy obie tabele DEPT2 oraz EMP2 są przechowywane w sáowniku danych.
(Wskazówka: USER_TABLES)

SELECT table_name
m y
FROM user_tables
d e
WHERE table_name IN ('DEPT2', 'EMP2');
;

c a
6. Utworzyü tabelĊ EMPLOYEES2 na podstawie struktury
e A
EMPLOYEES. UwzglĊdniü
ury tabeli EMPLO

c l
tylko kolumny EMPLOYEE_ID, FIRST_NAME, LAST_NAME,
DEPARTMENT_ID. Nazwaü nagáówki kolumnmn
LAST_NAME, SALARY
SA oraz
n odpowiednio: ID, FIRST_NAME,

a
LAST_NAME, SALARY oraz DEPT_ID.
r
O ly
SELECT employee_id
l & On
CREATE TABLE employees2
ployees2
loyees2 AS
yee_id id, first_name,
f last_name, salary,

n a e
department_id
partment_id dept_id
dept
d dept_ id
_id
FROM

t e r
employees;

U s
nąü
ąü tabelĊ
7. Usunąü
I n
tabelĊ EMP2.
EMP2

c l e DROP T
TABLE emp2;

r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II A-6
ûwiczenie 2: Rozwiązania (kontynuacja)
8. Wykonaü zapytanie dla kosza, aby sprawdziü, czy tabela zostaáa w nim umieszczona.

SELECT original_name, operation, droptime


FROM recyclebin;

9. Wycofaü usuniĊcie tabeli EMP2.

FLASHBACK TABLE emp2 TO BEFORE DROP;


DESC emp2;

10. Usunąü kolumnĊ FIRST_NAME z tabeli EMPLOYEES2. Sprawdziü poprawnoĞü


wykonanej modyfikacji, odczytując opis tabeli.

ALTER TABLE employees2


DROP COLUMN first_name;

DESCRIBE employees2

11. W tabeli EMPLOYEES2 oznaczyü kolumnĊ DEPT_ID jako UNUSED. Sprawdziü


awdziü
awdziü
m y
poprawnoĞü wykonanej modyfikacji, odczytując opis tabeli.
d e
ALTER TABLE employees2
c a
SET UNUSED (dept_id);

e A
DESCRIBE employees2
c l
r a
O ly
12. Usunąü z tabeli EMPLOYEES2 wszystkie
zystkie
poprawnoĞü wykonanej modyfikacji,
fikacji, odczytując
odczytuj
ikacji, odczytują
ooznaczone jako UNUSED. Sprawdziü
ystkie kolumnyy oznaczo
ąącc opis tabeli.

l & On
a e
ALTER TABLE employees2

n
DROP UNUSED

t r
COLUMNS;
SED COLUMNS

e
S;

U s
DESCRIBE
I n
ESCRIBE employees2
empl s2

c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II A-7
ûwiczenie 2: Rozwiązania (kontynuacja)
13. W tabeli EMP2 dla kolumny ID dodaü wiĊzy PRIMARY KEY poziomu tabeli. Podczas
tworzenia wiĊzów naleĪy nadaü im nazwĊ my_emp_id_pk.

ALTER TABLE emp2


ADD CONSTRAINT my_emp_id_pk PRIMARY KEY (id);

14. W tabeli DEPT2 dla kolumny ID utworzyü wiĊzy PRIMARY KEY. Podczas tworzenia
wiĊzów naleĪy nadaü im nazwĊ my_dept_id_pk.

ALTER TABLE dept2


ADD CONSTRAINT my_dept_id_pk PRIMARY KEY(id);

15. Dodaü w tabeli EMP2 odwoáanie klucza obcego gwarantujące, Īe pracownik nie jest
przypisany do nieistniejącego dziaáu. Nadaü wiĊzom nazwĊ my_emp_dept_id_fk.
ALTER TABLE emp2
ADD CONSTRAINT my_emp_dept_id_fk
FOREIGN KEY (dept_id) REFERENCES dept2(id);

16. Potwierdziü dodanie wiĊzów za pomocą zapytania dla perspektywy


USER_CONSTRAINTS.
Zwróciü uwagĊ na typy i nazwy wiĊzów.

m y
SELECT
FROM
constraint_name, constraint_type
user_constraints
d e
WHERE ;
table_name IN ('EMP2', 'DEPT2');
c a
17. Za pomocą perspektywy USER_OBJECTS sáownika danych

e taáy
taá
wy
nych wyĞ
A
wietliüü nnazwy i typy
wyĞwietliü
y utworzone nnowe tabele
obiektów tabel EMP2 oraz DEPT2. ZauwaĪyü, Īe zostaáy
Ğwietli

i nowy indeks.
c l
SELECT
r abject_type
object_name, object_type
FROM
WHERE
O ly
user_objects
me LIKE 'EMP%'
object_name 'EMP
MP%'
OR

l & On
name LIKE 'D
object_name 'DEPT%';

n
abel
18. Zmodyfikowaü tabelĊ a e
oszĊ wykona
oszĊ
JeĞli czas na to pozwala, proszĊ wykonaüü na
belĊĊ EMP2.
EMP2. Dod
astĊpuj
astĊpująąące
nastĊpujące
daü kolumnĊ
daü
Dodaü kolumnĊ CO
ce zadan
zadania:
COMMISSION (prowizja) o typie danych
ecyzji
NUMBER, precyzji

t e r U s
Īe wartoĞüü prowizji jest do
Doda
D ü do kolum
cyzji 2 i skali 2.. Dodaü
atnia.
dodatnia.
kolumny COMMISSION wiĊzy gwarantujące,

I n
ALTER TAB
TABLE emp2

c l e ADD co
commission NUMBER(2,2)
CONSTRAINT my_emp_comm_ck CHECK (commission > 0);
CON

r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II A-8
ûwiczenie 2: Rozwiązania (kontynuacja)
19. Usunąü tabele EMP2 i DEPT2, tak aby nie mogáy byü odzyskane. Sprawdziü
zawartoĞü kosza.

DROP TABLE emp2 PURGE;


DROP TABLE dept2 PURGE;

SELECT original_name, operation, droptime


FROM recyclebin;

20. Utworzyü tabelĊ DEPT_NAMED_INDEX na podstawie podanego schematu.


Nadaü indeksowi kolumny PRIMARY KEY nazwĊ DEPT_PK_IDX.

Nazwa kolumny DEPTNO DNAME

Klucz gáówny Tak


Typ danych NUMBER VARCHAR2
DáugoĞü 4 30

m y
CREATE TABLE DEPT_NAMED_INDEX
(deptno NUMBER(4)
d e
PRIMARY KEY USING INDEX
(CREATE INDEX dept_pk_idx ON
c a
DEPT_NAMED_INDEX(deptno)),

e A
l
dname VARCHAR2(30));

a c
r
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II A-9
ûwiczenie 3: Rozwiązania
1. Wykonaü skrypt lab_03_01.sql znajdujący siĊ w folderze laboratorium,
aby utworzyü tabelĊ SAL_HISTORY.

2. WyĞwietliü strukturĊ tabeli SAL_HISTORY.

DESC sal_history

3. Wykonaü skrypt lab_03_03.sql znajdujący siĊ w folderze laboratorium,


aby utworzyü tabelĊ MGR_HISTORY.

4. WyĞwietliü strukturĊ tabeli MGR_HISTORY.

DESC mgr_history

5. Wykonaü skrypt lab_03_05.sql znajdujący siĊ w folderze laboratorium,


aby utworzyü tabelĊ SPECIAL_SAL.

6. WyĞwietliü strukturĊ tabeli SPECIAL_SAL.

DESC special_sal

m y
7. a.
-
Utworzyü zapytanie, które wykonuje nastĊpujące czynnoĞci:

d e
Pobiera z tabeli EMPLOYEES numery pracowników, daty zatrudnienia,
dnienia,
zarobki oraz numery kierowników wszystkich pracowników
mniejszych od 125. a
w o numerach

c
-
ich zarobki do tabeli SPECIAL_SAL.
e A
JeĞli zarobki są wiĊksze od 20 000 USD, to wstawiaa numery pracowników
pracown oraz

-
SAL_HISTORY.
c l nienia oraz zarob
Wstawia numery pracowników, daty zatrudnienia zarobki do tabeli

-
r a
Wstawia numery pracowników, numery
MGR_HISTORY.
mery kierowników oraz zarobki do tabeli

O ly
INSERT ALL

l & On
WHEN SAL > 20000 THEN
N

n a e
pecial_sal
ecial_sal VALUES
INTO special_sal VA (EMPI
(EMPID, SAL)
ELSE

t e r
NTO sal_history
INTO
U s
sal_history VALUES
VALUES(EMPID,HIREDATE,SAL)

I n
INTO mgr_history
mgr_h ry VAL
VALUES(EMPID,MGR,SAL)
SELECT employee_id
i EMPID, hire_date HIREDATE,

c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II A-10
ûwiczenie 3: Rozwiązania (kontynuacja)

salary SAL, manager_id MGR


FROM employees
WHERE employee_id < 125;

b. WyĞwietliü wiersze z tabeli SPECIAL_SAL.

SELECT * FROM special_sal;

c. WyĞwietliü wiersze z tabeli SAL_HISTORY.

SELECT * FROM sal_history;

d. WyĞwietliü wiersze z tabeli MGR_HISTORY.

SELECT * FROM mgr_history;

8. a.
aby utworzyü tabelĊ SALES_SOURCE_DATA.
m y
torium,
orium,
Wykonaü skrypt lab_03_08a.sql znajdujący siĊ w folderze laboratorium,

d e
b.
ATA.
aby wstawiü wiersze do tabeli SALES_SOURCE_DATA.
ATA.
c a
olderze laboratorium,
Wykonaü skrypt lab_03_08b.sql znajdujący siĊ w folderze laborator

e A
c.
c l RCE_DATA.
WyĞwietliü strukturĊ tabeli SALES_SOURCE_DATA.
RCE_DATA.

r a
data
DESC sales_source_data

O ly
d.

l & On
WyĞwietliü wiersze z tabeli
abeli SALES_S
_SOURCE_DATA
SOURCE_DATA
SALES_SOURCE_DATA.

T * FROM SAL
SELECT
n a e ALES_SOURCE_
SALES_SOURCE_DATA;

e.
t e r U s
Wykonaü skrypt lab_03_08c.sql
Wykonaü l _03_08c. znajdujący siĊ w folderze laboratorium,

I n
aby utworzyü
utworzyü tabelĊ
t SALES_INFO.
LES_

c l
f.e WyĞwietliü
WyĞ
WyĞ strukturĊ tabeli SALES_INFO.

r a DESC sales_info
O
Oracle Database 10g: Podstawy jĊzyka SQL II A-11
ûwiczenie 3: Rozwiązania (kontynuacja)
g. Utworzyü zapytanie, które wykonuje nastĊpujące czynnoĞci:
- Pobiera z tabeli SALES_SOURCE_DATA numery pracowników, numery
tygodni, wielkoĞci sprzedaĪy w poniedziaáki, wielkoĞci sprzedaĪy we wtorki,
wielkoĞci sprzedaĪy w Ğrody, wielkoĞci sprzedaĪy w czwartki oraz wielkoĞci
sprzedaĪy w piątki.

- Konstruuje przeksztaácenie zamieniające kaĪdy wiersz pobrany z tabeli


SALES_SOURCE_DATA na wiele wierszy w tabeli SALES_INFO.

Wskazówka: UĪyü przestawnej instrukcji INSERT.

INSERT ALL
INTO sales_info VALUES (employee_id, week_id, sales_MON)
INTO sales_info VALUES (employee_id, week_id, sales_TUE)
INTO sales_info VALUES (employee_id, week_id, sales_WED)
INTO sales_info VALUES (employee_id, week_id,
sales_THUR)
INTO sales_info VALUES (employee_id, week_id, sales_FRI)
SELECT EMPLOYEE_ID, week_id, sales_MON, sales_TUE,
sales_WED, sales_THUR,sales_FRI FROM sales_source_data;
ata;

m y
h. WyĞwietliü wiersze z tabeli SALES_INFO.

d e
SELECT * FROM sales_info;
c a
9. Dane o byáych pracownikach są zapisane w zwykáym
e A
m pliku tekstowym o nazwie

cl
emp.data. NaleĪy wstawiü do tabeli nazwiska i adresy poczty el elektronicznej
wszystkich (zarówno byáych, jak i obecnych)) pracowników. W tym celu naleĪy najpierw

r a
utworzyü zewnĊtrzną tabelĊ o nazwie EMP_DATA
MP_DATA A korzystającą
korzyst
yst z pliku Ĩródáowego

lab_03_09.sql. O ly
emp.dat, znajdującego siĊ w katalogu emp_dir. MoĪna
ogu emp_dir MoĪna
M
MoĪ na w tym celu uĪyü skryptu

l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II A-12
ûwiczenie 3: Rozwiązania (kontynuacja)

CREATE TABLE emp_data


(first_name VARCHAR2(20),
last_name VARCHAR2(20),
email VARCHAR2(30)
)
ORGANIZATION EXTERNAL
(
TYPE oracle_loader
DEFAULT DIRECTORY emp_dir
ACCESS PARAMETERS
(
RECORDS DELIMITED BY NEWLINE CHARACTERSET US7ASCII
NOBADFILE
NOLOGFILE
FIELDS
(first_name POSITION ( 1:20) CHAR,
last_name POSITION (22:41) CHAR,
email POSITION (43:72) CHAR)
)

y
LOCATION ('emp.dat') ) ;

10. NastĊpnie wykonaü skrypt lab_03_10.sql w celu utworzenia tabeli EMP_HIST.


a. ZwiĊkszyü rozmiar kolumny poczty elektronicznej do 45 znaków.
e m P_HIST..
MP_HIST

b. Scaliü dane w tabeli EMP_DATA utworzonej w poprzednim zadaniu d


daniu z danymi
a
w tabeli EMP_HIST. Przyjąü, Īe dane w tabeli zewnĊtrznej
c
ej EMP_DATA

A
najbardziej aktualne. JeĞli wiersz w tabeli EMP_DATA jest zgodny z wi
w tabeli EMP_HIST, to naleĪy uaktualniü kolumnĊ
A ssąą
wierszem
poczty elektronicznej
nĊĊ adresów poczt

c le
w tabeli EMP_HIST, tak aby jej wartoĞü odpowiadaáa
EMP_DATA. JeĞli wiersz w tabeli EMP_DATA
owiadaáaa wierszowi
owiadaá wierszo w tabeli
A nie pasuje do
d Īadnego wiersza w tabeli

r a DATA
EMP_HIST, to naleĪy go wstawiü doo tej drugiej tabeli.
tabe
bel Wiersze są uwaĪane za
tabel

O ly nazwis
pasujące wtedy, gdy zgadzają siĊĊ imiona i nazwiska
wiska pracowników.
pra

l
MERGE INTO EMP_HIST& On
MP_HIST f USING
US EMP_DATA h
EMP_DA

n
AND f.last_namea e
ON (f.first_name
rst_name = hh.first_name
h.first_nam
last_name = h.last_nam
h.last_name)

e r
PDATE SET f
UPDATE
t
THE
EN
WHEN MATCHED THEN

U s
email = h.email
f.email h

I n
WHEN NOT M
MATCHED THEN
INSERT (f.first_name,

c l e f.last_name,
f.email)

r a VALUES (h.first_name,
h.last_name,

O h.email);

Oracle Database 10g: Podstawy jĊzyka SQL II A-13


ûwiczenie 3: Rozwiązania (kontynuacja)
c. WyĞwietliü wiersze z tabeli EMP_HIST po scaleniu.

SELECT * FROM emp_hist;

11. Utworzyü tabelĊ EMP3 za pomocą skryptu lab_03_11.sql. W tabeli EMP3 zmieniü
numer dziaáu dla pracownika „Kochhar” na „60” i zatwierdziü zmianĊ. NastĊpnie zmieniü
numer dziaáu dla pracownika „Kochhar” na „50” i zatwierdziü zmianĊ. PrzeĞledziü
zmiany w wierszach pracownika „Kochhar” za pomocą funkcji Ğledzenia wersji wierszy.

SELECT VERSIONS_STARTTIME "START_DATE",


VERSIONS_ENDTIME "END_DATE", DEPARTMENT_ID
FROM EMP3
VERSIONS BETWEEN SCN MINVALUE AND MAXVALUE
WHERE LAST_NAME ='Kochhar';

m y
d e
c a
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II A-14
ûwiczenie 4: Rozwiązania
1. Utworzyü zapytanie wyĞwietlające nastĊpujące dane dotyczące pracowników podlegáych
kierownikom o identyfikatorach mniejszych od 120:
- numery kierowników;
- numery stanowisk oraz áączne zarobki na tych stanowiskach pracowników
podlegáych temu samemu kierownikowi;
- áączne zarobki tych kierowników;
- áączne zarobki tych kierowników, niezaleĪnie od stanowisk.

SELECT manager_id,job_id,sum(salary)
FROM employees
WHERE manager_id < 120
GROUP BY ROLLUP(manager_id,job_id);

2. Przyjrzeü siĊ wynikowi zadania 1. Za pomocą funkcji GROUPING utworzyü zapytanie


rozpoznające, czy wartoĞci NULL w kolumnach odpowiadających wyraĪeniom GROUP
BY powstaáy w wyniku dziaáania operatora ROLLUP.

SELECT manager_id MGR ,job_id JOB,


)
sum(salary),GROUPING(manager_id),GROUPING(job_id)
m y
FROM employees
WHERE manager_id < 120
d e
GROUP BY ROLLUP(manager_id,job_id);
c a
e
3. Utworzyü zapytanie wyĞwietlające nastĊpujące dane dotyczące
dotycząące
dotyczą A
ce pracowników
pracow podlegáych
podleg
l
kierownikom o identyfikatorach mniejszych od 120:
c
- numery kierowników;
r a
- numery stanowisk oraz áączne zarobkiarobki
robki na tych stanowiskach
stan
tanow pracowników

O ly erownikowi;
podlegáych temu samemu kierownikowi;

zy
yĪĪowe
- podsumowania krzyĪowe
l & On
rowników;
owników;
- áączne zarobki tych kierowników;
owe áącznych
cznychh zarobków
áąąącznych z na wwszystkich stanowiskach,
a e
niezaleĪnie od kierownika;
n
robki,
obki, niezale
- áączne zarobki,

t e r U s
niezaleĪ iee od stanowisk.
nie
niezaleĪnie
Īnie

I n
SELECT manager_id,
manag , job
job_id, sum(salary)

e
FROM e
employees

c l WHERE manager_id < 120

r a GR
GROUP BY CUBE(manager_id, job_id);

O
Oracle Database 10g: Podstawy jĊzyka SQL II A-15
ûwiczenie 4: Rozwiązania (kontynuacja)
4. Przyjrzeü siĊ wynikowi zadania 3. Za pomocą funkcji GROUPING utworzyü zapytanie
rozpoznające, czy wartoĞci NULL w kolumnach odpowiadających wyraĪeniom GROUP
BY powstaáy w wyniku dziaáania operatora CUBE.

SELECT manager_id MGR ,job_id JOB,


sum(salary),GROUPING(manager_id),GROUPING(job_id)
FROM employees
WHERE manager_id < 120
GROUP BY CUBE(manager_id,job_id);

5. UĪywając operatora GROUPING SETS utworzyü zapytanie wyĞwietlające


nastĊpujące grupy:
- department_id, manager_id, job_id;
- department_id, job_id;
- manager_id, job_id.
Zapytanie powinno obliczaü áączne zarobki dla kaĪdej z tych grup.

FROM employees
ary)
ry)
SELECT department_id, manager_id, job_id, SUM(salary)

m y
GROUP BY
, job_id),
GROUPING SETS ((department_id, manager_id,
d e
b_id));
_id));
(department_id, job_id),(manager_id,job_id));

c a
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II A-16
ûwiczenie 5: Rozwiązania
1. Zmodyfikowaü sesjĊ, nadając parametrowi NLS_DATE_FORMAT wartoĞü formatu
DD-MON-YYYY HH24:MI:SS.

ALTER SESSION SET NLS_DATE_FORMAT =


'DD-MON-YYYY HH24:MI:SS';

2. a. Utworzyü zapytania wyĞwietlające wartoĞci przesuniĊcia (TZ_OFFSET)


nastĊpujących stref czasowych:

US/Pacific-New
SELECT TZ_OFFSET ('US/Pacific-New') from dual;
Singapore
SELECT TZ_OFFSET ('Singapore') from dual;
Egypt
SELECT TZ_OFFSET ('Egypt') from dual;

b. Zmodyfikowaü sesjĊ, nadając parametrowi TIME_ZONE wartoĞü strefy czasowej


„US/Pacific-New”.

ALTER SESSION SET TIME_ZONE = '-7:00';

m y
c. WyĞwietliü wartoĞci CURRENT_DATE, CURRENT_TIMESTAMP
i LOCALTIMESTAMP tej sesji.
d e
Uwaga: Otrzymane wyniki mogą siĊ róĪniü w zaleĪnoĞci od daty
instrukcji. a
aty wykonania

c
SELECT CURRENT_DATE, CURRENT_TIMESTAMP,
e
_TIMESTAMP,
TIMESTAMP, A
c l
LOCALTIMESTAMP FROM DUAL;
L;
;

„Singapore”. r a
d. Zmodyfikowaü sesjĊ, nadając parametrowi TIME_ZO wartoĞü strefy czasowej
trowi TIME_ZONE

O ly
l & On
ALTER SESSION SET TIME_ZONE
ONE = '+8:00';
TIME_ZON '+8:00

e. WyĞwietliü wartoĞci
oĞci

n a e
ci CURRENT_ _DATE,, CURRE
CURRENT_DATE,
T_DATE CURRENT_TIMESTAMP

instrukcji.
ukcji.
kcji.
t e r
i LOCALTIMESTAMP
ESTAMP tej sesji.
Uwaga: Otrzymane wynik

U s
ses
wyniki
esji.
iki mogą siĊĊ róĪ
mogą si róĪniü
róĪ w zaleĪnoĞci od daty wykonania

I n
e
SELECT CURRENT_DATE, CURRENT_TIMESTAMP,

c l LOCALTIMESTAMP
LOCA FROM DUAL;

r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II A-17
ûwiczenie 5: Rozwiązania (kontynuacja)
Uwaga: Zwróciü uwagĊ na to, Īe w poprzednim zadaniu wszystkie wartoĞci
CURRENT_DATE, CURRENT_TIMESTAMP i LOCALTIMESTAMP zaleĪą od strefy
czasowej sesji.

3. Utworzyü zapytanie wyĞwietlające wartoĞci DBTIMEZONE i SESSIONTIMEZONE.

SELECT DBTIMEZONE,SESSIONTIMEZONE
FROM DUAL;

4. Utworzyü zapytanie pozwalające uzyskaü wartoĞci pola YEAR w kolumnie HIRE_DATE


tabeli EMPLOYEES dla wszystkich pracowników zatrudnionych w dziale 80.

SELECT last_name, EXTRACT (YEAR FROM HIRE_DATE)


FROM employees
WHERE department_id = 80;

5. Zmodyfikowaü sesjĊ, nadając parametrowi NLS_DATE_FORMAT wartoĞü formatu


DD-MON-YYYY.

y
ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YYYY';
6. Sprawdziü i wykonaü skrypt lab_05_06.sql w celu utworzenia tabeli
SAMPLE_DATES i wypeánienia jej danymi.
e m
a. Utworzyü zapytanie wyĞwietlające dane w tabeli.
a d
SELECT * FROM sample_dates;
A c
b.
l e
Zmodyfikowaü kolumnĊ DATE_COL, zmieniając iająącc jej typ na T
iają
Utworzyü zapytanie wyĞwietlające dane w tabeli.
c
TIMESTAMP.

r
ALTER TABLE sample_dates
a
SELECT * FROM sample_dates;
_dates;
date_col TIMESTAMP;
es MODIFY da

c. O ly
Spróbowaü zmodyfikowaü
waü typ danych kolumny
waü k na TIMESTAMP
& On
DATE_COL
DATE
DATE
siĊ stanie??
E. Co siĊ
WITH TIME ZONE.
l
E.

a e
n
ALTER TABLE
BLE sample_dates
sample_d MODIFY date_col
_dates MODIF

mo
Niee moĪ
t e r
AMP WITH TI
TIMESTAMP

U
na zmieni
moĪna
Īna s
IME ZONE;
TIM
TIME
ypu danych kolumny DATE_COL, poniewaĪ serwer
zmieniü typu

I n
Oracle nie zezwala
zezw
WITH TIMEZONE
TIM
na konwersjĊ
konwe typu TIMESTAMP na typ TIMESTAMP
za pomocą instrukcji ALTER.

c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II A-18
ûwiczenie 5: Rozwiązania (kontynuacja)
7. Utworzyü zapytanie wyĞwietlające nazwiska pracowników w tabeli EMPLOYEES oraz
informacje dotyczące weryfikacji pracowników. JeĞli pracownik zostaá zatrudniony
w roku 2000, to naleĪy wyĞwietlaü informacje „Needs Review”. W pozostaáych
wypadkach naleĪy wyĞwietlaü napis „not this year!”. Nowej kolumnie nadaü
nazwĊ Review i posortowaü wyniki wedáug kolumny HIRE_DATE.
Wskazówka: Do ustalania wymogów weryfikacji pracowników naleĪy uĪyü wyraĪenia
CASE z funkcją EXTRACT.

SELECT e.last_name
(CASE extract(year from e.hire_date)
WHEN 1998 THEN 'Needs Review'
ELSE 'not this year!'
END) AS "Review"
FROM employees e
ORDER BY e.hire_date;

8. Utworzyü zapytanie wyĞwietlające nazwiska i liczby przepracowanych lat dla wszystkich


pracowników. JeĞli pracownik jest zatrudniony od co najmniej 5 lat, wówczas naleĪy
wyĞwietlaü napis „5 years of service”. JeĞli pracownik byá zatrudniony od co
najmniej 10 lat, wówczas naleĪy wyĞwietlaü napis „10 years of service”. JeĞ
y
pracownik byá zatrudniony od co najmniej 15 lat, wówczas naleĪy wyĞwietlaü napis
m
JeĞli
Je li
Ğli

„15 years of service”. JeĞli Īaden z tych warunków nie jest speániony,
wyĞwietlaü napis „maybe next year!”. Posortowaü wyniki wedáug
d eiony, to naleĪy
ug kolumny
naleĪy
naleĪ y

HIRE_DATE. UĪyü tabeli EMPLOYEES.


Wskazówka: NaleĪy uĪyü wyraĪenia CASE i funkcji TO_YMINTERVAL.
c
MINTERVAL.
MINTERVAL. a
e A
(CASE
c l
SELECT e.last_name, hire_date,, sysdate,

hire_dater a
WHEN (sysdate -TO_YMINTERVAL('15-0'))>=
TO_YMINTERVA
e THEN '15
'1 yyears of service'
O ly
WHEN (sysdate
date -TO_YMINTERVAL('10-0'))>=
-TO_YM
-TO_YMI
MINTERVAL

WHEN
l & On
hire_date
re_date THEN
EN '10 years
ye of service'
TO_YMINTERVAL('5-0'))>=
N (sysdate - TO_YMINTE

n a e
hire_date
ate THEN '5 years of service'
hire_dat

t er
END) AS
U s ELSE 'maybe next year!'
"Awards"
S "Awards
FROM
I nemployees e;
emp e;

cl e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II A-19
ûwiczenie 6: Rozwiązania
1. Utworzyü zapytanie wyĞwietlające nazwiska, numery dziaáów oraz zarobki wszystkich
tych pracowników, których dziaáy i zarobki są takie same, jak dziaá i zarobki dowolnego
pracownika otrzymującego prowizjĊ.

SELECT last_name, department_id, salary


FROM employees
WHERE (salary, department_id) IN
(SELECT salary, department_id
FROM employees
WHERE commission_pct IS NOT NULL);

2. WyĞwietlaü nazwiska, nazwy dziaáów oraz zarobki wszystkich tych pracowników,


których zarobki i prowizje są takie same, jak zarobki i prowizja dowolnego pracownika
znajdującego siĊ w lokalizacji o numerze 1700.

SELECT e.last_name, d.department_name, e.salary


FROM employees e, departments d
WHERE e.department_id = d.department_id
AND (salary, NVL(commission_pct,0)) IN
(SELECT salary, NVL(commission_pct,0)
,0)
m y
FROM employees e, departments
s d
WHERE e.department_id = d.department_id
department_i
epartment_i
d e
AND d.location_id = 1700);
00);
c a
3. Utworzyü zapytanie wyĞwietlające nazwiska, daty zatrudnienia
e
udnienia oraz zar
rudnieniaA zarobki wszystkich

„Kochhar”.
c l
tych pracowników, którzy mają takie same zarobkii i prowizje, jak pracownik
p o nazwisku

r a
Uwaga: Nie wyĞwietlaü Kochhara w wynikach.
nikach.

SELECT last_name,O ly
me, hire_date,
ate, salary
hire_dat salar
FROM
& On
employees
oyees

l
salary,
WHERE (salary,
alary, NVL((commission_
NVL(commission_pct,0)) IN

n a e
(SELECT
LECT salary, NVL(commission_pct,0)
(SELE

t e r U s
FROM
F
WHERE l
employees
e
last_name = 'Kochhar')
la

n
last_name
AND last_n 'Kochhar';
e != 'Ko

e I
cl
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II A-20
ûwiczenie 6: Rozwiązania (kontynuacja)
4. Utworzyü zapytanie wyĞwietlające wszystkich tych pracowników, którzy zarabiają
wiĊcej niĪ wszyscy kierownicy sprzedaĪy (JOB_ID = 'SA_MAN'). Posortowaü wyniki
wedáug zarobków od najwyĪszych do najniĪszych.

SELECT last_name, job_id, salary


FROM employees
WHERE salary > ALL
(SELECT salary
FROM employees
WHERE job_id = 'SA_MAN')
ORDER BY salary DESC;

5. WyĞwietlaü numery, nazwiska oraz numery dziaáów wszystkich tych pracowników,


którzy mieszkają w miastach o nazwach zaczynających siĊ od litery T.

SELECT employee_id, last_name, department_id


FROM employees
WHERE department_id IN (SELECT department_id
FROM departments
WHERE location_id IN

m y
e
(SELECT location_id
on_id
FROM locations
WHERE city
ons
ity LIKE 'T%
'T%'));
a d
6. Utworzyü zapytanie wyĞwietlające wszystkich tych pracowników, A c którzy zarabiają
acowników, którz

c l e
wiĊcej niĪ wynoszą Ğrednie zarobki w ich dziaáach.. WyĞ
numery dziaáów oraz Ğrednie zarobki w poszczególnych
Wy
WyĞwietlaü
Ğwietla
dzia
zególnych dziaá
nazwiska, zarobki,
wietlaüü naz
ac Posortowaü wyniki
dziaáach.
áac

r a y dla kolumn pob


wedáug Ğrednich zarobków. OkreĞliü aliasy
káadowymi.
zgodnie z pokazanymi wynikami przykáadowymi.
ká adowymi.
pobieranych przez zapytanie

O ly
l & On
_name ename,
SELECT e.last_name ename
e, e.salary salary,

a e
_id
department_iid deptno, AVG(a.salary)
e.department_id A dept_avg
FROM

r n
employees e,
e employee

s
employees a

e
RE e.department_id
WHERE e.depart
rtment_id = a.department_id
AND

I n t U
e.sal y > (SEL
e.salary
M
FROM
(SELECT AVG(salary)
employees

c l e GR
WHERE department_id = e.department_id )
GROUP BY e.last_name, e.salary, e.department_id

r a ORDER BY AVG(a.salary);

O
Oracle Database 10g: Podstawy jĊzyka SQL II A-21
ûwiczenie 6: Rozwiązania (kontynuacja)
7. WyĞwietlaü wszystkich tych pracowników, którzy nie zajmują stanowisk nadzorczych.
a. Najpierw wykonaü to zadanie za pomocą operatora NOT EXISTS.

SELECT outer.last_name
FROM employees outer
WHERE NOT EXISTS (SELECT 'X'
FROM employees inner
WHERE inner.manager_id =
outer.employee_id);

b. Czy moĪna to zrobiü za pomocą operatora NOT IN? Jak to zrobiü lub dlaczego
nie moĪna?

SELECT outer.last_name
FROM employees outer
WHERE outer.employee_id
NOT IN (SELECT inner.manager_id
FROM employees inner);

m y
wartoĞü NULL, dlatego caáe zapytanie nie zwróci Īadnych wierszy. Wynika
d e
PodejĞcie alternatywne nie jest dobrym rozwiązaniem. Zapytanie podrzĊdne zwraca m.in.
stąąd,
ika to stąd,
stą d, Īe
Īe

c
wynikiem wszystkich warunków porównujących z wartoĞcią NULL jest wartoĞüa
wartoĞü NUL
NULL.
Dlatego, jeĞli zachodzi moĪliwoĞü zwrócenia w zbiorze wynikowym
moĪna uĪywaü operatora NOT IN zamiast NOT EXISTS.
e A
wym wartoĞci
wartoĞci
wartoĞ NULL, nie
ci NU

c l
r a
8. Utworzyü zapytanie wyĞwietlające nazwiskakaa wszystkich tych pracowników, którzy
zarabiają mniej niĪ wynoszą Ğrednie zarobki dziaáach.
dzia
obki w ich dziaá
áac
áac

O ly
SELECT last_name
FROM employees
l & On
yees outer

n a e
WHERE outer.salary
ter.salary < (SELECT AVG(inner.salary)
A

t e r U s FROM employees inner


WHERE inner.department_id
WH

I n = outer.department_id);

c l e
ra
O
Oracle Database 10g: Podstawy jĊzyka SQL II A-22
ûwiczenie 6: Rozwiązania (kontynuacja)
9. Utworzyü zapytanie wyĞwietlające nazwiska pracowników mających w swoich dziaáach
co najmniej jednego wspóápracownika zatrudnionego póĨniej, ale zarabiającego wiĊcej.

SELECT last_name
FROM employees outer
WHERE EXISTS (SELECT 'X'
FROM employees inner
WHERE inner.department_id =
outer.department_id
AND inner.hire_date > outer.hire_date
AND inner.salary > outer.salary);

10. Utworzyü zapytanie wyĞwietlające numery wszystkich pracowników, ich nazwiska oraz
nazwy ich dziaáów.
Uwaga: Do uzyskiwania nazw dziaáów naleĪy w instrukcji SELECT uĪyü skalarnego
zapytania podrzĊdnego.

SELECT employee_id, last_name,


(SELECT department_name
FROM departments d
m y
WHERE e.department_id =
d e
d.department_id) department
FROM employees e
c a
ORDER BY department;

e A
c l
11. Utworzyü zapytanie wyĞwietlające nazwy wszystkich
zystkich tych dziaáów,
dzia w których áączne

r a
zarobki przekraczają jedną ósmą áącznych
a zapytaniu nadaü nazwĊ SUMMARY.
páac
h ppá
áac caáej
ac w ca ej firmie.
caááej firm UĪyü klauzuli WITH,

O ly
WITH
l & On
summary AS (

n a e
SELECT d.departmen
d.department_name, SUM(e.salary) AS dept_total
ent_name, SU
FROM

t e r
M employees
s
s e, departments
departm
e.department_id
WHERE e.dep
U
d
ment_id = d.department_id

I n
GROUP BY d.department_name)
tm

c l e SELECT department_name, dept_total


FROM summary

r a WHERE
W dept_total > ( SELECT SUM(dept_total) * 1/8
FROM summary )
O ORDER BY dept_total DESC;

Oracle Database 10g: Podstawy jĊzyka SQL II A-23


ûwiczenie 7: Rozwiązania
1. Przyjrzeü siĊ nastĊpującym przykáadom danych wynikowych. Czy powstaáy one
w wyniku zapytaĔ hierarchicznych? WyjaĞniü dlaczego tak lub dlaczego nie.
Przykáad 1: To nie jest zapytanie hierarchiczne tylko zwykáe sortowanie
w porządku malejącym wedáug kolumny SALARY.

Przykáad 2: To nie jest zapytanie hierarchiczne, poniewaĪ dziaáa ono na


dwóch tabelach.

Przykáad 3: To jest na pewno zapytanie hierarchiczne, poniewaĪ wyĞwietla


strukturĊ drzewa, reprezentującą zaleĪnoĞci sáuĪbowe w tabeli EMPLOYEES.
2. Utworzyü raport obrazujący strukturĊ organizacyjną dziaáu w którym pracuje Mourgos.
WyĞwietlaü nazwiska i zarobki pracowników oraz numery dziaáów.

SELECT last_name, salary, department_id


FROM employees
START WITH last_name = 'Mourgos'
CONNECT BY PRIOR employee_id = manager_id;

najpierw jego bezpoĞredniego przeáoĪonego.


m ywietlaü
wietlaü
3. Utworzyü raport obrazujący hierarchiĊ przeáoĪonych pracownika „Lorentz”. WyĞwietlaü

SELECT last_name
d e
FROM employees
c a
WHERE last_name != 'Lorentz'

e
START WITH last_name = 'Lorentz' A
c l
CONNECT BY PRIOR manager_id = employee_
employee_id;

r a
4. Utworzyü raport z wciĊciami obrazującycy hierarchiĊ kiero
y hierarchiĊ row
kierowniczą, począwszy od

O ly
pracownika o nazwisku „Kochhar”. ”.. Wy
WyĞ wietlaüü naz
WyĞwietlaü
Ğwietla
oraz numery dziaáów. OkreĞliü aliasy dla kolumn
kolum
azwiska, numery
nazwiska, n kierowników
mn zgodnie z pokazanymi
p
wynikami przykáadowymi.
l & On
n a e
ame
me FORMAT A20
COLUMN name

t e r
T LPAD(last_
SELECT
A
s
_name, LENG
LPAD(last_name,
U
LENGTH(last_name)+(LEVEL*2)-

n
2, ) name, manager_id mgr,
2,'_')

e I men
department_id deptno

l
FROM employees
emp

ac START WITH last_name = 'Kochhar'

O r C
CONNECT
/
BY PRIOR employee_id = manager_id

COLUMN name CLEAR

Oracle Database 10g: Podstawy jĊzyka SQL II A-24


ûwiczenie 7: Rozwiązania (kontynuacja)
JeĞli czas na to pozwala, proszĊ wykonaü nastĊpujące zadanie:
5. Utworzyü raport obrazujący hierarchiĊ pracowników. Rozpocząü od osoby na
najwyĪszym szczeblu, pomijaü wszystkie osoby na stanowisku IT_PROG oraz
pomijaü pracownika o nazwisku „De Haan” i wszystkich jego podwáadnych.

SELECT last_name,employee_id, manager_id


FROM employees
WHERE job_id != 'IT_PROG'
START WITH manager_id IS NULL
CONNECT BY PRIOR employee_id = manager_id
AND last_name ! = 'De Haan';

m y
d e
c a
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II A-25
ûwiczenie 8: Rozwiązania
1. Utworzyü zapytanie wyszukujące w tabeli EMPLOYEES wszystkich tych pracowników,
których imiona zaczynają siĊ od „Ne” lub „Na.”

SELECT first_name, last_name


FROM employees
WHERE REGEXP_LIKE (first_name, '^N(e|a).');

2. Utworzyü zapytanie usuwające spacje z kolumny STREET_ADDRESS w tabeli


LOCATIONS i wyĞwietlające zmienione dane.

SELECT regexp_replace (street_address, ' ','')


FROM locations;

3. Utworzyü zapytanie zmieniające napis „St” na „Street” w kolumnie STREET_ADDRESS


w tabeli LOCATIONS. NaleĪy zachowaü ostroĪnoĞü, aby nie zmieniaü Īadnych wierszy,
które juĪ zawierają napis „Street”. WyĞwietlaü tylko zmienione wiersze.

SELECT REGEXP_REPLACE (street_address, 'St$',


'Street') FROM locations
WHERE REGEXP_LIKE (street_address, 'St');

m y
e
c ad
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II A-26
_____________________
Ddodatek B
Oopisy i dane
tabel
_____________________

m y
d e
ca
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
DIAGRAM ZWIĄZKÓW ENCJI

m y
d e
c a
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II B-2
Tabele w schemacie
SELECT * FROM tab;

m y
d e
c a
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II B-3
Tabela REGIONS
DESCRIBE regions

SELECT * FROM regions;

m y
d e
c a
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II B-4
Tabela COUNTRIES
DESCRIBE countries

SELECT * FROM countries;

m y
d e
c a
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II B-5
Tabela LOCATIONS
DESCRIBE locations;

SELECT * FROM locations;

m y
d e
c a
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II B-6
Tabela DEPARTMENTS
DESCRIBE departments

SELECT * FROM departments;

m y
d e
c a
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II B-7
Tabela JOBS
DESCRIBE jobs

SELECT * FROM jobs;

m y
d e
c a
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II B-8
Tabela EMPLOYEES
DESCRIBE employees

m y
d e
c a
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II B-9
Tabela EMPLOYEES
W pokazanym zestawieniu nagáówki kolumn COMMISSION_PCT, MANAGER_ID
i DEPARTMENT_ID zostaáy zmienione na COMM, MGRID i DEPTID po to, aby wartoĞci
w tabeli mogáy siĊ zmieĞciü na jednej stronie.
SELECT * FROM employees;

m y
d e
c a
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II B-10
Tabela EMPLOYEES (kontynuacja)

m y
d e
c a
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II B-11
Tabela EMPLOYEES (kontynuacja)

m y
d e
c a
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II B-12
Tabela JOB_HISTORY
DESCRIBE job_history

SELECT * FROM job_history;

m y
d e
c a
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II B-13
m y
d e
ca
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Tworzenie zaawansowanych skryptów

m y
d e
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Cele

Zagadnienia przedstawione w ramach tego


dodatku pozwalają:
• Opisywaü rodzaje problemów rozwiązywanych
dziĊki uĪyciu kodu SQL generującego
skrypty SQL.
• Tworzyü kod generujący skrypt z instrukcjami
DROP TABLE.
• Tworzyü kod generujący skrypt z instrukcjami
INSERT INTO.

m y
d e
C-2 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Cele
e A
c l
W tym dodatku omówiono pisanie kodu SQL generującego
ącego skrypty SQL.
jącego S

r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II C-2
Korzystanie z jĊzyka SQL
do tworzenia skryptów SQL

• JĊzyk SQL moĪe byü uĪywany do tworzenia


skryptów SQL.
• Sáownik danych:
– jest kolekcją tabel i perspektyw zawierających
informacje o bazie danych;
– jest tworzony i utrzymywany przez serwer Oracle.

SQL Sáownik danych

Skrypt SQL
m y
d e
C-3 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Korzystanie z jĊzyka SQL do tworzenia skryptów SQL

e A
c l
JĊzyk SQL jest wydajnym narzĊdziem do generowania innych h instrukcji SQL. Takie wykorzystanie
jĊzyka SQL polega zazwyczaj na tworzeniu pliku skryptu. Kod SQL tworz tworzący instrukcje SQL
ma nastĊpujące zalety:
• pozwala uniknąü powtarzania kodu;
r a
• uzyskuje dostĊp do danych w sáowniku danych;
O ly
• usuwa obiekty bazy danych lub ponownieownie je tworzy;

l & On
• tworzy dynamiczne predykaty zaleĪneleĪne od parametrów.
Przykáady prezentowane w ramach tej lekcji dotycz
parametrtrów.
dotycząą pobierania dany
danych ze sáownika danych. Sáownik

tworzona i utrzymywana przez


a e
danych jest kolekcją tabel i perspektyw
spektyw zawierających
zez serwer Oracle.
n Oracle
ących informacje o bazie danych. Kolekcja ta jest
zawierajjących
le. WáaĞcicielem
WáaĞcicielem wszystkich
w tabel w sáowniku danych jest

serwera Oracle, uprawnienia


i informacje kontrolne.
t e r
uĪytkownik SYS. WĞródd informacji przec

U sprzechowywanych
awnienia nadane tytym
echowywanych w sáowniku danych są nazwy uĪytkowników
ym uuĪytkownikom,
Īytkowniko nazwy obiektów bazy danych, wiĊzy tabel
Perspektywy znajdujące
trolne. Perspektyw najdujące siĊ w sáowniku danych są podzielone na cztery
ące si

na przewidywany
I n
kategorie. PrzynaleĪnoĞü
zynaleĪnoĞü do dadanej kategorii
idywany sposób uĪywania
u
jest wyznaczona przez przedrostki nazw, które wskazują
orii jes
danego obiektu.

c l e
Przedrostek Opis

r a USER_ Oznacza informacje o obiektach, których wáaĞcicielem jest dany uĪytkownik.

O ALL_

DBA_
Oznacza informacje o obiektach, do których uĪytkownik ma prawa dostĊpu, oraz o obiektach,
których wáaĞcicielem jest dany uĪytkownik.
Oznacza informacje o uĪytkownikach z uprawnieniami DBA pozwalającymi na uzyskiwanie
dostĊpu do dowolnego obiektu bazy danych.
V$_ Oznacza informacje na temat wydajnoĞci i blokad serwera bazy danych, dostĊpne tylko dla
administratora bazy danych.

Oracle Database 10g: Podstawy jĊzyka SQL II C-3


Tworzenie podstawowego skryptu

SELECT 'CREATE TABLE ' || table_name ||


'_test ' || 'AS SELECT * FROM '
|| table_name ||' WHERE 1=2;'
AS "Create Table Script"
FROM user_tables;

m y
d e
C-4 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Skrypt podstawowy
e A
c l
Przykáad na slajdzie tworzy raport z instrukcjami CREATE
EATE TABLE dla d wszystkich tabel

r a
wáasnych danego uĪytkownika. KaĪda instrukcja CREATE TABLE
skáadającej siĊ z nazwy tabeli Ĩródáowej i przyrostka
zyrostka _test
TABL tworzy tabelĊ o nazwie
t oraz
o o strukturze

TABLE_NAME perspektywy USER_TABLES O ly


odpowiadającej istniejącej tabeli. Nazwy istniejących
y istniej ących
_TABLES sáownika
sáowni
abel ssąą pobierane
ących tabel
tab
nika danych.
po z kolumny

l & On
NastĊpną czynnoĞcią bĊdzie usprawnienie dziaáania
sprawnienie dzia iaáania raportu i zautomatyzowanie caáego
procesu.
n a e
Uwaga: MoĪna tworzyü

t r
obiektów w baziee danych. Cz
U
CzĊsto s
zyü zapytania dl
e
dla tabel sáownika
Ċsto uĪywanymi
sáownik danych w celu znalezienia wáasnych
uĪywanymi obiektami
ob sáownika danych są nastĊpujące
perspektywy:

y
I n
SER_TABLES: w
USER_TABLES: wyĞwietla opisy wáasnych tabel uĪytkownika;


c l e
USER_OBJECTS: wyĞwietla wszystkie obiekty wáasne uĪytkownika;
USER_OBJEC
USER_TAB_PRIVS_MADE: wyĞwietla wszystkie uprawnienia do wáasnych obiektów
USER_TA

r auuĪytkownika
Īytko nadane innym osobom;
USER_COL_PRIVS_MADE: wyĞwietla wszystkie uprawnienia do kolumn wáasnych
O
• U
obiektów uĪytkownika.

Oracle Database 10g: Podstawy jĊzyka SQL II C-4


Kontrolowanie Ğrodowiska systemowego

SET ECHO OFF Nadawanie


SET FEEDBACK OFF zmiennym
SET PAGESIZE 0 systemowym
odpowiednich
wartoĞci.
SPOOL dropem.sql
INSTRUKCJA SQL
SPOOL OFF
Przywracanie
SET FEEDBACK ON
zmiennym
SET PAGESIZE 24
systemowym
SET ECHO ON
wartoĞci
domyĞlnych.

m y
d e
C-5 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Kontrolowanie Ğrodowiska systemowego
e A
c l
Aby wykonywaü wygenerowaną instrukcjĊ SQL, trzeba eba ją
ją umieĞciü
umieĞciü w pliku kolejki, który

r a
moĪe byü nastĊpnie uruchamiany. Trzeba teĪ zaplanowaü
planowaü oczyszczanie
wyników oraz upewniü siĊ, Īe wyáącza siĊ wyĞwietlanie
oczysz
wyĞwietlanie elementów,
elem
eme
wygenerowanych
takich jak nagáówki,

iSQL*Plus. O ly
komunikaty zwrotne, paginy itp. Wszystkie moĪna
tkie te zadania mo
m Īna wykonywaü
wy za pomocą poleceĔ

l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II C-5
Zasady ogólne

SET ECHO OFF


SET FEEDBACK OFF
SET PAGESIZE 0

SELECT 'DROP TABLE ' || object_name || ';'


FROM user_objects
WHERE object_type = 'TABLE'
/

SET FEEDBACK ON
SET PAGESIZE 24
SET ECHO ON

m y
de
C-6
a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c
Zasady ogólne
e A
c l
Dane wynikowe polecenia pokazanego na slajdzie są zapisywane w pliku
dropem.sql za pomocą polecenia „Wyniki” z menu „„Plik”
p o nazwie
Plik” ĞĞrodowiska iSQL*Plus. Plik

r a
ten zawiera nastĊpujące dane. Aby wykonaü utworzony skrypt,
ypt naleĪy w iSQL*Plus znaleĨü
skryp

O ly
plik skryptu, wczytaü go i uruchomiü.

l & On
n a e
t e r U s
I n
c l e
r a
OUwa
Uwaga: DomyĞlnie pliki skryptów są umieszczane w kolejce w folderze
ORACLE_HOME\ORANT\BIN systemu Windows NT.

Oracle Database 10g: Podstawy jĊzyka SQL II C-6


Umieszczanie zawartoĞci tabeli w pliku

SET HEADING OFF ECHO OFF FEEDBACK OFF


SET PAGESIZE 0

SELECT
'INSERT INTO departments_test VALUES
(' || department_id || ', ''' || department_name ||
''', ''' || location_id || ''');'
AS "Insert Statements Script"
FROM departments
/

SET PAGESIZE 24
SET HEADING ON ECHO ON FEEDBACK ON
m y
d e
C-7
a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c
Umieszczanie zawartoĞci tabeli w pliku
e A
c l
WartoĞci wierszy tabeli trzeba czasem umieĞciü w pliku iku tekstowym w formacie zgodnym

r a
z instrukcją INSERT INTO VALUES. Utworzony ony skrypt moĪe
moĪe byü nastĊpnie uruchomiony
zostaáa ona przypadkowo
w celu wstawienia danych do tabeli, gdyby np. zostaáa prz
pr usuniĊta.

O ly
Przykáad na slajdzie generuje instrukcje INSERT dla ta abeli DEPARTMENTS_TEST
tabeli DEPA

l & On
i umieszcza je w pliku data.sql za pomocą
ZawartoĞü pliku skryptu data.sql
pomocą opcji
nast
opcj
cji „„File
stĊpująca:
ąca:
a.sql jest nastĊpująca:
File Output”
Outpu Ğrodowiska iSQL*Plus.

INSERT
n a e
INTO departments_test
departments_ _test VALUES
(10,
INSERT
t e r U s
'Administration',
on', 1700);
ministration
INTO departments_test
departm nts_test V VALUES
(20,
0,
INSERT
NSERT
In 'Marketing', 1800);
'Marketin
INTO d
800);
departments_test
s VALUES

c l e
(50,
INSERT
'Shipping',
'Sh 1500);
INTO departments_test VALUES

ra
(6
(60, 'IT', 1400);
...

O
Oracle Database 10g: Podstawy jĊzyka SQL II C-7
Umieszczanie zawartoĞci tabeli w pliku

Plik Ĩródáowy Wynik


'''X''' 'X'

'''' '

''''||department_name||'''' 'Administration'

''', ''' ','

''');' ');

m y
d e
C-8 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Umieszczanie zawartoĞci tabeli w pliku (kontynuacja)
e ja) A
c l
W przykáadzie na poprzednim slajdzie moĪna dostrzecc duĪą liczbĊĊ ap
duĪąą liczb apostrofów. Zbiór

r a
czterech apostrofów tworzy jeden apostrof w instrukcji
pamiĊtaü, Īe wszystkie napisy i daty muszą byü
trukcji wynikowej.
byü ujĊte
wynikow NaleĪy przy tym
ujĊte w apostrofy.
apos
ostro

O ly
Aby w napisie wyĞwietlaü apostrof, trzeba
eba go poprzedziü
dziü jeszcze jednym apostrofem.
poprzedz

l & On
Na przykáad w piątym przykáadzie na slajdzie zewnĊtrzne
napisu. Drugi apostrof jest przedrostkiem
wnĊtrzne apostrofy
zewn
edrostkiem potrzebnym
apostro odnoszą siĊ do caáego
rzebnym do wyĞwietlenia
potrz wyĞ trzeciego apostrofu.
W wyniku uzyskuje siĊ wiĊc
n a e
Ċc jeden apostrof,
apostro nastĊpuje nawias i Ğrednik.
rof, po którym na

te r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II C-8
Tworzenie dynamicznych predykatów

COLUMN my_col NEW_VALUE dyn_where_clause

SELECT DECODE('&&deptno', null,


DECODE ('&&hiredate', null, ' ',
'WHERE hire_date=TO_DATE('''||'&&hiredate'',''DD-MON-YYYY'')'),
DECODE ('&&hiredate', null,
'WHERE department_id = ' || '&&deptno',
'WHERE department_id = ' || '&&deptno' ||
' AND hire_date = TO_DATE('''||'&&hiredate'',''DD-MON-YYYY'')'))
AS my_col FROM dual;

SELECT last_name FROM employees &dyn_where_clause;

m y
d e
C-9 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Tworzenie dynamicznych predykatów
e A
c l
Przykáad na slajdzie generuje instrukcjĊ SELECT wyĞwietlającą
wietlającącą dane o wszystkich tych

dynamicznie tworzy klauzulĊ WHERE.


r a
pracownikach konkretnego dziaáu, którzy zostali zatrudnieni
zatrudnieni w konkretnym
ko dniu. Skrypt

O ly
Uwaga: Po umieszczeniu w odpowiednim
polecenia UNDEFINE do jej usuniĊcia. ia.
zmiennej
im miejscu zmieiennej uuĪytkownika,
Īy trzeba uĪyü

l & On
Pierwsza instrukcja SELECT monituje uĪytkownikaownika o podanie numeru dziaáu. JeĞli nie
uĪytkow
zostanie podany Īaden numer,
n a e
mer, to funkcja DECODE
D zastąpi
ąpi go wartoĞcią
zastąpi warto NULL. NastĊpnie
uĪytkownik jest monitowany

t e r
owany o podanie
podane, to data zatrudnienia
U
podanie daty zatrudnienia.

wygenerowanaa dynamiczna klauzula


s
zostanie
rudnienia zostan
zatrudnie
zastąpiona
nie zast ąpiona wartoĞcią
ąpiona w
warto
I znów, jeĞli nic nie zostanie
NULL. To spowoduje, Īe
kla la WHERE równieĪ bĊdzie pusta, w wyniku tego druga

wiersze.
e. I n
instrukcja SELECT (korzystająca
(korzys z tego
go wwarunku) pobierze z tabeli EMPLOYEES wszystkie

l e
Uwaga: Klauzula NEW_V[ALUE]definiuje zmienną do przechowywania wartoĞci kolumny.
c
r asiĊ odwoáaü
Aby siĊ odwo do tej zmiennej, naleĪy uĪyü polecenia TTITLE. WartoĞü zmiennej
NEW_VALUE moĪe posáuĪyü do utworzenia paginy zawierającej wartoĞü kolumny lub datĊ.
NEW_VAL

OP
tak wypadku nazwĊ kolumny trzeba umieĞciü w poleceniu BREAK czynnoĞci SKIP
W takim
PAGE. Zmienna nie moĪe zawieraü znaku „#”. Sáowo kluczowe NEW_VALUE jest przydatne
przy tworzeniu raportów typu nadrzĊdny-szczegóáowy, w których kaĪda strona rozpoczyna
siĊ od innego wiersza nadrzĊdnego.

Oracle Database 10g: Podstawy jĊzyka SQL II C-9


Tworzenie dynamicznych predykatów (kontynuacja)
Uwaga: W tym wypadku data zatrudnienia musi byü podana w formacie DD-MON-YYYY.
Pokazana na poprzednim slajdzie instrukcja SELECT moĪe byü interpretowana
w nastĊpujący sposób:
IF (<<deptno>> is not entered) THEN
IF (<<hiredate>> is not entered) THEN
return empty string
ELSE
return the string ‘WHERE hire_date =
TO_DATE('<<hiredate>>', 'DD-MON-YYYY')’
ELSE
IF (<<hiredate>> is not entered) THEN
return the string ‘WHERE department_id =
<<deptno>> entered'
ELSE
return the string ‘WHERE department_id =
<<deptno>> entered
AND hire_date = TO_DATE(' <<hiredate>>', 'DD-MON-YYYY')’
END IF
Zwracany napis staje siĊ wartoĞcią zmiennej DYN_WHERE_CLAUSE, która jest uĪywana
w drugiej instrukcji SELECT.
Pierwsza instrukcja pokazana na slajdzie monituje uĪytkownika o podanie wartoĞci
dla zmiennych DEPTNO i HIREDATE:

m y
d e
c a
e A
c l
r a
O ly
Jest generowana nastĊpująca wartoĞü MY_COL:

l & On
n a e
e r s
Druga instrukcja pokazana na slajdzie generuje nastĊpujące dane wynikowe:
t U
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II C-10
Podsumowanie

W tym dodatku przedstawiono nastĊpujące


zagadnienia:
• Tworzenie kodu SQL generującego inny
skrypt SQL.
• Korzystanie ze sáownika danych w plikach
skryptów.
• Umieszczanie danych wynikowych w plikach.

m y
d e
C-11 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Podsumowanie
e A
c l
Kod SQL moĪe byü uĪywany do generowania skryptu u SQL. Skrypty takie pomagają unikaü

r a
wielokrotnego pisania tego samego kodu, usuwaüü obiekty lub ponownie
uzyskiwaü pomoc ze sáownika danych i generowaü
erowaü dynamiczne
pon je tworzyü,
czn predykaty zaleĪne od
dynamicz
parametrów.
O ly
l
przez instrukcje SQL oraz do wy& On
Polecenia Ğrodowiska iSQL*Plus mogą
mogą byü
wyáączania
byü uĪywane
ane do zapisywania
uĪywan
czania wyĞwietlania
áąączania wyĞwietlania
w
zapisywa raportów generowanych
elementów,
elemen takich jak nagáówki,
komunikaty zwrotne itp.
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II C-11
m y
d e
ca
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Skáadniki architektury Oracle

m y
d e
a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Cele

Zagadnienia przedstawione w ramach tego


dodatku pozwalają:
• Opisywaü architekturĊ serwera Oracle i jego
gáówne skáadniki.
• Wymieniaü struktury biorące udziaá w áączeniu
uĪytkownika z instancją Oracle.
• Wymieniaü kolejne etapy przetwarzania:
– zapytaĔ;
– instrukcji DML;
– zatwierdzeĔ.

m y
d e
D-2 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Cele
e A
c l
W tym dodatku omówiono architekturĊ serwera Oracle.cle. Opisano pliki,
pliki procesy i struktury

instrukcji SQL.
r a
pamiĊci biorące udziaá w ustanawianiu poáączeniaa z bazą
bazą danych i wykonywaniu

O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II D-2
Architektura bazy danych Oracle:
omówienie

BazĊ danych Oracle stanowią dwa gáówne skáadniki:


• baza danych czyli struktury fizyczne;
• instancje czyli struktury pamiĊci.

m y
d e
D-3 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Architektura bazy danych Oracle: omówienie
e A
c l
Baza danych Oracle jest zbudowana z dwóch gáównych skáadników
ych sk áadników — z instancji i samej
bazy danych.
r a
• Baza danych skáada siĊ z fizycznych plików,lików, takich jak:
jak
ak:

- Pliki dziennika powtórzeĔ O ly


- Plik kontrolny, w którym jestt przec
przechowywana
howywana
zawierające
Ĕ zawieraj ące in
konfiguracja bazy danych
na konfig
informacje wymagane
wym przy odzyskiwaniu
bazy danych.
l & On ące

- Plik parametrów
n a e
- Pliki danych, w których znajduj
znajdują
zawierający
trów zawieraj
ją siĊ
siĊ wszystkie dane wáaĞciwe.
cy parametry kontroluj
kontrolujące
ko rozmiar i wáaĞciwoĞci
instancji.
- Plik haseá
i.
t e r U
haseá zawierający
zawieraj
s
ąący

hasáo
asáo super uĪytkownika (uĪytkownika SYSDBA).
• Instancja skáada
ncja sk
I n
áada siĊ
siĊ z globalnego obszaru systemowego (SGA, ang. System Global
o ob

c l e
Area) oraz z proc
procesów serwera wykonujących zadania wewnątrz bazy danych.

r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II D-3
Fizyczna architektura bazy danych

Pliki kontrolne

Pliki BieĪące pliki


danych dziennika powtórzeĔ

Plik parametrów Plik haseá Pliki archiwalne


dziennika
m y
d e
D-4 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Fizyczna architektura bazy danych
e A
c l
Pliki wchodzące w skáad bazy danych Oracle są podzielone nastĊpujące
zielone na nast Ċp kategorie:

r a
• Pliki kontrolne: Zawierają dane o samej bazie
Pliki te są niezbĊdne dla bazy danych i bez nich nie jest
inaczej zwane metadanymi.
azie danych, inac
moĪliwe otworzenie plików
est m

O ly
danych w celu uzyskania dostĊpu do informacji prz
• Pliki danych: Zawierają wáaĞciwe
przechowywanych
rzechowy
ciwe dane przechowywane
w bazie danych.
chowywane w bbazie danych.
przech

l & On
• BieĪące pliki dziennika powtórzeĔ:
powtórzeĔ: Pozwalają
zwalają instancji na odzyskiwanie bazy danych.
Pozw

n a e
JeĞli zdarzy siĊ, Īe bazaza danych zostanie
instancja bĊdzie w stanie odtworzyü
anie uszkodzona,
zostan
rzyü bazĊ
odtworzy
uszkodzona ale nie utraci plików danych, to
bazĊ danych za pomocą informacji umieszczonych
w tych plikach.
Istnieją teĪ inne
h.
t e r U s
ne pliki, które nie
ni są formalnie
ormalnie czĊĞcią bazy danych, ale są istotne do jej
poprawnego
I n
ego funkcjonowania.
funkcjonowa Są to nastĊpujące
st pliki:

c le
• Plik parametrów:
parametró Jest uĪywany do okreĞlania konfiguracji instancji podczas jej
uruchamiania.
uruchamian

ra
• Plik haseá:
ha Pozwala uĪytkownikom na zdalne áączenie siĊ z bazą danych i
wykonywanie zadaĔ administracyjnych.
wy
O • Pliki archiwalne dziennika: Zawierają caáą historiĊ powtórzeĔ generowanych przez
instancjĊ. Pliki te pozwalają na odzyskiwanie bazy danych. Za pomocą tych plików oraz
kopii zapasowej bazy danych, jest moĪliwe odzyskanie utraconych plików danych.

Oracle Database 10g: Podstawy jĊzyka SQL II D-4


Pliki kontrolne

• Zawierają informacje o fizycznej strukturze


bazy danych.
• Są zwielokrotnione, co chroni przed ich utratą.
• Są odczytywane w chwili uruchamiania.

Pliki kontrolne

m y
d e
D-5 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Pliki kontrolne
e A
c l
Gdy uruchamia siĊ instancjĊ i montuje bazĊ danych, wówczas jest od odczytywany plik

bazĊ danych.
r a
kontrolny. Informacje zapisane w tym pliku wskazują,
azują, stanowią
ą, które pliki fizyczne stanowi

O ly
Gdy do bazy danych są dodawane nowee pliki, wówczas kontrolny jest automatycznie
as plik kont
aktualizowany.
Lokalizacja plików kontrolnych
l & On okreĞlana
ch jest okre Ğlana parametr inicjalizacyjny.
na przez paramet

n a e
Aby chroniü siĊ przed uszkodzeniem
szkodzeniem bazybaz spowodowanym utratą pliku kontrolnego,
azy danych spow
naleĪy powielaü plik
OkreĞlając za pomocą
t e r U s
k kontrolny na przynajmniej
pr
omocą parametru inicjalizacyjnego
trzech
trz
niccjalizacyjnego
jalizacyjn
róĪnych urządzeniach fizycznych.
wielokrotne wystĊpowanie
wyst plików,
umoĪliwia siĊ
I n
iĊ serwerowi ba
bazy danychh Oracle
Ora obsáugĊ wielu kopii pliku kontrolnego.

cl e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II D-5
Pliki dziennika powtórzeĔ

• Rejestrują zmiany dokonywane w bazie danych.


• Są zwielokrotnione, co chroni przed ich utratą.

Bufor dziennika
powtórzeĔ

Proces
zapisywania
dziennika
LGWR

Grupa 1 Grupa 2 Grupa 3

m y
d e
D-6 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Pliki dziennika powtórzeĔ
e A
c l
Pliki dziennika powtórzeĔ są uĪywane do rejestrowania wprowadzanych w bazie
nia zmian wprow

r a
danych w wyniku transakcji i wewnĊtrznych dziaáaĔ
one bazĊ danych przed utratą spójnoĞci spowodowaną
áaĔ serwera bazy danych Oracle. Chronią
wodowaną báĊdami ami na skutek przerw w zasilaniu,
báĊdam

O ly
báĊdów dyskowych itp. Pliki dzienników powtórzeĔĔ powinny
w powtórze
zabezpieczenia znajdujących siĊ w nich informacji na
pow
n wypadek w
byü powielane w celu
winny by
wystąpienia báĊdów
dyskowych.
l & On
Dziennik powtórzeĔ skáadaa si
n a e
siĊĊ z grup plików.
plikó KaĪda
ków. Ka Īda grupa
grup zawiera plik dziennika powtórzeĔ
i jego powielone kopie.
do tej samej grupy,
zapisuje informacje t e r
e. Wszystkie id
kaĪda
y, a ka
dotyczące
rmacje dotycz U s identyczne

ące operacji
en
entyczne kopie ppliku dziennika są uznawane za naleĪące
numerowana. Proces zapisywania dziennika (LGWR)
Īda z grup jest numerowa
acji bazodanowych
bazod powtórzeĔ do
z bufora dziennika powtórze
odpowiedniej
In
dniej grupy dziennika
dzien
ące
powtórzeĔ
ze do momentu zapeánienia danego pliku dziennika

c l e
lub pojawienia
ojawienia siĊ
siĊ Īądania
Īąd
dziennika, a zapisywanie
zapis
przeáączenia dziennika. NastĊpuje wówczas przeáączenie
jest kontynuowane w nastĊpnej grupie plików. Grupy dziennika

a
powtórzeĔ
powtórzeĔ są
r
s uĪywane cyklicznie.

O
Oracle Database 10g: Podstawy jĊzyka SQL II D-6
Przestrzenie tabel i pliki danych

• PrzestrzeĔ tabel skáada siĊ z co najmniej


jednego pliku danych.
• Pliki danych mogą naleĪeü do tylko jednej
przestrzeni tabel.

Plik danych 1 Plik danych 2

PrzestrzeĔ
tabel USERS
m y
d e
D-7 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Przestrzenie tabel i pliki danych
e A
c l
Baza danych jest podzielona na logiczne jednostki przechowujące
rzechowująceące dane
dan zwane przestrzeniami

r a
tabel. SáuĪą one do grupowania wzajemnie powiązanych
danych jest logicznie zbudowana z co najmniej
ązanych struktur logicznych. Ka
ązanych
przestrzeni
KaĪda baza
strz tabel. Dla kaĪdej
niej jednej przestr

przechowywania danych wszystkich O ly


przestrzeni tabel jest jawnie tworzony coo najmniej
struktur
h strukt
jmniej jedenn plik da
naajmniej
tur
ur logicznych
logiczn
danych
n w celu fizycznego
znych danej przestrzeni
prz tabel.

l & On
Uwaga: MoĪna teĪ tworzyü przestrzenie
zestrzenie tabel bigfile,
b
bigfile , czyli
czy przestrzenie tabel z jednym,
bardzo duĪym ( maksymalnie
n a e
lnie 4-miliardy bloków)
b plikiem danych. Tradycyjne domyĞlne
przestrzenie danych typu
nie mogą byü aĪ tak
e r
ypu smallfile
duĪe.
k du
t s
Īe. WiĊcej
moĪna znaleĨüü w PodrĊczniku
e mogą
mogą zawieraü
zawiera wiĊcej plików danych, które jednak
WiĊcej informacji na ttemat przestrzeni tabel typu bigfile
U
PodrĊczniku administratora
nistrator bazy danych.
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II D-7
Segmenty, obszary i bloki

• Segmenty naleĪą do przestrzeni tabel.


• Segment skáada siĊ ze zbioru obszarów.
• Ekstent jest zbiorem bloków danych.
• Bloki danych są odwzorowywane na bloki
systemu operacyjnego.

Segment Ekstenty Bloki


danych
Bloki systemu
mu
operacyjnego
jnego
m y
d e
D-8 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Segmenty, ektenty i bloki
e A
c l
Obiekty bazy danych, takie jak tabele i indeksy, są przechowywane
owywane w przestrzeni
przest tabel jako segmenty.

r a
KaĪdy segment zawiera co najmniej jeden ekstent. Z kolei ekstent sk
danych. Oznacza to, Īe kaĪdy obszar moĪe istnieü tylko w jednym
skáada
áad siĊ z ciągáych bloków
m pliku
p danych. Bloki danych są

O ly
najmniejszymi jednostkami wejĞcia–wyjĞcia w bazie danych.
Gdy baza danych wysyáa do systemu operacyjnego
eracyjnego Īą dani
nie pobrania zbioru
Īądanie
ądanie zbi bloków danych, wówczas

l & On rz
system operacyjny odwzorowuje te bloki danych na rzeczywiste bloki systemu operacyjnego na
konkretnym noĞniku danych. To
o te
w bazie danych. Oznacza to
n a e
o sprawia, ĪĪee niee trzeba
Ī, ĪĪee plik dany
teĪ,
t
nych moĪe
danych moĪe by
w ogóle myĞleü
byüü prz
m o fizycznej lokalizacji danych
przechowywany w macierzach dyskowych
na wielu dyskach.
Rozmiar bloku danych
t e r U s
anych jest ustalany w momencie twtworzenia bazy danych. Dla wiĊkszoĞci baz danych
Ċdzie domy
odpowiedni bĊdzie
I n
ją hurtowni danyc
z aplikacją
Ğlny rrozmiar bloku
domyĞlny oku wy
wynoszący 8 K. JeĞli baza danych wspóápracuje
danych, mającą bardzo duĪe tabele i indeksy, to moĪe byü korzystniejsze

c l e
kszenie wielko
zwiĊkszenie Ğci bloku. JeĞli baza danych wspóápracuje z aplikacją transakcyjną, w której
wielkoĞci
odczyty i zapisy oodbywają siĊ bardzo nieregularnie, wówczas korzystniejsze moĪe byü ustalenie

r a
mniejszego rozmiaru
ro bloku. Maksymalna wielkoĞü bloku jest zaleĪna od systemu operacyjnego.
Minimalny rozmiar bloku wynosi 2 K i w zasadzie powinien byü uĪywany bardzo rzadko.
Minimaln

O MoĪna
Mo Ī tworzyü przestrzenie tabel z róĪnymi rozmiarami bloków, ale ta opcja powinna byü stosowana
tylko w celu obsáugi przenoĞnych przestrzeni tabel. WiĊcej informacji na ten temat moĪna znaleĨü
w PodrĊczniku administratora bazy danych.

Oracle Database 10g: Podstawy jĊzyka SQL II D-8


Zarządzanie instancjami Oracle
SGA

Shared pool Streams pool Large pool

Database
Java pool Redo log buffer
buffer cache

SMON PMON DBW0 LGWR

CKPT

m y ARC0
C0

d e
D-9
a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c
Zarządzanie instancjami Oracle
e A
c l
Serwer bazy danych Oracle skáada siĊ z bazy danych Oracle oraz inst instancji Oracle. Instancja

z procesów táa.
r a
Oracle skáada siĊ z buforów pamiĊci zwanych globalnym obszarem systemowym (SGA) oraz
obalnym obszare

O ly
Instancja do momentu uruchomienia pozostaje
ozostaje w stanie bezczynnoĞci (nie istnieje). Gdy
ie bezczynn

l
i na ich podstawie instancja jest& On
uruchamia siĊ instancjĊ, wówczas jest
est odczytywanyny plik parametr
st odpowiednio konfigurowana.
k
parametrów inicjalizacyjnych

n a e
Po uruchomieniu instancjii i otwarciu bazy
zy danych uuĪytkownicy
Īytk mogą uzyskiwaü dostĊp
do bazy danych.

t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II D-9
Struktury pamiĊci Oracle

Proces Proces Proces


serwera PGA serwera PGA dziaáający PGA
1 2 w tle

SGA

Obszar wspólny Pula strumieni Pula wielka


(shared pool) (streams pool) (large pool)

Bufory danych Bufor


Pula Javy
(database buffer dziennika
(java pool)
cache) powtórzeĔ

m y
d e
D-10 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Struktury pamiĊci Oracle
e A
c l
Do podstawowych struktur pamiĊci związanych z instancją Oracle nale
• Globalny obszar systemowy (SGA): wspólny obszar pamiĊci
bszar pami
naleĪą:
Īą:
Ċci dla wszystkich procesów serwera

r
i procesów dziaáających w tle.
a
• Globalny obszar programów (PGA): prywatny rywatny obszar pami
pamiĊci
pa Ċ dla kaĪdego procesu serwera

O ly
i procesów táa; dla kaĪdego procesu istnieje obszarze
stnieje jeden obsza PGA.
zarze PGA

kontrolne instancji.
l & On
Globalny obszar systemowy (SGA) jest st wspólnym obsza
obszarem pamiĊci
zarem pami Ċci zawierającym
za dane i informacje

n
• Bufory danych: przechowujea e
Obszar SGA skáada siĊ z nastĊpujących
Ċpujących
ących struktutur danych:
struktur
zechowuje bloki danych
d pobierane z bazy danych.
• Bufor dziennika
odzyskiwania
t e rpowtórzeĔ:
ka powtórze

U s przechowuje
Ĕ: prz
rzechowuje inform
ia instancji) zanim nie
informacje o powtórzeniach (uĪywane do
zostanąą zap
ie zostan zapisane do fizycznych plików dziennika powtórzeĔ,
znajdujących
• Obszar
I n
siĊĊ na dysku
ących si dysku.
zar wspóádzielony:
wspóádzielon przechowuje je róĪne obiekty, z których mogą wspólnie korzystaü

l e
uuĪytkownicy.
Īytkownicy.
• Pula wielka: opcjonalny obszar uĪywany do buforowania ĪądaĔ wejĞcia-wyjĞcia o duĪych
crozmiarach.
rozmiarach

r a
• Pula JJavy: obszar uĪywany przez wszystkie związane z sesją kody w jĊzyku Java i dane
w wirtualnej maszynie Javy (JVM).
O • Pula strumieni: uĪywana przez strumienie Oracle.
Gdy uruchamia siĊ instancjĊ za pomocą aplikacji Enterprise Manager lub SQL*Plus, wówczas
jest wyĞwietlana iloĞü pamiĊci przydzielonej dla obszaru SGA.

Oracle Database 10g: Podstawy jĊzyka SQL II D-10


Struktury pamiĊci Oracle (kontynuacja)
DziĊki dynamicznej infrastrukturze SGA, rozmiar buforów danych, obszaru wspóádzielony,
puli wielkiej, puli Javy lub puli strumieni moĪe byü zmieniany bez zamykania instancji.
WstĊpnie skonfigurowana baza danych jest przygotowywana z odpowiednio dobranymi
ustawieniami parametrów pamiĊci. Wraz ze wzrostem uĪycia bazy danych moĪe siĊ jednak
okazaü konieczna zmiana ustawieĔ tych parametrów.
Oracle, za pomocą ostrzeĪeĔ i wskazówek, pomaga w rozwiązywaniu problemów z iloĞcią
przydzielanej pamiĊci i w okreĞlaniu odpowiednich wartoĞci parametrów pamiĊci.
Globalny obszar programów (PGA) to obszar pamiĊci zawierający dane i informacje
kontrolne kaĪdego procesu serwera. Proces serwera obsáuguje Īądania klientów. KaĪdy taki
proces ma swój wáasny obszar PGA tworzony w momencie uruchamiania danego procesu.
DostĊp do obszaru PGA jest zarezerwowany wyáącznie dla odpowiadającego mu procesu
serwera i jest odczytywany i zapisywany tylko za pomocą kodu Oracle dziaáającego
w imieniu tego procesu.
IloĞü uĪytej pamiĊci PGA i jej zawartoĞü zaleĪy od tego, czy instancja jest skonfigurowana
w trybie wspólnych serwerów. Ogólnie obszar pamiĊci PGA zawiera nastĊpujące elementy:
• Prywatny obszar SQL: zawiera dane, takie jak informacje wiąĪące oraz struktury
pamiĊci czasu wykonywania. KaĪda sesja, w której wykonuje siĊ instrukcje SQL, ma
swój prywatny obszar SQL.
• PamiĊü sesji: pamiĊü sáuĪąca do przechowywania zmiennych sesji i innych związanych
z nią informacji.

m y
d e
c a
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II D-11
Procesy Oracle
Proces Proces Proces Proces
serwera serwera serwera serwera

Globalny obszar
systemowy
SGA

Proces Proces Proces Proces


Monitor Monitor
zapisywania sprawdza- zapisywania archiwizu-
systemu procesów
bazy danych jący dziennika jący
SMON PMON
DBW0 CKPT LGWR ARC0

Procesy
dziaáające w tle m y
d e
D-12 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Procesy Oracle
e A
c l
Gdy uruchamia siĊ aplikacjĊ lub narzĊdzie Oracle, na przykáad
káad Enterprise Manager,
M wówczas serwer

r a
Oracle tworzy proces, którego zadaniem jest wykonywanie poleceĔ
wanie polece
Oracle tworzy teĪ dla instancji zbiór procesów dziaáających
ziaáających
wydawanych przez tĊ aplikacjĊ.
Ĕ wyd
ących w tle,, które
któ
k wspóápracują ze sobą
wspó

O ly
i z systemem operacyjnym w celu zarządzania ia strukturami pamiĊci,
nych na dysku oraz
wejĞcia-wyjĞcia w celu zapisywania danych
pam
amiĊci, wy
az wykonuj
wykonują asynchroniczne operacje
wykonująą og ogólne dziaáania organizacyjne.

l & On
To, które procesy dziaáające w tle sąą obecne, zaleĪy od funkcji uĪywanych
zaleĪy uĪyw w bazie danych. NajczĊĞciej
są to nastĊpujące procesy:
• Monitor systemu (SMON):
n a e
SMON): przeprow owadza odzyskiwa
przeprowadza odzyskiwanie instancji uruchamianej po awarii.
• Monitor procesów

t e r U s
sów (PMON): wykonuje
isywania bazy da
• Proces zapisywania
wy
danychch (DBW
czyszcze
czyszczenie systemu po przerwaniu sesji uĪytkownika.
n): przepisuje zmodyfikowane bloki z buforów danych
(DBWn):

• Proces I n
ów na dysku.
do plików
oces kontrolny (C
(CKPT): wysyáa sygnaáy do procesu DBWn w punktach kontrolnych

c l e
i aktualizuje wsz
najnowszeg
wszystkie pliki danych oraz pliki kontrolne bazy danych w celu okreĞlenia
najnowszego punktu kontrolnego.

r a
• Proces zapisywania dziennika (LGWR): zapisuje wiersze dziennika powtórzeĔ na dysk.
• ProProces archiwizujący (ARCn): kopiuje pliki dziennika powtórzeĔ do przestrzeni archiwalnej

O w chwili ich zapeánienia lub przeáączenia dziennika.

Oracle Database 10g: Podstawy jĊzyka SQL II D-12


Inne waĪne struktury fizyczne

Plik
parametrów

Plik Archiwalne
haseá pliki dziennika
Baza danych

m y
d e
D-13 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Inne waĪne pliki
e A
c l
Serwer Oracle korzysta teĪ z innych plików, niebĊdących
cych czĊĞcią
czĊĞcią bazy
baz danych:

r a
• Plik parametrów okreĞla charakterystyki instancji
parametry ustalające rozmiary niektórych pamiĊci
Na przykáad zawiera
stancji Oracle. N
miĊ w obszarze pamiĊci SGA.
ych struktur pami

i zamykania instancji Oracle.O ly


• Plik haseá identyfikuje uĪytkowników,
ków, którzy są
są upowaĪnieni
u
upowa Īni do uruchamiania

l & On
• Zarchiwizowane pliki dziennika powtórzeĔ
ennika powtórzeeĔ są
są nieaktywnymi
nieaktywny kopiami plików dziennika
powtórzeĔ, które mogą

n a e
gą byü
byü niezbĊdne
ne w wypadku awarii
niezbĊdne aw któregoĞ z noĞników danych.

t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II D-13
Przetwarzanie instrukcji SQL

• àączenie z instancją za pomocą:


– procesu uĪytkownika;
– procesu serwera.
• Skáadniki serwera Oracle uĪywane w zaleĪnoĞci
od typu instrukcji SQL:
– zwracanie wierszy przez zapytania;
– rejestrowanie zmian dla instrukcji DML;
– gwarantowanie bezpieczeĔstwa transakcji
przy zatwierdzeniach.
• Niektóre skáadniki serwera Oracle nie uczestniczą
w przetwarzaniu instrukcji SQL.

m y
d e
D-14 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Skáadniki uĪywane do przetwarzania instrukcji SQL
e A
l
Nie wszystkie skáadniki instancji Oracle są uĪywane do przetwarzania instrukcji SQL.
c
Procesy
r a
Procesy uĪytkownika i procesy serwera sáuĪą do áączeniaczenia uĪytkownika
áąączenia uĪytkow z instancją Oracle.

O ly
te nie są czĊĞcią instancji Oracle, ale są wymagane do przetwarzania
przetwarza instrukcji SQL.
pr

l & On
Niektóre procesy dziaáające w tle, struktury SGA i pliki bazy danych
przetwarzaniu instrukcji SQL. W zalezaleĪnoĞci
dany są potrzebne przy
instrukcji SQL, są uĪywane róĪne
ĪnoĞci od typu instrukcj
skáadniki:
n a e
• Zapytania wymagają
uĪytkownikowi.
• Instrukcje
owi.
t
cje jĊzykae r
agają dodatkowego
dodatkoweg

U s ego przetwarzania

operowania danymi D
jĊzyka operow
przetwarzan w celu zwracania wierszy

DML wymagają dodatkowego przetwarzania


w celu
I n
elu rejestrowania zmian dokonywanych
ony na danych.

c e
• Przetwarzanie zzatwierdzeĔ musi gwarantowaü, Īe dane modyfikowane w ramach
l
transakcji bĊdą
b mogáy byü odzyskane.

r a
Niektóre wy
instrukcji
wymagane procesy dziaáające w tle nie uczestniczą bezpoĞrednio w przetwarzaniu
instrukc SQL, ale są uĪywane do zwiĊkszenia wydajnoĞci lub do odzyskiwania bazy danych.
OOpcjonalny proces dziaáający w tle, ARC0, jest uĪywany do gwarantowania moĪliwoĞci
Op
odzyskania produkcyjnej bazy danych.

Oracle Database 10g: Podstawy jĊzyka SQL II D-14


àączenie z instancją

UĪytkownik Serwer

Serwer Oracle

UĪytkownik Serwer

Klient

Serwer aplikacji Serwer

UĪytkownik Serwer

Przeglądarka
m y
d e
D-15 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Procesy uĪywane podczas áączenia siĊ z instancją
e A
c l
Aby uĪytkownik mógá przesyáaü instrukcje SQL do serweraerwera Oracle, m musi siĊ poáączyü
z instancją.
r a
Gdy uĪytkownik uruchamia aplikacjĊ, taką jak iSQL*Plus
iSQL*Plus lub
lu utworzoną
u np. za pomocą
O ly
narzĊdzia Oracle Forms, wówczas jest ona uruchamiana na w procesie
proces uĪytkownika.

podstawową konfiguracjĊ, jest


l & On
Gdy uĪytkownik loguje siĊ do serwerawera Oracle, wówczas,
st tworzony proces
proce
wó biorąc
ówczas, bior ąc pod
p uwagĊ
uwag najbardziej
komputerze serwera Oracle. Ten proces
ces na komputer

n a e
jest nazywany procesem serwera. Process serwera
s komunikuje
komun siĊ z instancją Oracle na

t e r
Īądanie procesu uĪytkownika

U s
kownika dziaáającego
ącego na komputerze
dziaáającego
wiĊc instrukcje SQL w imieniu uuĪytkownika.
ytkownika.
kompu klienta. Proces serwera wykonuje

Poáączenie
I n
Poáączenie
l
UĪytkownike
zenie jest ĞcieĪką
ĞcieĪk komunikacyjną miĊdzy procesem uĪytkownika i serwerem Oracle.
Īytkownik bazy danych moĪe poáączyü siĊ z serwerem Oracle na jeden z trzech sposobów:
c
r a
• UĪytkownik
UĪytkow
i uruchamia
uru
loguje siĊ do systemu operacyjnego, w którym dziaáa instancja Oracle
aplikacjĊ lub narzĊdzie, które uzyskuje dostĊp do bazy danych w tym

O systemie. ĝcieĪka komunikacyjna jest ustanawiana za pomocą mechanizmów


komunikowania siĊ miĊdzy procesami, dostĊpnych w danym systemie operacyjnym.

Oracle Database 10g: Podstawy jĊzyka SQL II D-15


Procesy uĪywane podczas áączenia siĊ z instancją (kontynuacja)
Poáączenie (kontynuacja)
• UĪytkownik uruchamia aplikacjĊ lub narzĊdzie na komputerze lokalnym i áączy
siĊ przez sieü z komputerem, na którym dziaáa instancja Oracle. W tej konfiguracji,
zwanej klient-serwer, do komunikowania siĊ uĪytkownika z serwerem Oracle sáuĪy
oprogramowanie sieciowe.
• W tzw. poáączeniu trójstronnym komputer uĪytkownika komunikuje siĊ przez sieü
z aplikacją lub serwerem sieciowym poáączonym siecią z komputerem, na którym
dziaáa instancja Oracle. Na przykáad uĪytkownik uruchamia przeglądarkĊ na
komputerze sieciowym w celu uĪywania aplikacji rezydującej na serwerze NT, który z
kolei pobiera dane z bazy danych Oracle uruchomionej na serwerze z systemem UNIX.
Sesje
Sesja jest konkretnym poáączeniem uĪytkownika z serwerem Oracle. Sesja rozpoczyna siĊ
w momencie zweryfikowania uĪytkownika przez serwer Oracle, a koĔczy siĊ w chwili
wylogowania siĊ uĪytkownika lub wskutek awarii. Jest moĪliwe istnienie wielu
wspóábieĪnych sesji dla jednego uĪytkownika bazy danych, jeĞli np. loguje siĊ on w tym
samym czasie za pomocą róĪnych narzĊdzi, aplikacji lub terminali. Z wyjątkiem pewnych
specjalistycznych narzĊdzi administracyjnych bazy danych, uruchomienie sesji bazy danych
wymaga, aby serwer Oracle byá dostĊpny dla uĪytkowników.
Uwaga: Typ omawianego tutaj poáączenia, w którym istnieje wzajemnie jednoznaczna
odpowiednioĞü miĊdzy procesem uĪytkownika i procesem serwera, jest nazywany
poáączeniem dedykowanym.

m y
d e
c a
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II D-16
Przetwarzanie zapytania

• Analiza skáadniowa:
– wyszukiwanie identycznych instrukcji;
– sprawdzanie skáadni, nazw obiektów i uprawnieĔ;
– blokowanie obiektów uĪywanych podczas analizy
skáadniowej;
– tworzenie i przechowywanie planu wykonania.
• Wykonanie: rozpoznanie wybranych wierszy.
• Pobranie: zwrócenie wierszy do procesu
uĪytkownika.

m y
d e
D-17 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Etapy przetwarzania zapytania
e A
c l
Zapytania róĪnią siĊ od innych typów instrukcji SQL,, poniewa
poniewaĪĪ w wy
wypadku pomyĞlnego

r a
ich przetworzenia zwracają dane wynikowe. Podczas
informacjĊ o powodzeniu lub niepowodzeniu
dczas gdy inne instrukcje
in
zapytanie
u wykonania, zap
apy
po prostu zwracają
moĪe zwróciü wiersze

O ly
danych. MoĪe byü to jeden wiersz albo tysiące
tysiące
ące wierszy.

• analiza skáadniowa;
l & On
Są trzy gáówne etapy przetwarzaniaa zapytania:

• wykonanie;
n a e
• pobranie.

t e r
Podczas analizy skáadniowej
U s
áadniowej instrukcja
skkááadniowej instrukcja SQL jest przekazywana z procesu uĪytkownika
do procesu serwera,
I
do wspóáuĪytkowanegon
erwera, a przeanalizowana
przean
uĪytkowanego oobszaru SQL.
reprezentacja instrukcji SQL jest áadowana
na repr

cl e
W trakcie analizy sskáadniowej proces serwera przeprowadza nastĊpujące dziaáania:
• wyszukuje
wyszukuj istniejące kopie instrukcji SQL w puli wspólnej;

r a
• weryfikuje
wery instrukcjĊ SQL, sprawdzając jej skáadniĊ;

O • przegląda
p
NastĊpnie
N
sáownik danych w celu zweryfikowania definicji tabel i kolumn.
zostaje przeprowadzone wykonanie instrukcji w (najlepszy moĪliwy) sposób
wskazany przez optymalizator, po czym nastĊpuje pobranie wierszy i przekazanie ich
do uĪytkownika.

Oracle Database 10g: Podstawy jĊzyka SQL II D-17


Obszar wspóádzielony

• PamiĊü podrĊczna biblioteki zawiera tekst instrukcji SQL,


przeanalizowany kod i plan wykonania.
• PamiĊü podrĊczna sáownika danych zawiera definicje tabel, kolumn
i innych obiektów oraz informacje o uprawnieniach do tych obiektów.
• Rozmiar puli wspóádzielonej jest okreĞlany przez parametr
SHARED_POOL_SIZE.

Pula wspólna

PamiĊü
podrĊczna
biblioteki

PamiĊü
podrĊczna
sáownika danych
m y
d e
D-18
a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c
Skáadniki puli wspóádzielonej
e A
c l
Podczas etapu analizy skáadniowej proces serwera uĪywa ywa obszaru w ppamiĊci SGA, zwanego

dwa gáówne skáadniki:


r a
pulą wspólną (obszarem wspóádzielonym), do kompilowania
ompilowania instrukcji
inst SQL. Obszarten ma

• pamiĊü podrĊczna biblioteki;


O ly
• pamiĊü podrĊczna sáownika danych. anych.
PamiĊü podrĊczna biblioteki
l & On
PamiĊü podrĊczna biblioteki
n a e
teki przechowuje je informacje o ostatnio
o uĪywanych instrukcjach
SQL w strukturze pamiĊci
• tekst instrukcji
t e r
kcji SQL;
U s
miĊci zwanej wspólnym
ws obszarem SQL. Wspólny obszar SQL zawiera:
obszar

• plan I n
• drzewoo analizy skáadniowej,
skáadnio
an wykonania, czyli
czyli
zyli skompilowaną
cz spis dziaáaĔ,
sko wersjĊ instrukcji;
Ĕ które trzeba przeprowadziü w celu

c l e
wykonania inst
instrukcji.
Optymalizator jjest funkcją serwera Oracle, która wyznacza optymalny plan wykonania.

ra
JeĞli
JeĞli instrukcja
instru SQL jest ponownie wykonywana i wspólny obszar SQL juĪ zawiera plan

Owykonania
wyko
PamiĊü
P
tej instrukcji, wówczas proces serwera nie musi jej ponownie analizowaü.
podrĊczna biblioteki poprawia wydajnoĞü aplikacji, które wielokrotnie uĪywają
danej instrukcji SQL. Zmniejsza czas analizy skáadniowej i iloĞü wymaganej pamiĊci. JeĞli
instrukcja SQL nie zostanie ponownie uĪyta, to w pewnym momencie przeterminuje siĊ
i zostanie usuniĊta z pamiĊci podrĊcznej biblioteki.

Oracle Database 10g: Podstawy jĊzyka SQL II D-18


Skáadniki puli wspólnej (kontynuacja)
PamiĊü podrĊczna sáownika danych
PamiĊü podrĊczna sáownika danych, zwana równieĪ pamiĊcią podrĊczną sáownika, lub
pamiĊcią podrĊczną wierszy, jest zbiorem ostatnio uĪywanych definicji wystĊpujących
w bazie danych. Zawiera informacje o plikach bazy danych, tabelach, indeksach,
kolumnach, uĪytkownikach, uprawnieniach i innych obiektach bazy danych.
Podczas fazy analizy skáadniowej proces serwera wyszukuje informacje w pamiĊci
podrĊcznej sáownika w celu rozstrzygniĊcia nazw obiektów podanych w instrukcji SQL oraz
w celu zweryfikowania uprawnieĔ dostĊpu. JeĞli jest to konieczne, to proces serwera inicjuje
wczytywanie tych informacji z plików danych.
Ustalanie rozmiaru puli wspóádzielniej pamiĊci
Rozmiar puli wspólnej jest okreĞlony przez parametr inicjalizacyjny SHARED_POOL_SIZE.

m y
d e
c a
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II D-19
Bufory danych

• Przechowuje ostatnio uĪywane bloki danych.


• Rozmiar bufora jest okreĞlany przez parametr
DB_BLOCK_SIZE.
• àączny rozmiar buforów jest okreĞlany przez
parametr DB_BLOCK_BUFFERS.

Bufory danych

m y
de
D-20
a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c
Funkcje buforów danych bazy danych
e A
c l
W trakcie przetwarzania zapytania proces serwera wyszukuje
yszukuje w buforach
bufor danych bazy danych

r a
wszystkie potrzebne bloki danych. JeĞli jakiĞ blokk nie zostanie znaleziony,
umieszcza w niej kopiĊ tego bloku po odczytaniu
taniu go z pliku
zn
danych.
u da
d
to proces serwera
PoniewaĪ podczas

O ly
kolejnych ĪądaĔ pobrania tego samego bloku mo
mogą nie wymagaü fizycznych odczytów
moĪna
zytów danych. Serwer
Se
juĪĪ znaleĨü
Īna ju znaleĨü go w pamiĊci , Īądania te
Oracle uuĪywa metody najdawniej

l & On
uĪytych obiektów (LRU) w celu nowych
u zwalniania dlaa no wych bloków przestrzeni zajmowanej przez

n a e
przeterminowane bufory, do których
o któryc ostatnio
h ostatni uzyskiwano dostĊpu.
nio nie uzyskiwa

Rozmiar kaĪdego
t e r
OkreĞlanie rozmiaru buforoów danych

U s dany
buforowej
o bufora w bufor
nych
pamiĊci
wej pami Ċci jest
j równy rozmiarowi bloku Oracle i jest

definiowanaI n
okreĞlany parametrem
rametrem DB_BLOCK_SIZE.
DB_B SIZE PrzestrzeĔzajmowana przez dane w pamiĊci jest
wana parametrem DB_CACHE_SIZE.

c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II D-20
Globalny obszar programów (PGA)

• Nie jest wspóáuĪytkowany.


• Zapisywany tylko przez proces serwera.
• Zawiera:
– obszar sortowania;
– informacje o sesji;
– stan kursora;
– przestrzeĔ stosu.

Proces
serwera
PGA
m y
d e
D-21 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

ca
Skáadniki globalnego obszaru programów
e A
c l
Globalny obszar programów (PGA) jest obszarem w pami pamiĊci,
Ċci, który zawiera
z dane i informacje

r a
kontrolne procesu serwera. Jest to niewspóáuĪytkowana
podczas uruchamiania procesu serwera. DostĊp
kowana pamiĊü
pamiĊü tworzona
Ċp do niej jest zar
tw
zarezerwowany
z
przez serwer Oracle
wyáącznie dla

O ly
tego procesu serwera i jest odczytywana or
dziaáający na rzecz tego procesu. àączna
oraz
ączna pamiĊü
zapisywana
pamiĊü PGA
PG
ana tylko pprzez kod serwera Oracle
az zapisywan
GA przydzielona
przydzielon przez wszystkie procesy

l & On
serwera doáączone do instancji Oracle jest nazywana
ywana agregowaną
nazyw agregowa pamiĊcią PGA przydzieloną
przez instancjĊ.

n a e
• Obszar sortowania:
e r
W konfiguracji dedykowanej
s
owania: uĪywany
t uĪywan
w celu przetworzenia insU
ppamiĊü
owanej serweraa pami Ċü PGA se
ny przez wszys
instrukcjii SQL;
serwera zawiera nastĊpujące skáadniki:
wszystkie sortowania, które mogą byü wymagane

• Informacje
I n
ormacje o sesji: zawiera uprawnienia
aw uĪytkownika i statystyki wydajnoĞci dla

c e
danej sesji;
l
• Stan kurso
kursora: wskazuje etap przetwarzania instrukcji SQL wykonywanej w danej

r a chwili przez
p
• PrzestrzeĔ
Prz
sesjĊ;
stosu: zawiera inne zmienne sesji.
OPamiĊü
Pam PGA jest przydzielana wówczas, gdy jest tworzony proces i zwalniana wraz
z zakoĔczeniem tego procesu.

Oracle Database 10g: Podstawy jĊzyka SQL II D-21


Przetwarzanie instrukcji DML

Proces Obszar
SGA
uĪytkownika
wspóádzielony
Bufory Bufor
dziennika
danych powtórzeĔ
UPDATE
employees ...
4 1 2 3
Proces
serwera

Pliki Pliki
Pliki danych dziennika
kontrolne
powtórzeĔ

Baza danych

m y
d e
D-22 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

ca
Etapy przetwarzania instrukcji DML
e A
c l
Przetwarzanie instrukcji operowania danymi (DML) sk skáada siĊĊ tylko z dwóch etapów:
áada si

przetwarzania zapytaĔ;
r a
• analiza skáadniowa, która przebiega tak samo mo jak faza analizy
anali skáadniowej podczas

w danych. O ly
• wykonanie, wymagającego dodatkowego przetwarzania
arzania w celu dokonania zmian
owego przetwarz

Faza wykonania instrukcji DML


l & On
W celu wykonania instrukcji
n a e
kcji DML ssąą przeprowadzane
rzeprowadzane nastĊpujące
prz n dziaáania:
• JeĞli bloki danych

t
to proces serwera
e r U s
ych i wycofaĔ
wycofaĔ jeszcze
eszcze nie są
jes są obecne
obe
erwera wczytuje jee tam z plików danych.
w buforowej pamiĊci podrĊcznej,

• Proces I n
• Proces serwera umieszcza
umieszc blokady
oces serwera zapisuje
zap
ady na tych wierszach, które mają byü zmodyfikowane.
w buforze dziennika powtórzeĔ zmiany, które mają byü

l e
wprowadzone w blokach wycofaĔ i blokach danych.

c
• Zmiany w bloku wycofaĔ rejestrują wartoĞci danych zanim zostaną one

r azmodyfikowane.
zmody
wykonania
wy
Blok wycofaĔ jest uĪywany do przechowywania obrazu danych sprzed
instrukcji DML, tak aby instrukcja ta mogáa byü w razie potrzeby wycofana.
O • Zmiany w bloku danych rejestrują nowe wartoĞci danych.

Oracle Database 10g: Podstawy jĊzyka SQL II D-22


Etapy przetwarzania instrukcji DML (kontynuacja)
Faza wykonania instrukcji DML (kontynuacja)
Proces serwera zapisuje do bloku wycofaĔ obraz sprzed wykonania instrukcji i aktualizuje
blok danych. Obie te zmiany są wykonywane w buforowej pamiĊci podrĊcznej bazy danych
i oznaczane w niej jako tzw. bufory zmienione, tzn. róĪniące siĊ od odpowiadających im
bloków na dysku.
Przetwarzanie polecenia DELETE lub INSERT dzieli siĊ na podobne etapy. Obraz sprzed
wykonania instrukcji DELETE zawiera wartoĞci kolumn w usuniĊtym wierszu, a obraz sprzed
wykonania instrukcji INSERT zawiera informacje o lokalizacji wiersza.
Zmiany dokonane w blokach są zapisywane tylko w strukturach pamiĊci i nie są przenoszone
natychmiast na dysk. Dlatego teĪ báąd komputera skutkujący utratą pamiĊci SGA moĪe
powodowaü równieĪ utratĊ tych zmian.

m y
d e
c a
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II D-23
Bufor dziennika powtórzeĔ

• Jego rozmiar jest okreĞlany przez parametr


LOG_BUFFER.
• Rejestruje zmiany dokonane w instancji.
• Jest uĪywany sekwencyjnie.
• Jest buforem cyklicznym.

Bufor dziennika
powtórzeĔ

m y
d e
D-24
a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c
Charakterystyka bufora dziennika powtórzeĔ
e A
c l
Proces serwera rejestruje wszystkie zmiany dokonywanewane na blokach ddanych w buforze

ma nastĊpujące cechy:
r a
dziennika powtórzeĔ, bĊdącym czĊĞcią obszaru pami pamiĊci
Ċci SGA. Bufor
Bu dziennika powtórzeĔ

O ly
• Jego rozmiar (w bajtach) jest okreĞlany
• Rejestruje informacje o zmienionym
ionym bloku, lok
parametr
lany przez param
ametr LOG_BUFFER.
lokalizacji
LOG
okalizacji zmia
zmiany i nowej wartoĞci we

l
wpisie dziennika powtórzeĔ.& On
Ĕ. Wpis dziennika
nika powtórzeĔ
dzienni powtórzeĔ nie
n rozróĪnia typu zmienianego
bloku. Przechowuje tylko

n
• Bufor dziennika powtórze a einformacjĊĊ o lokalizacji zmienionych
ylko informacj
powtórzeĔĔ jest uĪywany
zm bajtów.
sekwencyjnie i zmiany dokonywane przez
uĪywany sekwen
jedną transakcjĊ,
transakcje.
e.
t e r
cjĊ, mogą
mogą siĊ
U s
siĊ przeplataü
przzeplataü ze zmianami
zmi dokonywanymi przez inne

I n
• Jest to bufor cykliczny,
cykliczn który moĪe oĪe byü wielokrotnie uĪywany po zapeánieniu, jednak

c l e
dopiero po zapisaniu
zapisa wszystkich starych powtórzeĔ do plików dziennika powtórzeĔ.

r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II D-24
Segment wycofaĔ

Stary obraz

Segment wycofaĔ
Nowy obraz

Tabela

Instrukcja DML

m y
d e
D-25 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Segment wycofaĔ
e A
c l
Przed dokonaniem zmiany proces serwera zapisuje stare wartoĞci
tare wartoĞci danych
dan w segmencie

r a
wycofaĔ. Ten wczeĞniejszy obraz danych ma nastĊpujące
• cofanie zmian, w wypadku wycofywania
stĊpująceące zastosowania:
nia transakcji;
zastoso

O ly
• zapewnianie spójnoĞci odczytu dziĊki
„widzą” niezatwierdzonych zmian
Ċki gwarantowaniu,
gwarantowan
dokonywanych
mian dokonywan
Īe inne
waniu, Īe in transakcje nie
instrukcjĊ DML;
anych przez inst
• przywracanie spójnego stanu
l & On
anu bazy danych h w wypadku wy wystąpienia báĊdów.
Segmenty wycofaĔ, podobnie
n a e
bnie jak tabele i indeksy,
i ssąą umieszczone
umi wĞród plików danych,

t e r
a bloki wycofaĔ są przenoszone
zenoszone do buforowej
s
gdy są potrzebne. Segmenty wycofaĔ
uforowej pamiĊci
buf
wycofaĔ są
U
pamiĊ podrĊcznej bazy danych wtedy,
są tworzone
tworzon przez administratora bazy danych.
Zmiany w segmentach
I n wycofaĔ są rejestrowane
egmentach wyco ejestrow w buforze dziennika powtórzeĔ.

c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II D-25
Przetwarzanie instrukcji
zatwierdzenia COMMIT
1 Instancja
Obszar
SGA
Proces wspóádzielony
serwera Bufory Bufor
dziennika
4 danych powtórzeĔ

3
LGWR

Proces
uĪytkownika Pliki
danych
Pliki
kontrolne
Pliki dziennika
powtórzeĔ
2

Baza danych
m y
d e
D-26 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Szybkie zatwierdzenie
e A
c l
Serwer Oracle korzysta z mechanizmu szybkiego zatwierdzenia,
wierdzenia, który gwarantuje,

Systemowy numer zmiany r a


Īe w wypadku báĊdu instancji zatwierdzone zmiany mogąą byü
any mog byü odzyskane.
od

O ly
W momencie zatwierdzenia transakcji serwer Oracle nnadaje jej za zatwierdzający systemowy
numer zmiany (SCN). Numery SCN
danych. Są uĪywane przez serwer
l & Onrosnąą monotonicznie
CN rosn monoto
rwer Oracle jako
tonicznie i ssąą unikatowe
wewnĊtrzne
ko wewn
un
Ċtrzne znaczniki
zn
w caáej bazie
czasowe potrzebne
do synchronizowania danych
n a e
zapewniania
nych i zapewnian spójnoĞci
ania spójno Ğci odczytu
od danych z plików. UĪywanie
numerów SCN pozwala

te r U s
ala serwerowi Oracle
Or
daty i godziny w systemie operacyjnym.
operac jnym.
sprawdzanie spójnoĞci niezaleĪnie od ustawieĔ
na sprawd

Etapy przetwarzania
Gdy zostaje I n instrukcji zatwierdzenia
twarzania instr wierd COMMIT
polecenie COMMIT, wówczas są wykonywane nastĊpujące czynnoĞci:
ostaje wydane po
l e
• Proces serwe
c serwera umieszcza w buforze dziennika powtórzeĔ wiersz zatwierdzenia wraz

r a z numer
numerem SCN
• Proces
Proc LGWR w sposób ciągáy przepisuje z bufora dziennika powtórzeĔ do plików

O dziennika powtórzeĔ wszystkie wpisy do wiersza zatwierdzenia wáącznie. Po


wykonaniu tej czynnoĞci serwer Oracle moĪe juĪ zagwarantowaü, Īe w wypadku
wystąpienia báĊdu instancji wprowadzone zmiany nie zostaną utracone.

Oracle Database 10g: Podstawy jĊzyka SQL II D-26


Szybkie zatwierdzenie (kontynuacja)
Etapy przetwarzania instrukcji zatwierdzenia COMMIT (kontynuacja)
• UĪytkownik jest informowany o zakoĔczeniu wykonywania instrukcji COMMIT.
• Proces serwera rejestruje informacje o zakoĔczeniu transakcji i o moĪliwoĞci zdjĊcia
blokady zasobów.
Przepisywanie zmienionych buforów do plików danych jest przeprowadzane niezaleĪnie
przez proces DBW0 i moĪe wystąpiü zarówno przed zatwierdzeniem, jak i po nim.
Zalety szybkiego zatwierdzenia COMMIT
Mechanizm szybkiego zatwierdzenia, dziĊki zapisywaniu zmian w buforze powtórzeĔ,
a nie w plikach danych, gwarantuje pomyĞlne odzyskiwanie danych. Ma to nastĊpujące
zalety:
• Sekwencyjne zapisywanie plików dziennika jest szybsze niĪ zapisywanie do róĪnych
bloków pliku danych.
• W plikach dziennika jest zapisywana tylko minimalna iloĞü informacji potrzebnych
do zarejestrowania zmian. Zapisywanie w plikach danych wymagaáoby uwzglĊdniania
caáych bloków danych.
• W wypadku jednoczesnych ĪądaĔ zatwierdzenia wielu transakcji instancja musiaáaby
jakoĞ upychaü wiersze dziennika powtórzeĔ w jednym tylko procesie zapisywania.
• Dopóki bufor dziennika operacji nie jest szczególnie zapeániony, to dla kaĪdej transakcji
jest wymagany tylko jeden synchroniczny zapis. Gdy jednak zatwierdzenia wzajemnie
siĊ nakáadają, wówczas na kaĪdą transakcjĊ moĪe przypadaü mniej niĪ jeden
synchroniczny zapis.

m y
• PoniewaĪ bufor dziennika operacji moĪe byü opróĪniany przed wykonaniem instrukcji
COMMIT, rozmiar transakcji nie wpáywa na iloĞü czasu potrzebnego do wykonania
ykonania
bieĪącej operacji COMMIT.
d e
Uwaga: Wycofywanie transakcji nie zmusza procesu LGWR do zapisywania
Oracle zawsze wycofuje niezatwierdzone zmiany podczas odzyskiwania
c a
ywania na dysku. Serwer
kiwania danych ppo báĊdach.

e
dysk, to nieobecnoĞü wiersza zatwierdzenia jest wystarczającym A
JeĞli báąd wystąpi juĪ po operacji wycofania, ale przed przeniesieniem
iesieniem wpisów wycofaĔ na
ącym powodem
zającym powode do uznania, Īe

c l
zmiany wykonane przez transakcjĊ zostaáy wycofane. e.

r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II D-27
Podsumowanie

W tym dodatku przedstawiono, jak:


• RozróĪniaü pliki bazy danych: pliki danych, pliki
kontrolne i bieĪące pliki dziennika powtórzeĔ.
• Opisywaü struktury pamiĊci SGA: bufory danych,
obszar wspóádzielony i bufor dziennika powtórzeĔ.
• ObjaĞniaü gáówne procesy dziaáające w tle:
DBW0, LGWR, CKPT, PMON, SMON i ARC0.
• Wymieniaü etapy przetwarzania instrukcji SQL:
analiza skáadniowa, wykonanie, pobranie.

m y
d e
D-28 Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.

c a
Podsumowanie
e A
Pliki bazy danych Oracle
c l
a
Baza danych Oracle zawiera nastĊpujące pliki:
r
• Pliki kontrolne: zawierają informacjee potrzebne do wery
weryfikowania spójnoĞci bazy
w
O ly
danych, w tym równieĪ nazw innychych plików bazyy danych (pliki
(p kontrolne są zwykle
powielane).

l & On
• Pliki danych: zawierają wáaĞciwe
wáaĞciwe dane bazy
b danych, takie
tak jak tabele, indeksy,

n a e
segmenty wycofaĔ i segmenty tymczasowe.
tymczczasowe.

e r
• Aktywne pliki dziennika powtórzeĔ:
(dzienniki powtórzeĔ
owtórzeĔ są
t s tórzeĔ: rejestrują
powtó
są uĪywane
U
rejestruj zmiany dokonywane w plikach danych
wane do odzyskiwania
uĪyw odzysk danych i zwykle są powielane).
Inne pliki czĊsto
• Plik I n
Ċsto uĪywane
uĪywane z bazą
b danych
nych to:
to
ik parametrów: definiuje charakterystyki instancji Oracle.

c l e
• Plik haseá:
haseá: identyfikuje
• Zarchiwizowane
Zarchiwiz
ide uprawnionych uĪytkowników bazy danych.
dzienniki powtórzeĔ: są kopiami zapasowymi aktywnych

r a plików dziennika powtórzeĔ.

O
Oracle Database 10g: Podstawy jĊzyka SQL II D-28
Podsumowanie (kontynuacja)
Struktury pamiĊci SGA
Globalny obszar systemowy (SGA) ma trzy gáówne struktury:
• Obszar wspóádzielony: przechowuje ostatnio wykonywane instrukcje SQL i ostatnio
uĪywane
dane ze sáownika danych.
• Bufory danych: przechowuje ostatnio uĪywane dane.
• Bufor dziennika powtórzeĔ: rejestruje zmiany dokonywane w bazie danych przez
instancjĊ.
Procesy dziaáające w tle
Produkcyjna instancja Oracle zawiera nastĊpujące procesy:
• Proces zapisywania bazy danych (DBW0): zapisuje zmienione dane do plików danych.
• Proces zapisywania dziennika (LGWR): rejestruje w aktywnych plikach dzienników
powtórzeĔ zmiany dokonywane w plikach danych.
• Monitor systemu (SMON): sprawdza spójnoĞü systemu i rozpoczyna odzyskiwanie
bazy danych, gdy jest ona otwierana.
• Monitor procesów (PMON): oczyszcza zasoby, jeĞli któryĞ z procesów zakoĔczy
siĊ niepomyĞlnie.
• Proces kontrolny (CKPT): aktualizuje informacje o stanie bazy danych po
przekroczeniu punktu kontrolnego.
• Proces archiwizujący (ARC0): tworzy kopie zapasowe aktywnych plików dziennika
powtórzeĔ na potrzeby odzyskiwania bazy danych po wystąpieniu báĊdu dyskowego go
y
(ten proces jest opcjonalny, ale zwykle jest zawarty w instancji produkcyjnej).
m
W zaleĪnoĞci od konfiguracji, instancja moĪe teĪ zawieraü inne procesy.
Etapy przetwarzania instrukcji SQL
d e
CzynnoĞci wykonywane podczas przetwarzania instrukcji SQL:
c a
• Analiza skáadniowa: kompiluje instrukcjĊ SQL.
A
• Wykonanie: rozpoznaje wybrane wiersze lub stosujee zmiany danych na podstawie
e
instrukcji DML.
c l
• Pobranie: zwraca wiersze uzyskane przez instrukcjĊ
nstrukcjĊ SELECT.
SELEC

r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II D-29
m y
d e
ca
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Korzystanie z SQL Developer

m y
d e
Copyright © 2007, Oracle. Wszelkie prawa zastrzeĪone.

c a
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Cele

Zagadnienia przedstawione w ramach tej lekcji pozwalają:


• Wymieniü kluczowe cechy narzĊdzia Oracle SQL
Developer
• Zainstalowaü Oracle SQL Developer
• WyróĪniü elementy menu Oracle SQL Developer
• Stworzyü poáączenie z bazą danych
• Zarządzaü obiektami bazy
• UĪywaü SQL Worksheet
• Uruchamiaü polecenia oraz skrypty SQL
• Tworzyü i zachowywaü raporty

m y
d e
E-2 Copyright © 2007, Oracle. Wszelkie prawa zastrzeĪone.

c a
Cele
e A
c l
Dodatek wprowadza graficzne narzĊdzie SQL Developer, upraszcza zadania związane z
er, które upraszc

r a
bazą danych. Nauczysz siĊ jak uĪywaü SQL Worksheet
SQL. Dowiesz siĊ równieĪ jak edytowaü i Ğledziü
wykonywania poleceĔ oraz skryptów
sheet do wykony
ziü polecenia PL/S
PL/SQL.
PL

O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II E-2
Co to jest Oracle SQL Developer?

• Oracle SQL Developer jest graficznym narzĊdziem


zwiĊkszającym wydajnoĞü i uáatwiającym tworzenie
zadaĔ rozbudowujących bazĊ.
• MoĪesz podáączyü siĊ do schematu dowolnej bazy
danych Oracle uĪywając standardowej dla bazy Oracle
metody autentyfikacji.

m y
d e
E-3 Copyright © 2007, Oracle. Wszelkie prawa zastrzeĪone.

c a
Co to jest Oracle SQL Developer?
e A
c l
Oracle SQL Developer jest darmowym graficznym narzĊdziem rzĊdziem zaprojektowanym
zaproje dla

r a
powiĊkszenia wydajnoĞci i uáatwienia codziennej pracy z baz
„klikniĊü” moĪesz áatwo stworzyü i Ğledziü skáadowana
baząą danych.
bazie
dany Przy pomocy paru
zie danych procedurĊ, testowaü
adowana w bazi

O ly
polecenia SQL oraz oglądaü plany optymalizatora.
alizatora.

nastĊpujące zadania:
l & On
SQL Developer, narzĊdzie wizualizujące jące owywania bazy danych, uuáatwiające
ące do rozbudowywania
rozbudow

• WyĞwietlanie i zarządzanie
n a e
anie obiektami bazy
b danych
• Wykonywanie poleceĔ

t e
• Edytowanie i Ğledzenie r
ceĔ oraz skryptów
s
ledzenie poleceĔ
tów SQL
skryptó
poleceĔ PL/SQL
U
MoĪliwe jest I n
• Tworzenie raportów
est podáączenie
czenie siĊ
podáąączenie ssi do schematu dowolnej bazy danych Oracle uĪywając standardowej
dla bazy
bazy
c l e
zy Oracle metody
azy danych.
metod autentyfikacji. Podáączony moĪesz wykonywaü operacje na obiektach

ra
O
Oracle Database 10g: Podstawy jĊzyka SQL II E-3
Cechy narzĊdzia

• Napisany w jĊzyku Java


• DostĊpny na platformy: Windows,Linux and Mac OS X
• DomyĞlne poáączenie przy pomocy sterownika JDBC
Thin
• Nie wymaga programu do instalacji
• MoĪliwoĞü podáączenia do baz Oracle w wersji 9.2.0.1 i
póĨniejszej
• W pakiecie z JRE 1.5

m y
d e
E-4 Copyright © 2007, Oracle. Wszelkie prawa zastrzeĪone.

c a
Cechy narzĊdzia
e A
c l
Oracle SQL Developer napisany w jĊzyku Java z przewagą JDeveloper IDE. Uruchamia
wagą Oracle JDev

r a
siĊ na platformach: Windows, Linux, and Mac OS X. Mo MoĪesz
Īesz zainstalowaü
zains
serwerze bazy danych i podáączaü siĊ zdalnie z pulpitu co zapobiegnie
zapo
pob
SQL Developer na
obciąĪeniu sieci.

O ly
DomyĞlne poáączenie odbywa siĊ przy pomocy sterownika
omocy sterownik ika JDBC T Thin, wiĊc Oracle Home nie

rozpakowaü pobrane pliki.


l & On
jest wymagany. SQL Developer nie wymaga uĪyciauĪyciaa programu
p do instalacji,
in wystarczy

n a e
UĪywając SQL Developer, uĪytkownicy mogą
mo ą podáączyü
uĪytkownicy mog czyü siĊ
podáąączy s do baz Oracle w wersji 9.2.0.1 i
póĨniejszej. Dotyczy to

t e r U
wáączając Expresss Edition. SQL D s edycji
o wszystkich edy
dycji bazy
Developer
eloper jest w pakiecie z JRE 1.5, z dodatkiem tools.jar dla

In
wspomaganiaa klienta Window
Windows. Kliencii Non
Non-Windows wymagają jedynie JDK 1.5.

c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II E-4
Instalacja SQL Developer

Pobierz zestaw Oracle SQL Developer i rozpakuj w


dowolnym katalogu swojego komputera.

m y
d e
E-5
a
Copyright © 2007, Oracle. Wszelkie prawa zastrzeĪone.

c
Instalacja SQL Developer
e A
c l
Oracle SQL Developer nie wymaga programu do instalacji. instalacji SQL Developer,
lacji. Do instalacj

a
potrzebne jest narzĊdzie rozpakowujące.
r
Aby zainstalowaü SQL Developer, wykonaj co nastnastĊpuje:
Ċpuje:
O ly
1. Stwórz katalog <local drive>:\SQL \SQL Developer.
Develo oper.

& On
2. Pobierz zestaw SQL Developer z

l
http://www.oracle.com/technology/software/products/sql/index.html
nology/software/
re/products/sql/in
3. Rozpakuj pobrany zestaw
n a e Developer
aw SQL Devel op w folderze stworzonym
oper s w kroku 1.

t e r
podwójnie na sqldeveloper.exe.
U s
Do uruchomienia SQL Developer, przejdĨ
developer.e e.
zejdĨ do <local drive>:\SQL Developer, i kliknij
przej

I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II E-5
Menu SQL Developer

2 4 6

1 3 5

m y
d e
E-6 Copyright © 2007, Oracle. Wszelkie prawa zastrzeĪone.

c a
Menu SQL Developer
e A
SQL Developer ma dwie zakáadki nawigacyjne.
c l
r a
• Connections Navigator: UĪywając tej zakáadki,
uĪytkowników do których masz dostĊp.
moĪesz
ki, mo wyĞwietlaü
Īesz wy Ğ obiekty bazy danych i

O ly
• Reporting Tab: UĪywając tej zakáadki,
tworzyü i dodawaü wáasne raporty. y.
moĪna
ki, mo uruchamiaü
hamiaü predefiniowane
Īna urucha pr raporty oraz

SQL Developer uĪywa lewej strony


l & On
ony do nawigacji odszukiwania i wybierania obiektów, a
cji dla odszukiwa
prawej strony do wyĞwietlania
n a e
nia informacji o zaznaczonych
z oobiektach. MoĪna dostosowaü wygląd i
zachowanie SQL Developer
Menu na górze zawiera
t e rustawiając
oper ustawiaj

U s ąc preferencje.
ąc p
iera standardowe pozycje, or oraz
az pozycje specyficzne dla SQL Developer.
1. View: Zawiera
2. Navigate:
I n wpáywające
wiera opcje wp
ate: Zawiera opcje
áyw na to, co jest wyĞwietlane w interfejsie SQL Developer
opc nawigacji do paneli i okien uruchomionych podprogramów
3. Run:

c l e
n: Zawiera opcje
4. Debug: Zawiera
opcj Run File i Execution Profile, związane z wyborem funkcji i procedury.
Zawie opcje, związane z wyborem funkcji i procedury.

r a
5. Source: Zawiera
6. Tools:
Z opcje, potrzebne przy edycji funkcji i procedur.
Tools Pozwala na wywoáanie narzĊdzi SQL Developer takich jak: SQL*Plus, Preferences,
O and
an SQL Worksheet

Oracle Database 10g: Podstawy jĊzyka SQL II E-6


Definiowanie poáączeĔ z bazą danych

• Musisz mieü przynajmniej jedno poáączenie z bazą


danych aby uĪywaü SQL Developera
• MoĪesz tworzyü i testowaü poáączenia
– do wielu baz danych
– do wielu schematów
• SQL Developer importuje automatycznie poáączenia
zdefiniowane w systemie w pliku tnsnames.ora.
• MoĪesz eksportowaü poáączenia do pliku XML.
• KaĪde stworzone poáączenie, jest wymienione w
hierarchii poáączeĔ nawigatora.

m y
d e
E-7 Copyright © 2007, Oracle. Wszelkie prawa zastrzeĪone.

c a
Tworzenie poáączeĔ z baza danych
e A
c l
Poáączenie jest obiektem SQL Developer zawierającym niezbĊdne
m niezb informacje do uzyskania
Ċdne infor

r a
poáączenia z okreĞloną bazą danych i okreĞlonym jej
Developera , musisz mieü przynajmniej jedno poáączenie
ej uĪytkownikiem.
uĪytkownikiem Aby uĪywaü SQL
poáąączenie
czenie z baza
baz moĪna skorzystaü z
aza danych, mo

O ly
poáączenia istniejącego, stworzyü je lub zaimportowaü.
aimportowaü.

Plik tnsnames.ora domyĞlnie


l & On
MoĪna tworzyü i testowaü poáączeniaa do wielu baz danych
nie jest zlokalizowany
zlokalizow
da
katalogu
owany w katalog
wielu schematów.
i do wiel

$ORACLE_HOME/network/admin.
n a e
rk/admin. MoĪe MooĪe równieĪ
równieĪ znajdowaü
zna siĊ w katalogu okreĞlonym
przez parametr TNS_ADMIN,
uruchamiania SQL
t e r
DMIN, który

U s ry jest zmienną
wyĞwietlania
L Developera i wy
zmienną Ğrodowiskową
Ğwietlania okna
Ğ lub ciągiem rejestru. Podczas
okn dialogowego poáączenia z bazą danych, SQL

In
Developer automatycznie
Uwaga: W systemie Windows,
Win
importuje poáączenia
omatycznie impo czen zdefiniowane w pliku systemowym tnsnames.ora.
áąączenia
jeĪeli istnieje plik tnsnames.ora ale poáączenia w nim zawarte nie

l
są uĪywane
e
ywane przez SQL
c
SQ Developer, zdefiniuj zmienną Ğrodowiskową TNS_ADMIN.
MoĪesz
r
MoĪesza
MoĪesz eksportowaü
eksporto
MoĪesz tworzyü
tw
poáączenia do pliku XML po to by uĪyü ich póĨniej.
dodatkowe poáączenia do tej samej bazy danych innych uĪytkowników lub do
Oinnych baz danych.

Oracle Database 10g: Podstawy jĊzyka SQL II E-7


Definiowanie poáączeĔ z bazą danych

m y
de
E-8
a
Copyright © 2007, Oracle. Wszelkie prawa zastrzeĪone.

c
A
Definiowanie poáączeĔ z bazą danych (kontynuacja)
e
c l
Aby stworzyü poáączenie z bazą danych, wykonaj nastĊpujące
Ċpujące
ące kroki:

r a
1. Dwukrotnie kliknij na <your_path>\sqldeveloper\sqldeveloper.exe.
2. Na zakáadce Connections, kliknij prawym
oper\sqldevelop
m przyciskiem na Connections
C i wybierz New
Database Connection.
O ly
3. Wstaw connection name, username, me, password, hostname,
ho SID ddla bazy danych, do której
chcesz siĊ poáączyü.
l & On
5. Kliknij Connect.
n a e
4. Kliknij Test aby upewniü siĊ, Īe poáączenie
siĊ, Īe poáąączenie
czen zostaáo
enie zostaáo zdefiniowane
zdef prawidáowo.

t e r
Na dole, na podstawowej
• Hostname: nazwa komputera
U s
zakáadce
stawowej zak dce strony wypeánij
áadc
komputer z baz
wype
baząą danych
danyc Oracle
opcje:

• Port: port
I n
ort Listener

l e
• SID:: nazwa bazy danych
da
• Service Name: nazwa serwisu sieciowego zdalnej bazy danych
c
ra
JeĪeli
JeĪeli zaznaczysz
zaznaczy pole wyboru save Password, hasáo zostanie zachowane w pliku XML. Po tym,
jeĪeli
jeĪeli zamkniesz
zamk poáączenie SQL Developer, to po otwarciu go ponownie nie bĊdziesz pytany o
Ohasáo.
hasáo

Oracle Database 10g: Podstawy jĊzyka SQL II E-8


WyĞwietlanie obiektów bazy danych

UĪyj Database Navigatora w celu:


• Przeglądania obiektów schematu w bazie danych
• Oglądania definicji obiektów

m y
d e
E-9 Copyright © 2007, Oracle. Wszelkie prawa zastrzeĪone.

c a
WyĞwietlanie obiektów bazy danych
e A
c l
JeĪeli stworzyáeĞ poáączenie z bazą danych, moĪesz uĪyü yü Database Navigatora
Nav do przeglądania

typy itd.
r a
obiektów schematu bazy danych wáączając w to: tabele, pakiety, procedury, wyzwalacze,
abele, indeksy, pa

O ly
SQL Developer uĪywa lewej strony do nawigacji znajdowania
najdowania i wybierania obiektów, a
awigacji tzn. zna

i zachowanie SQL Developera przez


l & On
prawej strony do wyĞwietlania informacji zaznaczonych
macji o zaznaczo obiektach. MoĪesz dostosowaü wygląd
zonych obiektach
rzez ustawieniee preferencji.
p

n a e
MoĪesz oglądaü definicje obiektów
biektów podzielone
podzielo zakáadki
elone na zak áadk zgodnie z podziaáem informacji ze
sáownika danych. Na przykáad
wiĊzów integralnoĞci,
t e r U
ci, uprawnieĔ, s
rzykáad jeĪeli
jeĪeli wybierzesz
wy
uprawnieĔ statystyk
nawigatorze tabelĊ, detale dotyczące kolumn,
w naw
innych są wyĞwietlane w wygodnym do odczytu,
s atystyk i innyc
podzielonym na zak
jak na slajdzie,
I n
zakáadki
áadki oknie.
oknie JeĪeli chcesz zobaczyü definicjĊ tabeli EMPLOYEES, tak
slajdzie, postĊpuj
po w sposób
ób nastĊpujący:

c l
1. RozwiĔ
e
ozwiĔ wĊzeá
wĊzeá poáączenia
RozwiĔĔ wĊzeá
2. Rozwi
poá
wĊze Tables.
w Connections Navigatorze

r a
3. Podwójni
Podwójnie kliknij na EMPLOYEES.

OUĪywaj zakáadki Data, moĪesz wprowadzaü nowe wiersze, poprawiaü dane oraz zatwierdzaü te
UĪywając
zmiany
zmia w bazie danych.

Oracle Database 10g: Podstawy jĊzyka SQL II E-9


Tworzenie obiektów schematu

• SQL Developer wspomaga tworzenie obiektów


schematu przez:
– wykonywanie poleceĔ SQL w SQL Worksheet
– uĪycie kontekstowego menu
• Edytuj obiekt uĪywając okna dialogowego lub jednego
z wielu menu kontekstowych
• Obejrzyj treĞü definicji (DDL) w celu zweryfikowania
podczas tworzenia nowego lub edycji istniejącego
obiektu schematu

m y
d e
E - 10 Copyright © 2007, Oracle. Wszelkie prawa zastrzeĪone.

c a
Tworzenie obiektów schematu
e A
c l
SQL Developer wspomaga tworzenie obiektów schematu wykonywanie poleceĔ SQL w
atu przez wykony

r a
SQL Worksheet. MoĪesz stworzyü obiekt inaczej, uĪywając
obiekt moĪe byü edytowany przy pomocy oknaa di
uĪywając
dialogowego
ąc kontekstowego
alogowego lub
kontek menu. Stworzony
lu jednego z wielu menu
kontekstowych.
O ly
l & On
Podczas tworzenia nowych obiektów w lub edytowania
weryfikacji. Opcja Export DDL jest dost
dostĊpna
Ċpna jeĪeli
istniejących
ia istniej ących treĞü definicji jest dostĊpna do
ących tr
tre
stworzyü peáną definicjĊ dla jednego
jeĪeli chcesz stwo
a e
lub wiĊkszej iloĞci obiektów w schemacie.
n
t e r
dialogowe do tworzenia
U s
Na slajdzie pokazano tworzenie
worzenie tabelii przy
tabeli,
zenia nowej tabe
p pomocy kontekstowego
ko menu. Aby otworzyü okno
prawym przyciskiem na Tables i wybierz Create
i kliknij praw

I n
TABLE. Oknaa dialogowe do tw
KaĪda z zakáadek
tworzeniaa i edyt
edytowania obiektów bazy danych mają wiele zakáadek.
káadek stanowi logiczną grupĊ wáasnoĞci okreĞlonego typu obiektu.

c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II E - 10
Twrzenie nowej tabeli: przykáad

m y
d e
E - 11 Copyright © 2007, Oracle. Wszelkie prawa zastrzeĪone.

c a
Tworzenie nowej tabeli: przykáad
e A
c l
W oknie dialogowym Create Table, jeĪeli nie zaznaczysz
moĪesz szybko stworzyü tabelĊ specyfikując kolumny
sz pola wyboru S
najczĊĞciej
ny oraz najcz
Show Advanced Options,
ĊĞc uĪywane wáasnoĞci.

r a
JeĪeli zaznaczysz pole wyboru Show Advanced d Options, no dialogowe Create Table zmienia
Options, okno

podczas tworzenia tabeli. O ly


siĊ w okno wielo-zakáadkowe, w którym moĪesz oĪesz wyspecyfikowaü
yfikowaü rozszerzony zestaw wáasnoĞci
wyspecyfi

l & On
Przykáad na slajdzie pokazuje tworzenie DEPPENDENTS z zaznaczonym
rzenie tabeli DEPENDENTS z polem wyboru
Show Advanced Options.

n a e
Aby stworzyü nową tabelĊĊ postĊpuj
postĊpuj zgodnie
dnie z opisanymi krokami:
zgodn

2. Wybierz Create
t e r
TABLE..
ate TABLE
U s
1. W Connections Navigatorze, klik
kliknij przyciskiem Tables.
knij prawym prz

4. Wypeánij In
3. W oknie dialogowym Cre Create Table,
ánij informacje o kolumnach.
wybierz Show Advanced Options.
e, wyb

ChociaĪ
c l e
5. PrzyciĞnij
rzyciĞnij OK.
OK.
hociaĪ nie jest to wymagane, powinno siĊ wyspecyfikowaü klucz gáówny uĪywając zakáadki

r a
Primary Key w oknie dialogowym. Czasami, moĪesz chcieü edytowaü definicjĊ stworzonej tabeli.
W celu ededycji kliknij prawym klawiszem na tabelĊ w nawigatorze poáączeĔ i wybierz Edit.
O
Oracle Database 10g: Podstawy jĊzyka SQL II E - 11
Korzystanie z SQL Worksheet

• UĪywaj SQL Worksheet do wprowadzania i


wykonywania poleceĔ SQL, PL/SQL, oraz SQL *Plus
• WprowadĨ dowolną akcjĊ, która moĪe byü
przetworzona przez zdefiniowane poáączenie z bazą
danych związane z obszarem roboczym

m y
d e
E - 12 Copyright © 2007, Oracle. Wszelkie prawa zastrzeĪone.

c a
Korzystanie z SQL Worksheet
e A
c l
Kiedy podáączasz siĊ do bazy danych, okno SQL Worksheet tego poáączenia otwierane
ksheet jest dla te

r a
automatycznie. MoĪesz uĪywaü SQL Worksheet do
PL/SQL, oraz SQL*Plus. SQL Worksheet wspomaga
o wprowadzania i wykonywania poleceĔ SQL,
pomaga polecenia SQL*Plus w okreĞlonym
nia S

przekazywane do bazy danych. O ly


zakresie. Polecenia SQL*Plus nie wspomagane
agane przez SQL Worksheet są ignorowane i nie są
QL Worksh

l & On
MoĪna wyspecyfikowaü dowolnąą akcjĊ,
akcjĊ, która mo
moĪe
Īe zostaü
zostaü przetworzona
prze przez bazĊ powiązaną
przez zdefiniowane poáączenie
n a e
nie z obszarem roboczym,
ro takąą jak:
tak j
• Tworzenie tabeli
• Wstawianie danych
nych
t e r U s
• Wybieranie
I n
• Tworzenie i edycja wyzwal
wyzwalaczy
tabeli
ranie danych z ta

MoĪesz
c l e
• Zachowywanie
achowywanie wy
oĪesz wyĞwietliü
wybranych danych w pliku
wyĞwietli SQL Worksheet uĪywając jednej z dwóch opcji:

r a
• Wybierz Tools > SQL Worksheet
• Kliknij
Klikn na ikonĊ Open SQL Worksheet.
O
Oracle Database 10g: Podstawy jĊzyka SQL II E - 12
Korzystanie z SQL Worksheet

2 4 6

1 8
5 7
3

m y
d e
E - 13 Copyright © 2007, Oracle. Wszelkie prawa zastrzeĪone.

c a
Korzystanie z SQL Worksheet (kontynuacja)
e A
c l
MoĪesz uĪywaü klawiszy skrótów lub ikon do wykonania zadaĔĔ takich jak wykonanie polecenia
nia zada

r a
SQL, uruchomienie skryptu, oglądanie historii wykonywanych
paska narzĊdzi SQL Worksheet, który zawiera ikony wykonuj
wykonujące
poleceĔ SQL. MoĪesz uĪywaü
konywanych pole
ąc nastĊpujące
jące nast zadania:

O ly
1. Execute Statement: Wykonuje polecenie wskazywane
cenie wskazywan
Statement. MoĪliwe jest uĪywaniee zmiennych wi
ane przez kursor w obszarze Enter SQL
wiązanych
ązanych w poleceniach
pol SQL, ale nie moĪna

l & On
uĪywaü zmiennych podstawienia.
enia.
ązanych

Runner. MoĪesz uĪywaü


n a e
2. Run Script: Uruchamia wszystkie polece
waü zmiennych
polecenia
cenia z obszaru EEnter SQL Statement uĪywając Script
h podstawienia w poleceniach SQL, nie moĪna uĪywaü
zmiennych wiązanych.
3. Commit: Zatwierdza e
anych.
t r U s
atwierdza zmiany w bazie i ko
koĔczy
Ĕ transakcje.
4. Rollback:
I n
k: Odwoáuje
Odwoáuje zmiany
zm bez zapisywania
apisy ich w bazie i koĔczy transakcje.
5. Cancel:

c l e
ncel: Przerywa wwykonanie trwającego polecenia.
6. SQL History: WyĞwietla
W okno dialogowe z informacją o wykonywanych poleceniach SQL.

r a
7. Execute Ex
Explain.
Explain
Explain Plan: Tworzy plan wykonania, który moĪna obejrzeü klikając na zakáadkĊ

O Clear: Kasuje polecenie lub polecenia z obszaru Enter SQL Statement.


8. Cle

Oracle Database 10g: Podstawy jĊzyka SQL II E - 13


Wykonywanie poleceĔ SQL

UĪyj obszaru Enter SQL Statement do wprowadzenia


jednego lub wielu poleceĔ SQL.

m y
d e
E - 14 Copyright © 2007, Oracle. Wszelkie prawa zastrzeĪone.

c a
Wykonywanie poleceĔ SQL
e A
c l
W SQL Worksheet, moĪesz uĪyü obszaru Enter SQL Statement do wprowadzeniawp jednego lub

r a
wielu poleceĔ SQL. Dla pojedynczego polecenia Ğrednikaednika moĪna
Sáowa kluczowe wpisywanych poleceĔ SQL ssąą automatycznie
moĪna uĪywaü
automatyczn
u opcjonalnie.
znie podĞwietlane.
po Przed wykonaniem
O ly
polecenia SQL upewnij siĊ, Īe kursor jest st na poleceniu i wci
wciĞnij
Ğnij ikonĊ
iko Execute Statement.

l & On
Alternatywnie moĪna przycisnąü klawiszwisz F9.
F9.
Aby wykonaü wiele poleceĔ SQL
moĪna przycisnąü klawisz F5.
F5.
n a e zobaczyüü wyniki
QL i zobaczy w wciĞnij
wciĞnij ikonĊ
i Run Script. Alternatywnie

W przykáadzie na slajdzie
Kursor znajduje siĊ
t e r U s
ajdzie mamy wieleele poleceĔ
wiel
pierwszego
siĊ w ramach pie
poleceĔ SQL,
SQL kaĪde wiĊc jest zakoĔczone Ğrednikiem.
polecenia, wykonanie dotyczy pierwszego polecenia, a
zego polec
rezultaty wykonania
I n
konania wyĞwietlane
wyĞwiet są w obszarze
obsz Results.

c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II E - 14
Oglądanie planu wykonania

m y
d e
E - 15 Copyright © 2007, Oracle. Wszelkie prawa zastrzeĪone.

c a
Oglądanie planu wykonania
e A
c l
MoĪna uruchomiü skrypt SQL i obejrzeü plan wykonania. nia. Aby wykonaü
wykona skrypt SQL wykonaj
kroki:
r a
1. Prawym klawiszem kliknij w obszarze Enter Statement,
ter SQL Statememen wybierz Open File z
rozwijalnego menu.
O ly
2. W oknie dialogowym dwukrotniee kliknij na plik .sql..sql.

l
3. Kliknij na ikonĊ Run Script. & On
n a e
Po dwukrotnym „klikniĊciu”” na plik .sql,
.sql, ppolecenia SQL są áadowane do obszaru Enter SQL
Statement. MoĪna wykonaü
obszarze Script Output.
put.
t e r
onaü caáy
caáy skryptt llub kaĪdą

U s kaĪdą liniĊ
liniĊ oddzielnie. Wyniki są wyĞwietlane w

Przykáad na slajdzie
wykonania. I n
ajdzie pokazuje pplan wykonania.
a. Plan wykonania
konania Ikona Execute Explain Plan generuje plan
wykonani jest sekwencja operacji wykonywanych w celu realizacji polecenia.

cl e
Plan wykonania mo moĪna
Īn oglądaü „klikając” na zakáadkĊ Explain.

r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II E - 15
Formatowanie kodu SQL

Przed
formatowaniem

Po
formatowaniu

m y
d e
E - 16 Copyright © 2007, Oracle. Wszelkie prawa zastrzeĪone.

c a
Formatowanie kodu SQL
e A
c l
MoĪliwe jest uĪycie akapitów, spacji, duĪych liter, liniii separacji w poleceniach
pole SQL. SQL

a
Developer pozwala na formatowanie kodu SQL.
r
W celu sformatowania kodu SQL kliknij prawymwym klawiszem m w oobszarze polecenia i wybierz
Format SQL.
O ly
W przykáadzie przed sformatowaniem
Po formatowaniu kod SQL zawiera
l & On
em kod SQL mia
iera ssáowa
miaá
áowa kluczowe
iaá sáowa kluczowe napisane maáymi literami.
sáowa kluczow
czowe napisane duĪymi
klucz d literami i polecenie wygląda
przejrzyĞciej.
na e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II E - 16
Korzystanie z snippets

Snippets są fragmentami kodu mogą peániü rolĊ wzorca


skáadni lub przykáadu.

m y
d e
E - 17 Copyright © 2007, Oracle. Wszelkie prawa zastrzeĪone.

c a
Korzystanie z snippets
e A
c l
MoĪesz chcieü zastosowaü okreĞlony fragment kodu jeĪeli Īeli uuĪywasz SQL Worksheet, tworzysz
Īywasz SQ

r a
lub edytujesz procedury i funkcje PL/SQL. SQL Developer
eveloper jest zaopatrzony
Snippets. Snippets są fragmentami kodu takimii jak funkcja SQ SQL,
zao we wáaĞciwoĞü
QL, dyrektywy optymalizatora, oraz

snippets do okna edytora. O ly


róĪne techniki zastosowane w programowaniuaniu PL/SQL. MoĪliwe
M Īliwe jest
Mo j przeciąganie i upuszczanie

l & On
W celu wyĞwietlenia Snippets, wybierz View > Snippets.
Snippets
S .
Okno snippets jest wyĞwietlane
n a e
lane po prawej stronie.
s MoĪliwe
Mo Īliw jest uĪycie listy rozwijanej w celu

t e
ukryte moĪna je wyĞwietliü. r
yĞwietliü.
U s
wyboru grupy. Przyciskk snippets jest poáoĪony
poáoĪony na prawym
praw marginesie okna, wiĊc jeĪeli okno jest

I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II E - 17
Korzystanie z snippets: przykáad

Wstaw
snippet

Edytuj
snippet

m y
d e
E - 18
a
Copyright © 2007, Oracle. Wszelkie prawa zastrzeĪone.

c
UĪywanie snippets: przykáad
e A
c l
W celu wstawienia snippet do kodu w SQL Worksheet lub procedurze albo a funkcji PL/SQL,

r a
przeciągnij snippet z okna Snippets i upuĞü we wáaĞciwym
Ğciwym miejscu kodu. NastĊpnie edytuj
skáadniĊ tak by funkcja SQL byáa poprawna w obecnym kontekĞcie.
kontek
ekĞ W celu uzyskania krótkiego

O ly
opisu funkcji SQL w „chmurce” trzymaj wska
wskaĨnik nazwą
Ĩnik nad nazazwą funkcji.
funk

l & On
Przykáad na slajdzie pokazuje przeciąganie
Character Functions do okna Snippets.
ąganie funkcji CONCAT(char1,
ąganie
Skáadnia
ppets. Sk
CO
CONCAT(char
áadniaa funkcji
f
char2) z grupy
CONCA jest edytowana a nastĊpnie
CONCAT

n a e
dodana zostaje reszta polecenia.
nia.

e r
FROM employees;
mployees;
t U s
SELECT CONCAT(first_name,
NCAT(first_n last_name)
_name, last_n

I n
c l e
O ra

Oracle Database 10g: Podstawy jĊzyka SQL II E - 18


Korzystanie z SQL*Plus

• SQL Worksheet nie wspomaga wszystkich poleceĔ


SQL*Plus
• MoĪliwe jest wywoáanie SQL*Plus z interfejsem linii
komend z SQL Developera

m y
d e
E - 19 Copyright © 2007, Oracle. Wszelkie prawa zastrzeĪone.

c a
Korzystanie z SQL*Plus
e A
c l
SQL Worksheet wspomaga niektóre polecenia SQL*Plus. us. Polecenia SQL*Plus
SQ muszą zostaü

r a
zinterpretowane przez SQL Worksheet przed przekazaniem
SQL*Plus nie wspomagane przez SQL Worksheet
kazaniem ich bazie
baz danych; kaĪde polecenie
ignorowane
owa i nie zostaje przekazane do
heet jest ignorow

Worksheet są: O ly
bazy danych. Na przykáad, poleceniami SQL*Plus, n ssąą obsáugiwane
QL*Plus, które nie ob przez SQL

• append

l & On
• archive

n a e
r
• attribute
• break
• change
t e U s
• clear
I n
Peána lista

c
Worksheet,l e
ista poleceĔ SQL*Plus, które są obsáugiwane i tych które nie są obsáugiwaneprzez SQL
poleceĔ SQL
dostĊpna w pomocy SQL Developer.
orksheet, jest dos

r a
W celu wyĞwietlenia
wyĞwi okna linii komend SQL*Plusa, wybierz SQL*Plus z menu Tools.

OCecha ta jest dostĊpna jeĪeli system z SQL Developerem ma katalog Oracle Home, z programem
SQL*Plus
SQL w tej lokalizacji. JeĪeli lokalizacja SQL*Plusa nie jest przechowywana we
wáasnoĞciach SQL Developer, narzĊdzie zapyta o specyfikacjĊ lokalizacji.

Oracle Database 10g: Podstawy jĊzyka SQL II E - 19


Raportowanie bazy danych

SQL Developer dostarcza wielu predefiniowanych


raportów o bazie danych i jej obiektach:

m y
d e
E - 20 Copyright © 2007, Oracle. Wszelkie prawa zastrzeĪone.

c a
Raportowanie bazy danych
e A
c l
SQL Developer dostarcza wielu raportów o bazie danych obiektach. Raporty te mogą byü
ch i jej obiektach
pogrupowane w nastĊpujące kategorie:
• Raporty o bazie danych
r a
• Raporty o tabelach O ly
• Raporty administracyjne o stanie bazy y

• Raporty o PL/SQLu
l & On
• Raporty o schematach
n
ch XMLa e
• Raporty dotyczące bezpieczeĔstwa
eczeĔstwa

• Raporty o zadaniach
• Raporty o potokach
iach
otokach
t e r U s
I n
• Raportyy o wszystkich obiektach
ob
• Raporty

c l e
porty o sáowniku
sáowniku danych
• Raporty zdefiniowane
zdefini przez uĪytkownika

r a
W celu wyĞwietlenia
wyĞwi raportów kliknij na zakáadkĊ Reports po lewej stronie okna. Indywidualne
raporty wyĞwietlane są w tabelce po prawej stronie okna; i dla kaĪdego raportu moĪesz

O wybraü
wy (metodą upuszczania) poáączenie z bazą danych, dla którego raport ma byü
uruchomiony. W raportach o obiektach, widoczne są tylko te obiekty, do których ma dostĊp
uĪytkownik związany z wybranym poáączeniem. Wiersze uporządkowane są zazwyczaj w
kolejnoĞci wedáug wáaĞciciela obiektu.

Oracle Database 10g: Podstawy jĊzyka SQL II E - 20


Tworzenie raportów przez uĪytkownika

Utwórz i zachowaj raport dla powtórnego uĪycia:

m y
d e
E - 21 Copyright © 2007, Oracle. Wszelkie prawa zastrzeĪone.

c a
Tworzenie raportów przez uĪytkownika
e A
c l
Raporty definiowane są tworzone przez uĪytkowników SQL Developer
Developera. W celu stworzenia
raportu wykonaj nastĊpujące kroki:
r a
1. Prawym klawiszem kliknij na wĊzeá User Defined ReporReports
orts pod wĊzáem Reports, i wybierz
Add Report.
2. W oknie dialogowym Create ReportO ly
ort Dialog, podaj nazwĊĊ raportu
daj nazw rapor i zapytanie SQL

l & On
wybierające dane dla raportu.. Kliknij Apply.
Applyy.
W przykáadzie na slajdzie nazwa
n a e
azwa raportu jest
st podana jako emp_sal.
e Opcjonalny opis dostarcza

t e r
informacji, Īe raport zawiera szczegóáy
wiera szczegó
polecenie SQL do wybierania inform
U s áy dotyczące
informacji
d
dotycz ące pracowników
ące praco
wyĞwietlanych
macji wy Ğwietla
z ppáacą >= 10000. Kompletne
w raporcie zdefiniowanym przez
uĪytkownika znajduje
wyĞwietlanych
I n
najduje siĊ
siĊ w polu SQL.. MoĪliwe
MoĪliw jest równieĪ zawarcie opcjonalnych opisów
ych podczas gdy wskaĨnik myszy
mys znajduje siĊ nad nazwa raportu w nawigatorze
raportów.
MoĪliwe
w.

cl e zorganizowanie raportów w katalogi, stworzenie hierarchii katalogów i


oĪliwe jest zorg

r a
podkatalogów.
podkatalogów W celu stworzenia katalogu dla raportów zdefiniowanych przez uĪytkownika
kliknij pra
prawym klawiszem na wĊzeá User Defined lub na dowolną nazwĊ katalogu pod tym
OwĊzáem
wĊzá i wybierz Add Folder.
Informacje o raportach zdefiniowanych przez uĪytkownika, wáączając w to katalogi dla raportów
są przechowywane w pliku o nazwie UserReports.xml w katalogu z informacjami
charakterystycznymi dla uĪytkownika.

Oracle Database 10g: Podstawy jĊzyka SQL II E - 21


Podsumowanie

W dodatku przedstawiono jak uĪywaü SQL Developera w


celach:
• WyĞwietlania, tworzenia, i edytowania obiektów bazy
danych
• Uruchamiania poleceĔ i skryptów SQL w SQL
Worksheet
• Tworzenia i zachowywania wáasnych raportów

m y
d e
E - 22
a
Copyright © 2007, Oracle. Wszelkie prawa zastrzeĪone.

c
Podsumowanie
e A
c l
SQL Developer jest darmowym narzĊdziem graficznym m stworzonym dlad uáatwienia zadaĔ

r a
bazodanowych. UĪywając SQL Developera, moĪliwe
obiektów bazy danych. MoĪliwe jest uĪycie SQL
wyĞwietlanie,
we jest wy Ğwietl tworzenie, i edytowanie
QL Worksheet do uuruchamiania poleceĔ i skryptów

O ly
SQL. UĪywając SQL Developera, moĪliwee jest edytowanie
nie i Ğledzenie
Ğledz PL/SQL.

do powtórnego uĪycia.
l & On
SQL Developer umoĪliwia tworzeniee i zachowywanie
nie wáasnych
wáasnych specjalnych
spe zestawów raportów

n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II E - 22
_________

Indeks
_________

m y
d e
ca
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
A
ALL INSERT 03-02, 03-16, 03-21, 03-35
ALTER 01-12
ALTER SESSION 05-04…05-09, 05-13, 05-17
ALTER TABLE 02-03…02-19, 06-16, 08-13
ALTER USER 01-11, 01-19
Architektura bazy danych D-1...D-30

B
Bezwarunkowa instrukcja INSERT ALL 02-19

C
CONNECT BY 06-07, 07-05…07-14
CONNECT BY PRIOR 07-05…07-14
CUBE 04-06…04-24
CURRENT_DATE 05-05, 05-06, 05-15, 05-34, 05-35
CURRENT_TIMESTAMP 05-05, 05-07, 05-08, 05-17, 05-34, 05-35
Czas Greenwich 05-03, 05-06, 05-14
Czas letni 05-03, 05-28, 05-32

D
Data i godzina 05-05…05-35
DBTIMEZONE 05-04, 05-09, 05-26, 05-34
m y
DEFAULT DIRECTORY 02-33, 02-35
Dodawanie kolumny 02-05
d e
DROP TABLE 02-26, 02-28, C-02, C-06
c a
E

e A
EXTRACT 05-25
c l
EXIST 06-14…06-16, 06-20, 06-21, 06-24, 06-26, 06-27
27

F
r a
FIRST INSERT 03-16, 03-22, 03-23
FLASHBACK TABLE 02-26...02-28 O ly
FROM_TZ 05-28
l & On
Funkcja daty i godziny 05-34,

n a e
4, 05-35
Funkcje konwersji 05-28...05-31
8...05-31

G
t e r U s
GROUP BY ROLLUP 04
I n
GROUP BY 03-07, 03-23, 04-03…04-23,
04 04-23, 06-07,
04-12, 04-17, 04-19
4
0 06-20, 06-24, 06-25

GROUPING

c
GROUPING l e
04-03…04-23
PING 04-03…
ROUPING SET 04-13, 04-15, 04-17, 04-21, 04-23

r a
O
Oracle Database 10g: SQL Fundamentals II Indeks-2
H
HAVING 03-05, 04-03, 04-05, 04-07, 04-09, 06-20, C-04

I
Indeksy funkcyjne 02-23, 02-24
INSERT 01-12, 01-15, 01-18, 02-06, 02-31, 03-03…03-06, 03-11…03-30
INTERVAL 05-18...05-24
INTERVAL DAY TO SECOND 05-23, 05-24
INTERVAL YEAR TO MONTH 05-21, 05-22

K
Klauzula WITH 06-22...06-24
Kolumna záoĪona 04-17, 04-19, 04-23
Konkatenowanie zbiorów grup 04-21...04-23
Korelacja 06-13

L
LEVEL 07-05, 07-10, 07-11, 07-14,
Likwidowanie 02-26, 02-28
LOCALTIMESTAMP 05-05, 05-08, 05-34, 05-35
LPAD 07-11

M
m y
Maksymalna liczba odrzuceĔ 02-33, 02-35
MERGE 03-27...03-30
d e
Metaznaki 08-04...08-06
Modyfikowanie kolumny 02-06 c a
e A
N
NLS_Date_Language 05-29
c l
NOT EXIST 01-16, 06-14, 06-16
NOT IN 03-11, 06-05, 06-06, 06-16
r a
O O ly
Obcinanie drzewa 07-13, 07-14
l & On
Obsáuga wyraĪeĔ regularnych
Odraczanie wiĊzów 02-133
n a e
ch 8-1…8-13

ON DELETE CASCADE
ORACLE_LOADER
t
ER 02-35
e r
DE 02-12

U s
ORGANIZATION
I n
ORDER BY 02-23, 04-03...04-05,
04-03...0 04-07,
4-07, 0
EXTERNAL 02-33, 02-35
ZATION EXTER 0
04-09, 06-08

cl e
r a
O
Oracle Database 10g: SQL Fundamentals II Indeks-3
P
Parametr dostĊpowy 02-33, 02-35
PIVOTING 03-16, 03-24, 03-25
Porównania niesmarowane 06-04
Porównania sparowane 06-04, 06-25
Poziomy wierszy 07-10
Przechodzenie drzewa 07-07...07-09
Pseudokolumna 07-05, 07-10, 07-14, 07-15

R
Raport o strukturze drzewa 07-02
Raporty krzyĪowe 04-09
REGEXP_INSTR 8-7
REGEXP_LIKE 8-7
REGEXP_REPLACE 8-7
REGEXP_SUBSTR 8-7
ROLLUP 04-06...04-23

S
SESSIONTIMEZONE 05-06…05-09, 05-26
SET TIME_ZONE 05-04, 05-06…05-09, 05-17
SET UNUSED 02-08
Skalarne zapytanie podrzĊdne 06-07...06-09
m y
Skorelowana aktualizacja 06-17, 06-18
Skorelowane zapytanie podrzĊdne 06-10…06-13
d e
Skorelowane zapytanie podrzĊdne aktualizujące 06-17, 06-18
Skorelowane zapytanie podrzĊdne usuwające 06-20, 06-21 c a
Specjalne wiersze agregowane 04-06, 04-08, 04-09

e A
Strefa czasowa 05-01...05-34
c l
START WITH 07-05, 07-06, 07-11, 07-14, 08-10

ĝ
r a
ĝledzenie zmian 02-31
O ly
T
l & On
TIMESTAMP 05-10...05-17
-17
17
n a e
Tabela zewnĊtrzna 02-29, 02-31, 02-37
2-31, 02-35, 02

TIMESTAMP WITH TH
t e r
TIMESTAMP WITH LOCAL TIMEZO

U s
TIMEZONE
ONE 05-16, 05-17
ZONE
H TIME ZONE 05-15
05

TO_DSINTERVAL
TO_YMINTERVAL
NTERVAL
I n
RVAL 05-30
TERVAL 05-31
Tworzenie

c
Tworzeniel e
enie bazy danych
zenie dany 05-09, C-03
indeksu 02-20, 02-21, 02-23, 02-38, 02-39
worzenie indeks

a
TZ_OFFSET 05-26, 05-34
r
O
Oracle Database 10g: SQL Fundamentals II Indeks-4
U
UNION 04-07, 04-10, 04-13, 04-17, 04-23
UNION ALL 04-07, 04-10, 04-13, 04-17, 04-23
Usuwanie kolumny 02-07

V
V$TIMEZONE_NAME 05-28
VERSIONS BETWEEN 03-34

W
WartoĞci krzyĪowe 04-09, 04-23
Warunkowa instrukcja INSERT 03-20...03-23
Wersje wierszy 03-36
WĊzeá gáówny 07-10
WĊzeá podrzĊdny 07-10
Wielokolumnowe zapytania podrzĊdne 06-03, 06-07
Wiersze krzyĪowe 04-06
WiĊzy 01-17, 02-07, 02-10…02-20, 06-07, 08-1, C-03
WiĊzy kaskadowe 02-18, 02-19
WiĊzy sprawdzania 08-13
Wáączanie wiĊzów 02-15, 02-16
Wyáączanie wiĊzów 02-15

m y
Z
ZaleĪnoĞü nadrzĊdny-podrzĊdny 07-04
d e
Zapytania hierarchiczne 03-05
Zapytanie o wersje 03-32 c a
Zapytanie podrzĊdne 03-04...03-11, 03-14, 03-17, 06-03…06_26,

e A
…06_26, 07-06, 07-07

Zapytanie z klauzulą wersji 03-32


c l
Zapytanie wewnĊtrzne 06-08, 06-10, 06-12, 06-14, 06-15
-15

ZastĊpowanie wzorców 08-12


r a
Zapytanie zewnĊtrzne 03-07, 06-08, 06-10, 06-12...06-14
-12...06-14

O ly
l & On
n a e
t e r U s
I n
c l e
r a
O
Oracle Database 10g: SQL Fundamentals II Indeks-5
m y
d e
ca
e A
c l
r a
O ly
l & On
n a e
t e r U s
I n
c l e
r a
O

You might also like