Professional Documents
Culture Documents
Podstawy Języka SQL II Tom1
Podstawy Języka SQL II Tom1
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.
m y
Oracle i wszelkie odwoáania do produktów Oracle są znakami towarowymi
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
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
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
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
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
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
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
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
Wymagania wstĊpne
• Oracle Database 10g: Podstawy jĊzyka SQL I
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
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:
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)
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
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
O
WstĊp - 6
Konwencje typograficzne (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
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
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
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
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
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.
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
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
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
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
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.
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
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
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ą
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
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
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
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.
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.
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ą
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:
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
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 1-15
Sprawdzanie nadanych uprawnieĔ
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
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
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
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.
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
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
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
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
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
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
I n
c l e
r a
O
Oracle Database 10g: Podstawy jĊzyka SQL II 2-5
Modyfikowanie kolumny
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.
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,
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.
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ą
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.
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
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.
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
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
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ü
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
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.
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
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.
• 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
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.
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.
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
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
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.
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
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
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
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
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.
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
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
m y
d e
2-26
c a
Copyright © 2006, Oracle. Wszelkie prawa zastrzeĪone.
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.
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.
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
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).
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;
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.
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
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.
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
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.
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Ĕ
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
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
l & On
UĪycie tabel zewnĊtrznych do tworzenia zapytaĔ,
taĔ, bez koniecznoĞci
worzenia zapyta konieczn áadowania danych do
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
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
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)
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.
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
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
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
33 rows created.
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 *.
O SELECT *
FROM employees;
WiĊcej informacji na ten temat moĪna znaleĨü w PodrĊczniku jĊzyka SQL bazy danych
Oracle 10g.
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
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 =
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.”.
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
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
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
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
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Ī
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
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
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.
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
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.
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.
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.
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
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
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
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.
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
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
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
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);
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;
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
…
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
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Ċ.
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.
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
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
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
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.
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.
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 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.
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
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;
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
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.
• 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.
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:
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
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
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,
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
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
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.
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,
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.
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.
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
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.
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.
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.
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
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 ( );
m
L
e
GROUP BY b UNION ALL
d
GROUP BY c
A
GROUP BY b UNION ALL
GROUP
OUP BY 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
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ą).
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
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)
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
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
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
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
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
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
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
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
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
ALTER SESSION
SET NLS_DATE_FORMAT = 'DD-MON-YYYY HH24:MI:SS';
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:
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
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
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
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.
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
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
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
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;
…
… 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,
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Ċ.
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
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
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.
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
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
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
MONTH od 00 do 11
HOUR od 00 do 23
MINUTE od 00 do 59
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
c
Typ danych INTERVAL YEAR TO MONTH
e A
c l
Typ danych INTERVAL YEAR TO MONTH sáuĪy do przechowywania
przechowywan informacji
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
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
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
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
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
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
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”.
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.
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
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_
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;
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.
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.
… 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
…
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
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
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
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.
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
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
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.
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
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.
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
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
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;
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
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 Ċ
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
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
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
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
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
l & On
JeĞli Īaden wiersz nie istnieje, to
o operator zwraca
aca wartoĞü
zwrac wartoĞü FALSE.
FAL Analogicznie operator
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
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)
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
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
+ 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
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)
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
O FROM job_history JH
WHERE JH.employee_id = E.employee_id
GROUP BY EMPLOYEE_ID
HAVING COUNT(*) >= 4));
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
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
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
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
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.
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
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
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.
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.
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
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
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
Fay
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
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
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.
Punkt startowy.
• OkreĞla warunek, który musi byü speániony.
• Akceptuje dowolny poprawny warunek.
START WITH column1 = value
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
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.
Kierunek
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.
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.
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
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
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
Poziom 3
Wiersz
Whalen Higgins Hunold Rajs Davies Matos Vargas nadrzĊdny/podrzĊdny/liĞü
Fay
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.
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.
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
Kochhar Kochhar
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';
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
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:
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
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
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
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.
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
Skáadnia
metaznak Nazwa operatora Opis
u
. Dowolny znak — kropka Oznacza dowolny znak
c a na liĞcie ...
| lub
(…)
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
r a
[:class:]
[:class: Klasa znaków POSIX Oznacza dowolny znak naleĪący do
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
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
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.
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
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;
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:]]+'.
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
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
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
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
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
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
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.”
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.
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:
cą
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;
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.
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
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)
DESCRIBE emp2
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.
DESCRIBE employees2
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.
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.
ALTER TABLE emp2
ADD CONSTRAINT my_emp_dept_id_fk
FOREIGN KEY (dept_id) REFERENCES dept2(id);
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.
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.
DESC sal_history
DESC mgr_history
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)
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.
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)
y
LOCATION ('emp.dat') ) ;
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);
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.
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);
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
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.
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.
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;
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
oĞ
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.
SELECT DBTIMEZONE,SESSIONTIMEZONE
FROM DUAL;
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;
„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_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Ċ.
„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.
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
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
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.
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
r a WHERE
W dept_total > ( SELECT SUM(dept_total) * 1/8
FROM summary )
O ORDER BY dept_total DESC;
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
O r C
CONNECT
/
BY PRIOR employee_id = manager_id
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.”
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
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
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;
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
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
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
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
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
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
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
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.
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
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.
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 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.
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
'''' '
''''||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
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
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.
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.
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
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
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
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:
- 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
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.
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Ĕ
Bufor dziennika
powtórzeĔ
Proces
zapisywania
dziennika
LGWR
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 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
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
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.
Database
Java pool Redo log buffer
buffer cache
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
SGA
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.
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
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
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
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
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
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.
UĪytkownik Serwer
Serwer Oracle
UĪytkownik Serwer
Klient
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.
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
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.
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
• 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.
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
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)
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.
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
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.
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Ĕ
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,
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
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
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
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
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?
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
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
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
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
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
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ü.
$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.
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
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
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.
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
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
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
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
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Ċ
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
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
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
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.
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.
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.
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.
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
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