Robert Chwastek
Bazy danych
Bazy danych
Robert Chwastek
2
!" # $
% &"'
w Krakowie.
( #
) *
Copyright (c) Robert Chwastek, Kraków 1996.
Bazy danych
Robert Chwastek
3
+ #,
1.
E ............................................................................................................................................5
1.1.
D
EFINICJA BAZY DANYCH
............................................................................................................................................... 5
1.2.
S
........................................................................................................................... 6
1.3.
T
RANSAKCJE
.................................................................................................................................................................. 6
1.4.
J
........................................................................................................................ 7
2.
TYPY DANYCH ............................................................................................................................................................... 8
2.1.
S
PIS TYPÓW DANYCH
...................................................................................................................................................... 8
2.2.
T
YP NUMERYCZNY
......................................................................................................................................................... 8
2.3.
K
ONWERSJE TYPÓW
..................................................................................................................................................... 10
2.4.
W
......................................................................................................................................................... 10
3.
MODEL RELACYJNY .................................................................................................................................................. 12
3.1.
S
TRUKTURY DANYCH W MODELU RELACYJNYM
........................................................................................................... 12
3.2.
R
SQL ................................................................................................................................................ 13
3.3.
S
SQL ......................................................................................................................................... 14
3.3.1. Definicje podstawowe ............................................................................................................................................ 14
3.3.2. Rozkaz CREATE TABLE........................................................................................................................................ 15
3.3.3. Rozkaz DROP ........................................................................................................................................................ 16
3.3.4. Rozkaz INSERT ...................................................................................................................................................... 17
3.3.5. Rozkaz DELETE .................................................................................................................................................... 18
3.3.6. Rozkaz CREATE SEQUENCE ............................................................................................................................... 19
3.3.7. Rozkaz SELECT ..................................................................................................................................................... 21
3.3.8. Rozkaz UPDATE.................................................................................................................................................... 22
3.3.9. Rozkaz RENAME ................................................................................................................................................... 23
3.3.10.
Rozkaz ALTER TABLE ..................................................................................................................................... 24
3.3.11.
Rozkaz CREATE INDEX .................................................................................................................................. 25
3.3.12.
Rozkaz CREATE VIEW .................................................................................................................................... 27
3.3.13.
Rozkaz COMMIT.............................................................................................................................................. 28
3.3.14.
Rozkaz ROLLBACK.......................................................................................................................................... 28
3.3.15.
Rozkaz SAVEPOINT......................................................................................................................................... 28
3.3.16.
Rozkaz SET TRANSACTION ............................................................................................................................ 29
3.4.
O
PERACJE RELACYJNE
.................................................................................................................................................. 30
3.4.1. Selekcja .................................................................................................................................................................. 30
3.4.2. Projekcja................................................................................................................................................................ 31
3.4.3. Produkt .................................................................................................................................................................. 32
3.4.4.
..............................................................................................................................................................32
3.4.5.
..........................................................................................................................................33
3.4.6. Grupowanie ........................................................................................................................................................... 34
3.4.7.
..................................................................................................................35
3.5.
P
ODZAPYTANIA
............................................................................................................................................................ 35
3.6.
W
IDOKI
(
PERSPEKTYWY
).............................................................................................................................................. 37
3.7.
T
RANSAKCJE
................................................................................................................................................................ 38
3.8.
N
ORMALIZACJA RELACJI
.............................................................................................................................................. 38
3.8.1. Cele normalizacji ................................................................................................................................................... 38
3.8.2. Pierwsz
.....................................................................................................................................39
3.8.3. Definicje pomocnicze ............................................................................................................................................. 40
3.8.4.
.........................................................................................................................................44
3.8.5.
.......................................................................................................................................46
3.8.6. Czwarta pos
......................................................................................................................................47
3.8.7.
...........................................................................................................................................48
3.8.8. Podsumowanie ....................................................................................................................................................... 48
4.
IA..........................................................................................................................................50
4.1.
O
PERATORY
................................................................................................................................................................. 50
4.1.1. Operatory arytmetyczne......................................................................................................................................... 50
4.1.2. Operatory znakowe ................................................................................................................................................ 50
4.1.3. Operatory porównania .......................................................................................................................................... 51
4.1.4. Operatory logiczne ................................................................................................................................................ 52
4.1.5.
! ........................................................................................................................................53
Bazy danych
Robert Chwastek
4
4.2.
W
................................................................................................................................................................. 53
4.3.
W
ARUNKI
..................................................................................................................................................................... 55
5.
STANDARDOWE FUNKC
............................................................................................................. 57
5.1.
F
UNKCJE NUMERYCZNE
............................................................................................................................................... 57
5.2.
F
UNKCJE ZNAKOWE
...................................................................................................................................................... 57
5.3.
F
UNKCJE GRUPOWE
...................................................................................................................................................... 59
5.4.
F
UNKCJE KONWERSJI
.................................................................................................................................................... 60
5.5.
F
UNKCJE OPERACJI NA DATACH
................................................................................................................................... 61
5.6.
I
NNE FUNKCJE
.............................................................................................................................................................. 63
5.7.
F
ORMATY ZAPISU DANYCH
........................................................................................................................................... 64
5.7.1. Formaty numeryczne ............................................................................................................................................. 64
5.7.2. Formaty dat ........................................................................................................................................................... 64
6.
PROGRAMOWANIE PROCEDURALNE - PL/SQL................................................................................................. 66
6.1.
W
PROWADZENIE
.......................................................................................................................................................... 66
6.2.
S
TRUKTURA BLOKU
...................................................................................................................................................... 67
6.3.
P
ROCEDURY I FUNKCJE
................................................................................................................................................ 67
6.4.
K
URSORY
..................................................................................................................................................................... 68
6.5.
R
EKORDY
..................................................................................................................................................................... 70
6.6.
O
....................................................................................................................................................... 71
6.6.1. Informacje podstawowe ......................................................................................................................................... 71
6.6.2.
"! #$ ......................................................................................................................................... 73
6.6.3.
% !&.................................................................................................................................................. 73
6.6.4.
"! #$ '! ............................................................................................................... 74
6.7.
R
PL/SQL .......................................................................................................................................... 75
6.7.1. Rozkaz OPEN ........................................................................................................................................................ 75
6.7.2. Rozkaz CLOSE....................................................................................................................................................... 76
6.7.3. Rozkaz FETCH ...................................................................................................................................................... 76
6.7.4. Rozkaz SELECT ... INTO....................................................................................................................................... 77
6.7.5. Rozkaz IF ............................................................................................................................................................... 77
6.7.6. Rozkaz LOOP ........................................................................................................................................................ 78
6.7.7. Rozkaz EXIT .......................................................................................................................................................... 80
6.7.8. Rozkaz GOTO ........................................................................................................................................................ 80
7.
LITERATURA................................................................................................................................................................ 81
Bazy danych
Robert Chwastek
5
1.
1.1. Definicja bazy danych
W pewnym uproszczeniu przez
-
danych, a przez system bazy danych
" -
) * #
* . - ) / ) -
- - # 0
# - # 1*
2 # ) -/ rozumiany jako:
#/ "
#/ " # -3 -4
# ) -/
-3 *
. 0 1 - )
#
* (
jest opis semantyki (znaczenia) danych, przechowywanych w bazie. System bazy danych
) # 0 1* ( -
#/ modelu danych. Przez model danych rozumiemy
- - / ) # #
#
* 5- / )
#
#
rzeczywistego, istotnych z punktu widzenia danego zastosowania tworzy schemat bazy
danych. Baza danych jest modelem logicznie spójnym
) # celowi. W
- ) 0 1 /
#*
5 - ## # ) *
+ ) -
- aplikacjami*
* & - - -/
*
- ) #
tym celu aplikacje.
6) / ) ) - ,
3
)
#
* - * 0 #1
-
*
)
- )
*
Schemat jest opisem struktury (formatu) przechowywanych danych oraz wzajemnych
7 *
Bazy danych
Robert Chwastek
6
1.2.
danych (SZBD) jest to zestaw programów
)
- * +
-
jest oprogramowaniem ogólnego przeznaczenia. System bazy danych
-
-
) *
1.3. Transakcje
$ -
#/ 0#/ #1* $
* - ) /
- )* ( #
-
przypadku niepowodzenia którejkolwiek z nich wycofuje instrukcje uprzednio wykonane.
. # -
,
Bazy danych
Robert Chwastek
7
1.4.
8 - )
/ ) ,
0
9 " 91
)
definiowanie struktury danych przechowywanych w bazie, czyli tworzenie schematu
implementacyjnego
0 6 9 " 691 )
- *
0
:
9 " :91
)
transakcjami (np. zatwierdzanie lub wycofywanie)
7 0; 91
)
- -
zgodnych z podanymi warunkami
Bazy danych
Robert Chwastek
8
2. Typy
danych
2.1. Spis typów danych
Typ
Opis
char(size)
: # ) *
) / <==* (
# #/ >
character
Synonim do char
varchar(size)
W aktualnej wersji ORACLE’a jest to synonim do char, konieczne jest
* ( )
- # ? *
date
Poprawne daty z zakresu 1 stycznia 4712 p.n.e. do 31 grudnia 4712 n.e.
# @ "6A"BB *, CD>"8%"EFG
long
: # ) H==!= *
6) / - *
long varchar
synonim do long
raw(size)
: - #* + *
I <==* ( #
*
long raw
: - #* . # *
(
#
szesnastkowej.
rowid
J #/ * .
*
) -/
-
przechowywana, ale obliczana na podstawie informacji o fizycznym
) * ( #/ ) -/
ROWIDTOCHAR.
number
$ * 8
# /
>*D K
10
-129
do 9.99 * 10
124
* 6)
- )*
2.2. Typ
numeryczny
$ ) -
*
)
/
trzech sposobów:
number
number (precyzja)
number (precyzja, skala)
Bazy danych
Robert Chwastek
9
. # - ) / > !E* +
# -
) /
-84 do 127.
W momencie definiowania kolumny numerycznej dobrym zwyczajem jest
)
# # - *
8# #/ -* 8# #/
* 8# #/
- 4 * 0>D "<1
* : ) )
* A ) - /
- ) 4 , -0L =1 -
*
9- ) ) / * +
-# M
- >D
- )/
*
9.87E-2 oznacza 9.87 * 10
-2
.
N - )
AI%:9MG -* 6) *
- - - ,
Bazy danych
Robert Chwastek
10
Specyfikacja
Typ
Precyzja
Skala
number
number
38
null
number(*)
number
38
null
number(*, s)
number
38
s
number(p)
number
p
0
number(p,s)
number
p
s
decimal
number
38
0
decimal(*)
number
38
0
decimal(*, s)
number
38
s
decimal(p)
number
p
0
decimal(p, s)
number
p
s
integer
number
38
0
smallint
number
38
0
float
number
38
null
float(*)
number
38
null
float(b)
number
b
null
real
number
63 binary (18 decimal)
null
double precision
number
38
null
2.3. Konwersje
typów
( - )
* / - -
) * / - /
* .) - )
AI%:9M,
Z typu
Do typu
char
number
date
char
-
TO_NUMBER
TO_DATE
number
TO_CHAR
-
TO_DATE
date
TO_CHAR
)
-
2.4.
. - / # )
- - * ( #/ 0J991 #
D - ) J99
) #/ 0J991*
2 O9 / # 0 1 -
# # # * O9 ,
Bazy danych
Robert Chwastek
11
O90:A66 D1 #/ :A66 #/ - D # :A66
#/ J99*
(#/ #/ J99* *
- # #, >DDD J99 J99
J99 <DDD >=DD ) 0>DDD P <DDD1Q< R >=DD*
8 ) )/ # N+ J99 N+
A$ J99* 8# ) #
# * . ) J99 - #
) -/ # ) J99*
AI%:9M * $
:A66 R J99 +M9M:$
) * 8 AI%:9M
-*
Bazy danych
Robert Chwastek
12
3. Model
relacyjny
5 -
podstawowych elementów:
relacyjnych struktur danych
)
bazy danych
# - # #
3.1. Struktury danych w modelu relacyjnym
. - - nu
7
- -
#* (
bazach danych relacja przedstawiana jest w postaci tabeli. Relacja jest zbiorem krotek
) #* S)
- * S) -
- * S) 0 - 1 #,
0 1
- 0 1
#/ 0 1
#/ - 0 1
# - 0 1
. - ,
! "
#
$%
&
'()*)+)*,-'
.
/"
&
01)-2))(,-'
3
4
++2)2()()*+
!
'))2)2)2(*2
!
5
&
112(2()2((*
/ "
6 %
!"
&78
- #
- * ( )
Bazy danych
Robert Chwastek
13
-
# ) *
- #
-
* ( #
- -
jedna jak i druga terminologia.
$- ) /,
zbiór encji wraz z atrybutami
- 7 -
- - 0 - 1
S) - -
* (
-
/
"
zabezpieczenie przed tym powtórzeniem jest realizowane poprzez pola kluczowe. Wiersze
) " -
* ( - -
" ) ) #/
#*
( - - ) /
,
J) - * S /
/ - 0)
#/1*
3
- -
tabeli.
$ - -
" - # )*
J ) - *
Unikaj powtarzania informacji w bazie danych (normalizacja).
3.2.
QL
.) - +;9
* A - # # *
Rozkaz
Typ
Opis
ALTER TABLE
DDL
-
- - #/
CREATE INDEX
DDL
Tworzy indeks dla tabeli
CREATE
SEQUENCE
DDL
$ - ) - "
* +
) )/
unikalnych identyfikatorów w tabelach
CREATE TABLE
DDL
$
-
przestrzeni dla danych
Bazy danych
Robert Chwastek
14
CREATE VIEW
DDL
-
#
- -
innych widoków
DELETE
DML
J - ) -
DROP obiekt
DDL
J - - -
INSERT
DML
Dodaje nowy wiersz (lub wiersze) do tabeli lub widoku
RENAME
DDL
5 - - -
SELECT
DML
Wykonuje zapytanie. Wybiera wiersze i kolumny z jednej
lub kilku tabel
UPDATE
DML
Zmienia dane w tabeli
COMMIT
DML
S7
ROLLBACK
DML
(
-
punktu.
SAVEPOINT
DML
Zaznacza punkt, do którego mozliwe jest wykonanie
rozkazu ROLLBACK
SET
TRANSACTION
DDL
5
" 0
odczytu).
3.3.
!
3.3.1.
Definicje podstawowe
N 0 1 " #
- # * I) - )
0* CTG - CUG1* +
3 -
##
napisanych w ten sposób aplikacji.
+ " )
+;9* +
+;9
ORACLE’a przedstawia tabela:
access
add
all
alter
and
any
as
asc
audit
between
by
char
check
cluster
column
comment
compress
connect
create
current
date
dba
decimal
default
delete
desc
distinct
drop
else
exclusive
exists
file
float
for
from
grant
graphic
group
having
identified
if
immediate
in
increment
index
install
initial
insert
integer
intersect
into
is
level
like
lock
long
maxextents
minus
mode
modify
noaudit
nocompress
not
nowait
null
number
of
offline
on
online
option
or
order
pctfree
prior
privileges
public
raw
Bazy danych
Robert Chwastek
15
rename
resource
revoke
row
rowid
rownum
rows
select
session
set
share
size
smallint
start
successful
synonym
sysdate
table
then
to
trigger
uid
union
unique
update
user
validate
values
varchar
vargraphic
view
whenever
where
with
9- " -/ - * 9-
* ( AI%:9M - ) / -
* 2 - - >D
) )/ - CG - CMG* .,
7E2 = 7 * 10
2
25e-03 = 25 * 10
-3
AI%:9M - ) 7/ CSG -
C6G* 9 CSG ) - -/ ) >D<L 0> S1
C6G ) - ) )/ >DLE=VH 0> 61* .,
256K = 256 * 1024
1M = 1 * 1048576
I +;9 7 #
3.3.2.
Rozkaz CREATE TABLE
I :IM%$M $%9M ) - 0- 1
) ,
# -
# -
- #
- -
I :IM%$M $%9M ,
CREATE TABLE [user.]table
( {column_element | table_constraint}
[, {column_element | table_constraint} ] ... )
[ PCTFREE n ] [ PCTUSED n ]
[ INITTRANS n ] [ MAXTRANS n ]
[ TABLESPACE tablespace ]
[ STORAGE storage ]
[ CLUSTER cluster (column [, column] ...) ]
[ AS query ]
Parametry:
" # - # # -
- * $- ) ) /
- 0%1
Bazy danych
Robert Chwastek
16
- " - -/ * ( -
) /
W " #
* $- / 0 1
- W " # / -
- " # - ) #/ -
" # -
" # 0 # -/ # - 1
) / -
query - jest poprawnym zapytaniem takim samym jak zdefiniowane w rozkazie
+M9M:$* 8# ) / "
# * 6)
)
-
* 9-
-/
sama jak liczba kolumn w zapytaniu.
.,
CREATE TABLE pracownicy(
nr_pracownika NUMBER NOT NULL PRIMARY KEY,
imie CHAR(15) NOT NULL CHECK (imie = UPPER(imie)),
nazwisko CHAR(25) NOT NULL
CHECK (nazwisko = UPPER(nazwisko)),
nr_wydzialu NUMBER (3) NOT NULL
);
3.3.3.
Rozkaz DROP
I ) - ) * A /
,
DROP object_type [user.]object
.) ) )
poszczególnych typów obiektów:
DROP CLUSTER [user.]cluster [INCLUDING TABLES]
- kasowanie
* ( N:9JN& $%9M+
- * 8#
N:9JN& $%9M+ -/
) - * 8 -
- -*
DROP [PUBLIC] DATABASE LINK link
" * 8#
- / ) 0%1*
DROP INDEX [user.]index
- kasowanie indeksu.
DROP [PUBLIC] ROLLBACK SEGMENT segment
- kasowanie segmentu
0 -1* 6) /
)
* S
)
/
tylko administrator bazy danych.
Bazy danych
Robert Chwastek
17
DROP SEQUENCE [user.]sequence
- kasowanie sekwencji.
DROP [PUBLIC] SYNONYM [user.]synonym
- usuwanie synonimu. Synonim
- ) / 0%1* .
) / # *
DROP TABLE [user.]table
" - * ( -
# - ) * (
- *
DROP TABLESPACE tablespace [INCLUDING CONTENTS]
- usuwanie
- * I
) -/
0%1* (
przypadku podania klauzuli INCLUDING CONTENTS obszar danych zostanie
* 8# N:9JN& :A$M$+
- *
DROP VIEW [user.]view
" * .
-
*
3.3.4.
Rozkaz INSERT
I - - - )
* %- / - ) -/ # -
0%1 - / - *
+ ,
INSERT INTO [user.]table [ (column [, column] ...) ]
{ VALUES (value [, value] ...) | query }
Parametry:
" # -
- " -
" - -
? " #/ # *
( #/ ) -/ )* 8# #/
J99 -/ # *
X " +M9M:$ #/ #
# # * 5
) / AIMI 2AI 2AI
UPDATE.
Opis:
I N+MI$ ) O%9JM+ *
# 0 - 1
#* S # #
J99 0 -/ A$ J991*
8# ) +M9M:$ O%9JM+ )
# 0 1* .
Bazy danych
Robert Chwastek
18
-
# 0 - # 1*
5 ) / ) - *
( #
* .
-/ #/ - *
Y # ) *
.,
INSERT INTO pracownicy VALUES
(50, ‘JAN’, ‘KOWALSKI’, 3);
INSERT INTO ksiazki (tytul, autor, miejsce)
SELECT 'Pan Tadeusz', autor_nr, miejsce_nr
FROM autorzy, miejsca
WHERE nazwisko = 'Mickiewicz' AND
miejsce = 'lewa polka'
;
3.3.5.
Rozkaz DELETE
I M9M$M ) - *
+,
DELETE [FROM] [user.]table [alias] [WHERE condition]
Parametry:
" )
- " - - ) /
" - ) M9M$M
" / ) /* ( )
/ - /
* S - ) - -
- # $IJM - 2%9+M*
Opis:
: 7
- *
.,
Skasowanie wszystkich wierszy w tabeli pracownicy:
DELETE FROM pracownicy ;
+
)
numerem 2:
DELETE FROM ksiazki WHERE autor = 2 ;
Bazy danych
Robert Chwastek
19
3.3.6.
Rozkaz CREATE SEQUENCE
$ - 0 1 )
) / - * + -/ )
-
*
przynajmniej uprawnienia RESOURCE w conajmniej jednej przestrzeni tabel.
+,
CREATE SEQUENCE [user.]sequence
[INCREMENT BY n]
[START WITH n]
[MAXVALUE n | NOMAXVALUE]
[MINVALUE n | NOMINVALUE]
[CYCLE | NOCYCLE]
[CACHE n | NOCACHE]
[ORDER | NOORDER]
Parametry:
" )
X " -/ -/
-- ) *
N:IM6M$ B " # ) -* 8#
- - -
" * # #/ >*
) - ) D*
+$%I$ (N$' " - -/ *
# # 6NO%9JM 6%ZO%9JM
* J
#/ MZ$O%9*
6NO%9JM " # #/ ) / *
# > #/
">D<V P >* . A6NO%9JM ) -
/ # *
6%ZO%9JM " # # ) / *
( # # "> >D<V " >
* ( A6%ZO%9JM ) -
/ # *
:B:9M A:B:9M " # # A:B:9M ) )
7 * (
) - -* (
:B:9M #
# 0 1 - #
0
1
cykl generacji numerów.
Bazy danych
Robert Chwastek
20
:%:'M A:%:'M " :%:'M "
-#
-* S A:%:'M ) #/* #
:%:'M <D* (
#/
:%:'M -/ )
MAXVALUE - MINVALUE.
AIMI AAIMI " AIMI ) - -
*
S AAIMI #/* S #/
) ) #/ 0 1
* 5
)
do generacji kluczy pierwotnych.
Opis:
+ -/ ) -
- - ) * %- / #
) ) / +M9M:$ * +
) / *
) - -/
) - ) - ) * 8
) ) )
) *
) ) / - ) )
0 ) ) 1*
, MZ$O%9 :JIIO%9*
. MZ$O%9 ) #
* + ,
sequence.NEXTVAL
X *
. :JIIO%9 # *
%- ) - ) :JIIO%9 # ) MZ$O%9
* + ,
sequence.CURRVAL
X *
. MZ$O%9 :JIIO%9 -/ ) ,
+M9M:$ +M9M:$ 0 1
# # N+MI$
) +M$ J.%$M
. MZ$O%9 :JIIO%9 ) ) / ,
podzapytaniach
#
N+$N:$
z klauzulami ORDER BY, GROUP BY i HAVING w rozkazie SELECT
z operatorem ustawienia (UNION, INTERSECT, MINUS)
Bazy danych
Robert Chwastek
21
.,
CREATE SEQUENCE eseq INCREMENT BY 10 ;
INSERT INTO pracownicy
VALUES (eseq.NEXTVAL, ‘Jan’, ‘Kowalski’, 3) ;
3.3.7.
Rozkaz SELECT
I +M9M:$ ) # - - *
6) -/ ) - - 0 1
- * %- / # - - -/
# /
+M9M:$
- - -/
-
(DBA).
+,
SELECT [ALL | DISTINCT]
{* | table.* | expr [c_alias] }
[, { table.* | expr [c_alias] } ] ...
FROM [user.]table [t_alias]
[, [user.]table [t_alias]] ...
[ WHERE condition ]
[ CONNECT BY condition [START WITH condition] ]
[ GROUP BY expr [. Expr] ... [HAVING condition] ]
[ {UNION | INTERSECT | MINUS} SELECT ...]
[ ORDER BY {expr | position} [ASC | DESC]
[, {expr | position} [ASC | DESC]] ] ...
[ FOR UPDATE OF column [, column] ... [NOWAIT] ]
Parametry:
%99 " # )
+M9M:$ / *
N+$N:$ " # ) /
* #
# ) +M9M:$ - *
K " )
-
/
pokazane.
- *K " ) - /
[ " ) #
W " 0 1 ) )
# * ( ) -
* % -/ )
miejscu zapytania.
\*] - " # - ) /* 8# )
#
)
0
SELECT).
Bazy danych
Robert Chwastek
22
W " # / - - *
# ) * (
- / *
" / -
* ( # *
"
-
)
SELECT, a nie na nazwie.
%+: M+: " # ) -/ #
- 0 1*
" ) - 2IA6*
A(%N$ " # ) AI%:9M / )
/ ) #/ -
- ) *
Opis:
J) - )
- # -
,
# - -/
) +M9M:$
AI%:9M - 7 # -
/*
. +M9M:$ #
*
.,
SELECT imie, nazwisko FROM pracownicy ;
SELECT tytul, autorzy.imie, autorzy.nazwisko,
miejsca.miejsce
FROM ksiazki, autorzy, miejsca
WHERE ksiazki.autor = autorzy.autor_nr AND
ksiazki.miejsce = miejsca.miejsce_nr
;
3.3.8.
Rozkaz UPDATE
I J.%$M ) - * (
- # - 0%1 -
7 J.%$M - *
+,
UPDATE [user.]table [alias]
SET column = expr [, column = expr] ...
[ WHERE condition ]
Bazy danych
Robert Chwastek
23
lub
UPDATE [user.]table [alias]
SET (column [, column] ...) = (query)
[, column [, column] ...) = (query) ] ...
[ WHERE condition ]
Parametry:
" # - *
- " - *
"
)
-
rozkazu.
" - * - #
*
[ " ) " #
X " +M9M:$ - AIMI B 2AI J.%$M
- *
" * ( / #/ $IJM - 2%9+M*
( - #
Opis:
S +M$ # #
-/ * S ('MIM # /
) / # # * 8#
('MIM - *
I J.%$M ) ('MIM
- # )7 CRG
# # *
8# +M$ /
) * S) #/
# # * 8# 0 +M$ ? R
X1 J99*
5 ) / - * 8 -
) J.%$M*
.,
UPDATE pracownicy
;
3.3.9.
Rozkaz RENAME
I IM%6M - - * 5 )
/ # - - *
Bazy danych
Robert Chwastek
24
+,
RENAME old TO new
Parametry:
old - aktualna nazwa tabeli, widoku lub synonimu
" ) - -
Opis:
( - -
* 5 ) / * 5
) -/ , :IM%$M $%9M
IA. $%9M IM%6M -,
CREATE TABLE temporary (new_column_name)
AS SELECT old_column_name FROM table ;
DROP TABLE table ;
RENAME temporary TO table ;
.,
RENAME wydzialy TO jednostki ;
3.3.10.
Rozkaz ALTER TABLE
I ) - * ( ,
dodaje kolumny i warunki
modyfikuje definicje kolumn jak typy i warunki
usuwa warunki
-
) %:SJ. - *
%- / - -/ # - / %9$MI
- - -/ 0%1*
+,
ALTER TABLE [user.]table
[ADD ( {column_element | table_constraint}
[, {column_element | table_constraint}] ...) ]
[MODIFY (column_element [,column_element] ...)]
[DROP CONSTRAINT constraint] ...
[PCTFREE integer] [PCTUSED integer]
[INITTRANS integer] [MAXTRANS integer]
[STORAGE storage]
[BACKUP]
Parametry:
\*] - " # - - /* 8# )
# ) *
Bazy danych
Robert Chwastek
25
%Q6AN2B W " -
- # # # *
% - W " # - *
IA. " - *
%:SJ. " #/ 0 1 )
-G
-
wykonywania rozkazu ALTER TABLE.
Opis:
8# ) %
- #/ ) - J99* (
)
A$ J99
wierszy.
S 6AN2B ) / ) - ,
rozmiar
typ danych
NOT NULL
5 - ) lko wtedy, gdy wszystkie
# J99* 6) ) A$ J99
#
* 8#
jest rozmiar kolumny zadeklarowanej jako NOT NULL i w klauzuli MODIFY nie poda
A$ J99 A$ J99*
( - -
0+M9M:$ K 2IA6 ***1 ) / # -
*
.,
ALTER TABLE pracownicy
ADD (placa NUMBER(7, 2))
;
ALTER TABLE pracownicy
MODIFY (placa NUMBER(9, 2))
;
3.3.11.
Rozkaz CREATE INDEX
I - - * N -#
- * N
) # *
N )
/
#
- )
NMZ
danej tabeli lub administrator (DBA).
+,
CREATE [UNIQUE] INDEX index ON
{table(column [ASC|DESC][, column [ASC|DESC]]...) |
Bazy danych
Robert Chwastek
26
CLUSTER cluster}
[INITTRANS n] [MAXTRANS n]
[TABLESPACE tablespace]
[STORAGE storage]
[PCTFREE n]
[NOSORT]
Parametry:
JN;JM " ) -
# * ( AI%:9MG
# JN;JM - - ) /
*
" * -/ )
- - ) *
- " - *
column - nazwa kolumny w tabeli.
%+: M+: " AI%:9M
- # < *
:9J+$MI " #
A+AI$ " AI%:9MG ) - )
indeksu.
Opis:
N ,
*
) / )
# ) #/
# - *
) -/ ) >H * Jeden element
# * (
) -/ ) - #/
* #/ )* 8#
% :
#
)
do wyszukiwania konkatenacji kolumn A, B, C, kolumn A i B lub tylko kolumny A. Nie
-
)
: -
pojedynczej kolumny B lub C.
6) # - - *
) / ) -
) #/ ) #/ *
.,
CREATE INDEX i_prac_imie ON pracownicy (imie) ;
Bazy danych
Robert Chwastek
27
3.3.12.
Rozkaz CREATE VIEW
I ) - - -
- * J
/
)
#
- )
co najmniej uprawnienia SELECT lub administrator.
+,
CREATE VIEW [user.]view [(alias [, alias] ...)]
AS query
[ WITH CHECK OPTION [CONSTRAINT constraint] ]
Parametry:
" #
view - nazwa tworzonego widoku
X " - - * 5 )
-/
+M9M:$
AIMI B
ani FOR UPDATE.
(N$' :'M:S A.$NA " )
# -
* S (N$' :'M:S A.$NA ) -/ )
- *
:A+$I%N$ " (N$' :'M:S A.$NA*
Opis:
Widok jest logicznym oknem dla jednej lub kilku tabel. W
# #,
widok nie przechowuje danych - jest on przeznaczony do pokazywania danych
zawartych w innych tabelach.
) -/ ) +;9 )
)
-
) ) )
/
gdy zapytanie na którym bazuje widok zawiera:
klauzule GROUP BY, CONNECT BY lub START WITH
N+$N:$ - ) #
6) tóry posiada pseudokolumny
- ) J.%$M -
)*
( ) ,
- -
# - - -
)# " ) -/ )
- - ) - *
Bazy danych
Robert Chwastek
28
"
)
/ )
zmiany nazwy kolumny bez zmiany rzeczywistych danych zapisanych w tabeli.
#*
.,
CREATE VIEW bibl
AS SELECT ksiazki.tytul, autorzy.imie,
autorzy.nazwisko, miejsca.miejsce
FROM ksiazki, autorzy, miejsca
WHERE ksiazki.autor = autorzy.autor_nr
AND ksiazki.miejsce = miejsca.miejsce_nr
WITH CHECK OPTION CONSTRAINT chkopt
;
3.3.13.
Rozkaz COMMIT
+,
COMMIT [WORK]
Opis:
I :A66N$ :A66N$ (AIS a
7
bazie danych.
3.3.14.
Rozkaz ROLLBACK
+,
ROLLBACK [ WORK ] [TO [ SAVEPOINT ] savepoint ]
Parametry:
(AIS " - # %+N
+%OM.AN$ " IA99%:S
savepoint - nazwa punktu zaznaczonego podczas wykonywania aktualnej transakcji.
Opis:
I IA99%:S
)
0
klauzuli TO) lub poczatku transakcji (bez klauzuli TO).
.,
ROLLBACK ;
ROLLBACK TO SAVEPOINT SP5 ;
3.3.15.
Rozkaz SAVEPOINT
+,
SAVEPOINT savepoint
Bazy danych
Robert Chwastek
29
Parametry:
savepoint - nazwa punktu w aktualnej transakcji zaznaczanego przez wykonywany
rozkaz
Opis:
I +%OM.AN$ ) IA99%:S
* -/
* + - #
- ) / *
.,
UPDATE pracownicy
SET placa_podstawowa = 2000
WHERE nazwisko = ‘Kowalski’
;
SAVEPOINT Kow_plac;
UPDATE pracownicy
SET placa_podstawowa = 1500
WHERE nazwisko = ‘Nowak’
;
SAVEPOINT Now_plac;
SELECT SUM(placa_podstawowa) FROM pracownicy;
ROLLBACK TO SAVEPOINT Kow_plac;
UPDATE pracownicy
SET placa_podstawowa = 1300
WHERE nazwisko = ‘Nowak’
;
COMMIT;
3.3.16.
Rozkaz SET TRANSACTION
+,
SET TRANSACTION { READ ONLY }
Parametry:
IM% A9B " /
Opis:
I ) - /
7* ) ) N+MI$ J.%$M -
M9M$M* I +M$ $I%+%:$NA /
-*
Bazy danych
Robert Chwastek
30
3.4. Operacje relacyjne
A - -
* () ,
" )
-
0
1 #
warunki;
" ) - - 0 1
" ) 0 1
# # 7 *
3.4.1.
Selekcja
Operacja
) - 0 1 #
* A ) podzbiorem poziomym.
! "
#
$%
&
'()*)+)*,-'
.
/"
&
01)-2))(,-'
3
4
++2)2()()*+
!
'))2)2)2(*2
!
5
4
112(2()2((*
( +;9 ) +M9M:$ ('MIM*
. ,
SELECT * FROM osoby;
spowoduje wybranie wszystkich krotek (wierszy) z relacji (tabeli) ludzie.
( - C( G C+AG
0# 1 ) /,
SELECT * FROM osoby
;
( -/ )* . - -/ -
# 0# " +$ - # " +A1
) / AI /
-,
SELECT * FROM osoby
;
Bazy danych
Robert Chwastek
31
)7 # *
3.4.2.
Projekcja
. ) - # - -
+M9M:$
* A
)
podzbiorem pionowym.
! "
#
$%
&
'()*)+)*,-'
.
/"
&
01)-2))(,-'
3
4
++2)2()()*+
!
'))2)2)2(*2
!
5
4
112(2()2((*
&9 :
'()*)+)*,-'
&
01)-2))(,-'
4
++2)2()()*+
!
'))2)2)2(*2
4
112(2()2((*
. ) /
+M9M:$,
!" #$%%& '
A -/ +M9M:$* N
/ . - #
) /,
SELECT Pesel, Nazwisko FROM osoby
Bazy danych
Robert Chwastek
32
;
3.4.3.
Produkt
. 0 71 - * A )
- - ) )
) * ( #
) * .
7 *
/
/
/
/
;2
;(
5 7 0 - 1 )
+M9M:$* . ) /
,
SELECT * FROM R1, R2;
Operacja znajd
7 ) -/
) - - #*
3.4.4.
A -
# * ( - *
Bazy danych
Robert Chwastek
33
/
69
(
2
*
!
3 <==
2
(
/
%
!
/
%
/
%
2
(
2
A ) /
SELECT.
SELECT imie, nazwisko, tytul
FROM autorzy, ksiazki
WHERE autorzy.nazwisko = ‘Mickiewicz’ and
autorzy.nr = ksiazki.autor
;
3.4.5.
A # - * ( +;9
) / 0 - 1 )
-
*
3.4.5.1.
Unia
J - - 0-
7 " #1* ( #
#/ - - 0 1 * .
) - #
0 1
,
SELECT imie, nazwisko FROM pracownicy
UNION
SELECT imie, nazwisko FROM wlasciciele ;
3.4.5.2.
Przekrój
Prze
3/ - - *
* .-
#
#/ -
-
bazowych.
.) 0*
1 # *
Bazy danych
Robert Chwastek
34
SELECT nazwisko FROM pracownicy
INTERSECT
SELECT nazwisko FROM wlasciciele ;
3.4.5.3.
Operacj
- )
*
. - #
niej zatrudnieni:
SELECT imie, nazwisko FROM wlasciciele
MINUS
SELECT imie, nazwisko FROM pracownicy ;
3.4.6.
Grupowanie
S &IAJ. B '%ON& +M9M:$
/ -/ )
- / 0 1 * A
* 7
- - 0
1*
Klauzu
&IAJ. B ) * +-
,
SELECT stanowisko, avg(placa_podstawowa)
FROM pracownicy
GROUP BY stanowisko ;
N ) #/ a grupy.
('MIM,
SELECT stanowisko, avg(placa_podstawowa)
FROM pracownicy
WHERE stanowisko != ‘KIEROWCA’
GROUP BY stanowisko ;
) -/ )) )
* ( )
)
stanowiska:
SELECT wydzial, stanowisko, avg(placa_podstawowa)
FROM pracownicy
GROUP BY nr_wydzialu, stanowisko ;
S '%ON& # #
* : # /
) ! DDD ) / ,
SELECT stanowisko, max(placa_podstawowa)
FROM pracownicy
Bazy danych
Robert Chwastek
35
GROUP BY stanowisko
HAVING max(placa_podstawowa) > 3000 ;
3.4.7.
!"!#$
S +M9M:$
#,
1.
SELECT i WHERE
2.
GROUP BY
3.
HAVING
4.
ORDER BY
3.5. Podzapytania
5 +;9 -/ )) * )
-/ )
*
* .
) /
dwa rodzaje:
podzapytania proste (nazywane po prostu podzapytaniem) - podzapytanie jest
wykonywane
przed
4
" )
*
# ) ('MIM +M9M:$* 8#
) - #/ #/ )
)/ -# ('MIM -,
SELECT nazwisko
FROM pracownicy
WHERE placa_podstawowa =
(SELECT min(placa_podstawowa)
FROM pracownicy)
;
. ) - *
8# - #
) N *
- ) )/ ,
SELECT nazwisko, nr_wydzialu
FROM pracownicy
WHERE placa_podstawowa IN
(SELECT min(placa_podstawowa)
FROM pracownicy
GROUP BY nr_wydzialu)
;
Bazy danych
Robert Chwastek
36
9- # -/
operatora IN.
( / ) ) %B %99* A %B
/ ) * A
%99 ) *
+ %B %99 ) #
*
. ) / ) '%ON&* .)
# # - ) !D,
SELECT nr_wydzialu, avg(placa_podstawowa)
FROM pracownicy
GROUP BY nr_wydzialu
HAVING avg(placa_podstawowa) >
(SELECT avg(placa_podstawowa)
FROM pracownicy
WHERE nr_wydzialu = 30)
;
5 -/ )) #/ * . )
7 ) / ,
) / AIMI B 0) /
14
)) # - ))
- ) *
Podzapytanie skorelowane jest zapytaniem zagnie
))
dla
% * . #/
)
*
)
-- ) # ,
SELECT imie, nazwisko, placa_podstawowa, nr_wydzialu
FROM pracownicy pracownik
WHERE placa_podstawowa >
(SELECT avg(placa_podstawowa)
FROM pracownicy
WHERE nr_wydzialu = pracownik.nr_wydzialu)
;
( 7 7
-
* 8#
) -
0 ^ @1*
Bazy danych
Robert Chwastek
37
3.6. Widoki (perspektywy)
( - - -
* * ) * (
* (
- - 0 - 1* ( ,
- -
7
)#
5 #/ - )
/ ,
proste
)
( +M9M:$
)
danych zawartych w widoku.
Widok
-
7 +;9 ) *
( ) - ) /
* : ) #/
)
# - )
#
0
wszystkich systemach).
) # :IM%$M ONM(* .)
- -
0- ) # 1,
CREATE VIEW personalia
AS
SELECT imie, nazwisko
FROM pracownicy
;
$ ) -
opisie rozkau CREATE VIEW:
CREATE VIEW bibl
AS SELECT ksiazki.tytul, autorzy.imie,
autorzy.nazwisko, miejsca.miejsce
FROM ksiazki, autorzy, miejsca
WHERE ksiazki.autor = autorzy.autor_nr
AND ksiazki.miejsce = miejsca.miejsce_nr
;
Bazy danych
Robert Chwastek
38
3.7. Transakcje
$ , :A66N$ IA99%:S*
. ) -
* .
- * A
J.%$M " -
- * 5
) -/ - - )*
8# - - - - ^@ -
^)@*
I :A66N$ ) racji.
. ) -
) * (
J.%$M ) / :A66N$
* A - ) *
I IA99%:S # :A66N$* 8 ) 7
-
rozkazu COMMIT lub ROLLBACK.
Rozkaz SAVEPOINT pozwala na zaznaczenie i nazwanie pewnego punktu
* ( - IA99%:S $A )
# 0 *
1* ( IA99%:S $A #
7 )* ( IA99%:S -
COMMIT powoduje skasowanie wszystkich uprzednio zaznaczonych punktów.
8 - - ) 7/ :A66N$ -
IA99%:S* 8# - 7 - -
/ /* 6)
/
-
-
skrypt.
3.8. Normalizacja relacji
3.8.1.
Cele normalizacji
-
)* 8 ) / )
0 1 * 8# -
0* 1 3
0 / -/
- - 1* N )
) # - 0* 1*
(3 -
* I ) / - ,
Bazy danych
Robert Chwastek
39
nazwa przedmiotu,
imie,
nazwisko,
(% )*%
. - / /,
+,- *!" ".% "
ul. Królewska 30/3 Kraków)
8 - ,
#
) - S - 4
) /
redundancja danych;
0* 1 #/
#4
)
) /4
) / )
- *
J # - * 8
) / - ,
. ,
/ %" 0-" %" % (%% " 0,%%12"
ulica, nr_domu, nr_mieszkania
5
" (% )*%
S) ^5@ ^. @
- ^W @* $
# ) ),
# )
* # 4
0* 1 #
^5@* 5 - 4
) - /
-/ ) - 4
- *
8 - #
* - -
- - *
3.8.2.
I # # -
* # # - #*
. / - - ) - / *
(#/ - ) # - - -
Bazy danych
Robert Chwastek
40
* .
postaci normalnej ilustruje rysunek:
$
>%
#
%
))2
))(
))*
.
.
)2)
)()
)2)
$%
%
#
7
$% 7
#"78
)1+
)11
)')
)1+
)')
%
% #?4
$ <
%
$ <
/ %
-
&" *
-
*)
1)
2)
+)
21
>%
$
>%
#
%
))2
))2
))(
))*
))*
.
.
.
.
)2)
)2)
)()
)2)
)2)
$%
%
#
7
$% 7
#"78
)1+
)11
)')
)1+
)')
%
% #?4
$ <
%
$ <
/ %
-
-
&" *
-
-
*)
1)
2)
+)
21
>%
3.8.3.
Definicje pomocnicze
%- /
postaci normalnej. Przed omówieniem procesu normalizacji konieczne jest jednak
/,
Bazy danych
Robert Chwastek
41
Uniwersalny schemat relacji R = {A
1
, A
2
, ..., A
n
_ - -
*
& ' R = {A
1
, A
2
, ..., A
n
} nazywamy zbiór atrybutów S
R, który jednoznacznie identyfikuje wszystkie krotki relacji o schemacie R. Inaczej
) I /
1
i t
2
)
t
1
[S] = t
2
[S].
Kluczem
S I - * )
nie istnieje K’
S - - I* S
)*
Klucz nazywamy kluczem prostym
) - -
jest zbiorem jednoelementowym; w przeciwnym wypadku mamy do czynienia z
%* #
)
)/
nazywamy kluczami potencjalnymi
* 8 0 -1 #
potencjalnych nazywamy
( 0 1
0 1*
^5 @
- 0 N #1* ) )/ )
) ) / #*
Atrybut relacji nazywamy podstawowym
) )
relacji.
Atrybut relacji nazywamy wtórnym
) ) ) *
Atrybut B relacji R jest
' % - % 0 #
) ) % identyfikuje B i oznacza A 1 # #
- % ) #/ - - *
5 )#/ - %
# )#
- #*
N ) - % 0 * ) ) %1
- % * ( -
)# ^5 @ ) /
,
Bazy danych
Robert Chwastek
42
# %
$% %
# 7
/ %
$% 7
$ >%
#"78
Atrybut B jest
' % zbioru atrybutów X w schemacie R,
) Z Y i nie istnieje podzbiór X’ Z ) ZG Y.
) / ) )#
)# *
Zbiór atrybutów Y jest
' % zbioru atrybutów X w
I ) Z Y i istnieje podzbiór X’ Z ) ZG Y.
Z B 5 -
-
-
* .-
atrybutów Z jest
' % - - Z #
- - 5 ) - - B -
- B ) - - Z -
- Z ) B - - B
) 5*
. ^5 @ - ^ @ ^% @
) - ^ @ ) - ^N
@ ) - ^ @ - ^
@ ^% @ ) ^N @*
I # ) )/ ) ^N @ )
^ @ 0 -/ 1 ^% @
0 ) ) / *
6 ) - - B # )
-
-
Z
I )
I
dla dowolnej pary krotek t
1
i t
2
)
1
[X] = t
2
[X], istnieje taka para
krotek s
1
i s
2
)
s
1
[X] = s
2
[X] = t
1
[X] = t
2
[X] oraz
s
1
[Y] = t
1
[Y] i s
1
[R-X-Y] = t
2
[R-X-Y] oraz
s
2
[Y] = t
2
[Y] i s
2
[R-X-Y] = t
1
[R-X-Y].
Bazy danych
Robert Chwastek
43
6 )
1
i t
2
) #
- - Z - 0
1
[x] = t
2
[X]),
#
-
- B
sposób krotki s
1
i s
2
) ) *
. / ) ^S @ ^%@ ^6@
) @8 :@ ^+ @ ^ @
^8 @ ^8@ ^% @ ^ @
^$ @ ) / - ,
&
$%
3 <
/.
6%"
/.
6%"
3 <
.
6%"
.
6%"
3%
$%
!%
">%
3
$%
">%
3%
$%
3
$%
">%
/"
$%
/"
$%
A# - Z R 0 1 B R 01 ) I-X-Y =
0(1* . ,
t
1
R 0S % 8 :1
t
2
= (Kowalski, Magda, Systemy operacyjne)
odpowiada para krotek
s
1
= (Kowalski, Agnieszka, Systemy operacyjne)
s
2
R 0S 6 8 :1
) / ) )
) # )# -
-
0
wypadku jednoelementowego zbioru atrybutów (Dziecko) od jednoelementowego
- - 0(11*
5 # )# ),
-
#
)
zbioru atrybutów X
Bazy danych
Robert Chwastek
44
# ZBRI Z # ) B *
5 )# %
funkcjonalnymi.
I R 0%
1
, A
2
, ..., A
n
1 -
0 1 0I
1
, R
2
, ..., R
m
1 ) )
schemat R
i
z tego zbioru stanowi podzbiór zbioru atrybutów (A
1
, ..., A
n
) i
@ @
6 ) I R 0%
1
, ..., A
n
1 )#/
0 , KI\I
1
, ..., R
n
]1 )
dekompozycja relacji r (o schemacie R) na relacje r
1
, ..., r
n
)
) /
1
, ..., r
m
.
6) / ) # )#/
)# R <*
6 ) )#/ KI\I
1
, ..., R
m
] )#
atrybutów schematu R od klucza wtedy i tylko wtedy, gdy w dowolnej sekwencji
7 )
- I*
3.8.4.
)
I ) ) - 0 *
) 1
) *
6) )/ ) ^5 @
) - ^N @ ^ @ ^% @ ^
#@ ) " 0^
@ ^N #@1*
( ) /
- - ) * (
^5 @ ) / , ^
@ ^5 @ ^:#@ -,
$
>%
#
%
))2
.
)2)
$%
%
/ %
-
))(
)()
&" *
))*
.
)2)
-
% >%
Bazy danych
Robert Chwastek
45
$
>%
))2
))2
))(
))*
))*
#
7
#"78
)1+
)11
)')
)1+
)')
*)
1)
2)
+)
21
>% %
#
7
$% 7
)1+
)11
)')
%
% #?4
$ <
<7
8 / )
^ @ ^:#@ -
^N #/@ ^5 @ )
) 0^ @ ^N #@1*
) )/ ) -
#
kluczami prostymi.
. relacji „Zamówienia” do drugiej postaci normalnej otrzymujemy
)# ,
Dostawca na zamówieniu
Bazy danych
Robert Chwastek
46
# %
$% %
/ %
$ >%
Zamówione dostawy
# 7
$ >%
#"78
:#
# 7
$% 7
3.8.5.
$
#
) - )
) ) *
%- / - )#
) / )#/ *
. ,
<
/
/
<
( )#/
- ^ @ ^% @ - ^
Bazy danych
Robert Chwastek
47
@ ^ @* (
^ @ , ^5 @
^ @ -,
$
>%
#
%
))2
)2)
))(
)()
))*
)2)
>%
#
%
.
)2)
$%
%
/ %
-
)()
&" *
)*)
! 21
%
3.8.6.
#
I - Z
B 5 - I ) Z Y Z = R i podzbiór Y jest nietrywialnie
# ) Z*
Dana relacja R jest w czwartej postaci normalnej wtedy i tylko wtedy, gdy jest w
# )#/ - B Z -
)#/ - Z*
` )/ ) - ^. @ # )#
funkcjonalnej jest w trzeciej postaci normalnej, ale nie jest w czwartej postaci normalnej,
) - ^@ ^(@ ) -
^
@
*
) )#/
atrybutami.
8 # )#/
* + )
# )#/ ) /
- / )# *
Bazy danych
Robert Chwastek
48
( ^. @ ) / ,
^@ ^(@ - / # )#/
,
$%
/.
6%"
.
6%"
3%
$%
3
$%
/"
$%
&
$%
3 <
6%"
6%"
$%
&
">%
$%
3.8.7.
I wtedy i tylko wtedy,
)# KI\I
1
, ..., R
m
] )#/ )# -
klucza.
) # )
- - - ) - / 0
-/ 1
- ) / - - )
*
( )
/ - ) *
3.8.8.
Podsumowanie
. ) #
# - *
Bazy danych
Robert Chwastek
49
. - / -
* J 7 -
- * 6 -
/ )#/ - ) /
- #/ *
Bazy danych
Robert Chwastek
50
4.
"
( )
*
4.1. Operatory
+ +;9
*
4.1.1.
Operatory arytmetyczne
A nego. Jednak
-/ ) %$M* +
- ,
Operator
Opis
( )
5 #/
7* (
*
SELECT (X+Y)/(Y+Z) ...
+, -
Operatory jednoargumentowe zachowania i
zmiany znaku.
... WHERE NR = -1
... WHERE -PLACA < 0
*, /
6)
SELECT 2*X+1
... WHERE X > Y/2
+, -
Dodawanie, odejmowanie
SELECT 2*X+1
... WHERE X > Y-Z
4.1.2.
Operatory znakowe
8 nkatenacji.
I - *
) / ) :'%I -/ ) ) <== *
A
)
-
operatora konkatenacji.
Operator
Opis
||
S
SELECT ‘Nazwa: ‘ || ENAME ...
Bazy danych
Robert Chwastek
51
4.1.3.
Operatory porównania
A )
)7* (
#/ 0$IJM - 2%9+M1*
Operator
Opis
( )
5
#/
7
... NOT (A=1 OR B=1)
=
+
)
równe
... WHERE PLACA = 1000
!=, ^=, <>
+ )
)
... WHERE PLACA != 1000
>
( )
... WHERE PLACA > 1000
<
6 )
... WHERE PLACA < 1000
>=
( - )
... WHERE PLACA >= 1000
<=
6 - )
... WHERE PLACA <= 1000
IN
Równy dowolnemu elementowi.
Synonim do „ = ANY”
... WHERE ZAWOD IN
(‘URZEDNIK’, ‘INFORMATYK’)
... WHERE PLACA IN (SELECT
PLACA FROM PRAC WHERE
WYDZIAL=30)
NOT IN
I) ) *
(
2%9+M #
dowolny element zbioru jest równy
NULL
Synonim do „!= ALL”
... WHERE PLACA NOT IN (SELECT
PLACA FROM PRAC WHERE
WYDZIAL=30)
ANY
. #/ )
# -
* 6 -/
jednym z operatorów: =, !=, >, <,
aR bR* 5
$IJM #
przynajmniej jeden z elementów
*
... WHERE PLACA = ANY (SELECT
PLACA FROM PRAC WHERE
WYDZIAL =30)
ALL
. #/ )
# -
* 6 -/
jednym z operatorów: =, !=, >, <,
aR bR* 5 $IJM # )
warunek.
... WHERE (PLACA, PREMIA) >=
ALL ((14900, 300), (3000, 0))
[NOT]
BETWEEN
\]
-
[
mniejszy lub równy y.
... WHERE A BETWEEN 1 AND 9
Bazy danych
Robert Chwastek
52
x AND y
[NOT]
EXISTS
5
$IJM #
\]
zwraca przynajmniej jeden wiersz.
... WHERE EXISTS (SELECT PLACA
FROM PRAC WHERE WYDZIAL =
30)
[NOT]
LIKE
\] *
9 CcG )
0D -
1
jest równy NULL. Litera ‘_’
*
... WHERE STAN LIKE ‘T%’
IS [NOT]
NULL
[Nie] jest równe NULL.
... WHERE ZAWOD IS NULL
A A$ N 2%9+M 0 ('MIM )
)
1 # /
NULL. Np. rozkaz:
SELECT ‘TRUE’
FROM prac
WHERE wydzial NOT IN (5, 15, NULL) ;
) )
wydzial NOT IN (5, 15, NULL)
wydzial != 5 AND wydzial != 15 AND wydzial != NULL
( # J99 #/
J99* ) - #/ J99*
4.1.4.
Operatory logiczne
A ) - 7 #
0 # - - 1*
Operator
Opis
( )
5
#/
7
SELECT ... WHERE x = y AND (a = b
OR p = q)
NOT
5
)
"
gicznego
... WHERE NOT (zawod IS NULL)
WHERE NOT (A=1)
AND
Logiczne ‘i’. Wynik jest równy
$IJM
#
#
-
$IJM
... WHERE A = 1 AND B = 2
OR
Logiczne ‘lub’. Wynike jest równy
$IJM #/
... WHERE A = 1 OR B = 3
Bazy danych
Robert Chwastek
53
jednego operandu jest równa
TRUE
.) - % AI )
#,
AND
true
false
null
true
true
false
null
false
false
false
false
null
null
false
null
OR
true
false
null
true
true
true
true
false
true
false
null
null
true
null
null
4.1.5.
Operatory zbiorowe
7 - #*
Operator
Opis
UNION
J - * `
-
*
... SELECT ...
UNION SELECT ...
INTERSECT
:#/ - *
.
tylko raz
... SELECT ...
INTERSECT SELECT ...
MINUS
A- ) - * (
- *
M
tylko raz
... SELECT ...
MINUS SELECT ...
4.2.
"
() - # - * (
-
) -/
#* ( #
)
operandów.
) ) ,
numeryczny:
2 * 2
znakowy:
TO_CHAR(TRUNC(SYSDATE + 7))
Bazy danych
Robert Chwastek
54
() ) -/ ) ) ) # *,
SET Nazwisko = LOWER(Nazwisko)
N / )7,
- #/
+,
[table.] { column | ROWID }
text
number
sequence.CURRVAL
sequence.NEXTVAL
NULL
ROWNUM
LEVEL
SYSDATE
UID
USER
.,
pracownicy.nazwisko
%,)* 3
10
SYSDATE
+,
: { n | variable } [ :ind_variable ]
.,
:nazwisko_pracownika:nazwisko_pracownika_indykator
4(%%5
+,
function_name( [DISTINCT | ALL] expr [, expr] ... )
.,
LENGTH(‘Kowalski’)
ROUND(1234.567*82)
- )7
+,
(expr)
+expr, -expr, PRIOR expr
expr * expr, expr / expr
expr + expr, expr - expr, expr || expr
.,
(‘Kowalski: ‘ || ‘Nauczyciel’)
LENGTH(‘Nowak’) * 57
SQRT(144) + 72
)7
+,
(expr [, expr], ...)
Bazy danych
Robert Chwastek
55
.,
(‘Kowalski’, ‘Nowak’, ‘Burzynski’)
(10, 20, 40)
(LENGTH(‘Kowalski’) * 5, -SQRT(144) + 77, 59)
() ) ,
# +M9M:$
jako warunek w klauzulach WHERE i HAVING
w klauzulach CONNECT BY, START WITH, ORDER BY
klauzuli VALUE w rozkazie INSERT
w klauzuli SET rozkazu UPDATE
4.3. Warunki
( - )7 *
( - # $IJM - 2%9+M* ( /
) ,
) -
<expr> <comparison operator> <expr>
<expr> <comparison operator> <query>
<expr-list> <equal-or-not> <expr-list>
<expr-list> <equal-or-not> <query>
porównanie z dowolnym lub ze wszystkimi elementami listy lub zapytania
<expr> <comparison> { ANY | ALL }
( <expr> [, <expr] ...)
<expr> <comparison> { ANY | ALL } <query>
<expr-list> <equal-or-not> { ANY | ALL }
( <expr-list> [, <expr_list>] ...)
<expr-list> <equal-or-not> { ANY | ALL } <query>
)# -
<expr> [NOT] IN ( <expr> [, <expr>] ... )
<expr> [NOT] IN <query>
<expr-list> [NOT] IN
( <expr-list> [, <expr-list>] ... )
<expr-list> [NOT] IN <query>
)# #
<expr> [NOT] BETWEEN <expr> AND <expr>
#/ J99
<expr> IS [NOT] NULL
Bazy danych
Robert Chwastek
56
EXISTS <query>
kombinacja innych warunków (podana zgodnie z priorytetami)
( <condition> )
NOT <condition>
<condition> AND <conditin>
<condition> OR <condition>
.,
Nazwisko = ‘Kowalski’
pracownicy.Wydzial = Wydzialy.Wydzial
Data_urodzenia > ‘01-JAN-67’
Zawod IN (‘Dyrektor’, ‘Urzednik’, ‘Informatyk’)
Placa BETWEEN 500 AND 1500
Bazy danych
Robert Chwastek
57
5.
# !
5.1. Funkcje
numeryczne
Przeznaczenie
ABS(n)
5 #/ - -
ABS(-15)
Wynik: 15
CEIL(n)
5 -
-
CEIL(15.7)
Wynik: 16
FLOOR(n)
5 -
-
FLOOR(15.7)
Wynik: 15
MOD(m, n)
5 - MOD(7, 5)
Wynik: 2
POWER(m, n)
5 - *
9- -/ 4
-*
POWER(2, 3)
Wynik: 8
ROUND(n[, m])
5 -
* 8
D* 9- ) -/
- 0
odpowiedniej liczby cyfr przed
przecinkiem)
ROUND(16.167, 1)
Wynik: 16.2
ROUND(16, 167, -1)
Wynik: 20
SIGN(n)
5 D # D "> #
D > #
od 0
SIGN(-15)
Wynik: -1
SQRT(n)
Zwraca pierwiastek kwadratowy liczby n.
8# aD -
SQRT(25)
Wynik: 5
TRUNC(m[, n])
5 -
* 8#
D* 8#
- *
TRUNC(15.79, 1)
Wynik: 15.7
TRUNC(15.79, -1)
Wynik: 10
5.2. Funkcje
znakowe
Przeznaczenie
CHR(n)
Zwraca znak o podanym kodzie
CHR(65)
Wynik: „A”
Bazy danych
Robert Chwastek
58
INITCAP(string)
5 )
) *
INITCAP(‘PAN JAN
NOWAK’)
Wynik: „Pan Jan
Nowak”
LOWER(string)
Zamienia wszystkie litery w podanym
*
LOWER(‘PAN JAN
NOWAK’)
Wynik: „pan jan
nowak”
LPAD(string1, n
[, string2])
5 > #
<* 8# <
* 8#
#
>
zwracane jest n pierwszych znaków z
tekstu string1.
LPAD(‘Ala ma ‘, kota*,
17)
Wynik:
„kota*kota*Ala ma ”
LTRIM(string
[, zbiór])
Usuwa litery z tekstu string od lewej
)
) -* 8# -
pusty.
LTRIM(‘xxxXxxOstatn
G C[G1
Wynik:
^Z[[A @
REPLACE(string,
search [, replace])
5 )
replace.
REPLACE(‘Jack &
Jue’, ‘J’, Bl’)
Wynik:
„Black & Blue”
RPAD(string1, n
[, string2])
5 >
#
<* 8# <
* 8#
#
>
zwracane jest n pierwszych znaków z
tekstu string1.
RPAD(‘Ala ma ‘, 17,
‘kota*’)
Wynik:
„Ala ma kota*kota*”
RTRIM(string
[, zbiór])
5 >
-* 8# -
RTRIM(‘Ostatnie
[[Z[[[G C[G1
Wynik:
^A [[Z@
SOUNDEX(string)
5
>* 2 +AJMZ ) -/
)
) -
wymawianych tak samo.
SELECT nazwisko
FROM bibl WHERE
SOUNDEX (nazwisko)
= SOUNDEX
('Mickiewicz');
SUBSTR(string, m
[, n])
5
#
* 8#
SUBSTR(‘ABCDE’,2,
3)
Wynik:
Bazy danych
Robert Chwastek
59
* .
1.
„BCD”
TRANSLATE(
string, from, to)
5
wszystkich znaków from na znak to.
TRANSLATE(
‘HELLO! THERE!’, ‘!’,
‘-‘)
Wynik:
„HELLO- THERE-”
UPPER(string)
5
) *
UPPER(
‘Jan Nowak’)
Wynik:
„JAN NOWAK”
ASCII(string)
Zwraca kod ASCII pierwszej litery w
ASCII(‘A’)
Wynik: 65
INSTR(string1,
string2 [, n [, m]])
5 "
< > #
* 8)
#/
>* 8#
#/ >*
INSTR(
‘MISSISSIPPI’, ‘S’, 5,
2)
Wynik: 7
LENGTH(string)
5 #/ * LENGTH(‘Nowak’)
Wynik: 5
5.3. Funkcje
grupowe
2
#* # * S
&IAJ. B +M9M:$ ) / *
S N+$N:$
-
# 0
pomijane). Klauzula ALL powoduje wybranie wszystkich wierszy wynikowych do
- * (
# J99 :AJ$0K1* () -
-/ :'%I J6MI - %$M*
Przeznaczenie
AVG( [DISTINCT | ALL]
num)
5 #/ #
#
SELECT AVG(placa)
”Srednia” FROM pracownicy
COUNT( [DISTINCT |
ALL] expr)
5
-
których expr nie jest równe
NULL
SELECT COUNT(nazwisko)
”Liczba” FROM pracownicy
COUNT(*)
5 -
-
SELECT COUNT(*)
”Wszystko” FROM
pracownicy
Bazy danych
Robert Chwastek
60
NULL
MAX( [DISTINCT | ALL]
expr)
5
#/ )
SELECT MAX(Placa) ”Max”
FROM pracownicy
MIN( [DISTINCT | ALL]
expr)
5 #/
)
SELECT MIN(Placa) ”Min”
FROM pracownicy
STDDEV( [DISTINCT |
ALL] num)
Zwraca odchylenie
#
# J99*
SELECT STDDEV(Placa)
”Odchylenie” FROM
pracownicy
SUM( [DISTINCT | ALL]
num)
5 # * SELECT SUM(Placa)
”Koszty osobowe” FROM
pracownicy
VARIANCE( [DISTINCT |
ALL] num)
5 #
#
NULL
SELECT VARIANCE(Placa)
”Wariancja” FROM
pracownicy
5.4. Funkcje
konwersji
2 ) # #/ *
A
, typTOtyp.
Pierwszy typ jest typem, z którego wykonywana jest konwersja, drugi jest typem
wynikowym.
Przeznaczenie
CHARTOROWID
(string)
(
znaków na ROWID
SELECT nazwisko FROM
pracownicy WHERE ROWID =
CHARTOROWID
(‘0000000F.0003.0002’)
CONVERT(string
[,dest_char_set
[,source_char_set ] ])
(
)
implementacjami zestawu
znaków. Zestawem
# J+V%+:NN*
SELECT CONVERT (‘New
WORD’, ‘US7ASCII’, ‘WE8HP’)
”Conversion” FROM DUAL
HEXTORAW (string)
S
#/
- )
#/ I%(
INSERT INTO GRAPHICS
(RAW_COLUMN) SELECT
HEXTORAW (‘7D’) FROM
DUAL
ROWTOHEX(raw)
. #/
cyfry szesnastkowe
liczbie.
SELECT RAWTOHEX
(RAW_COLUMN) ”Graphics”
FROM GRAPHICS
ROWIDTOCHAR
.
SELECT ROWID FROM
Bazy danych
Robert Chwastek
61
wiersza na tekst. Wynik
#/
18 znaków.
GRAPHICS WHERE
ROWIDTOCHAR(ROWID)
LIKE ‘%F38%’
TO_CHAR(n [, fmt])
(konwersja
numeryczna)
S #/
)
* 8#
#/
- /
*
SELECT TO_CHAR(17145,
‘$099,999’) ”Char” FROM
DUAL
TO_CHAR(d [, fmt])
(konwersja daty)
S
) *
SELECT
TO_CHAR(HIREDATE, ‘Month
DD, YYYY’) ”New date format”
FROM EMP WHERE ENAME =
‘SMITH’
TO_DATE(string [,
fmt])
.
* J)
#
-/
podanego tekstu. Do
)
-
#/ #
„DD-MON-YY”
INSERT INTO BONUS
(BONUS_DATE) SELECT
TO_DATE (‘January 15, 1989’,
‘Month dd, YYYY’)
FROM DUAL
TO_NUMBER (string)
.
-
-
UPDATE EMP
SET SAL = SAL +
TO_NUMBER(
SUBSTR(‘$100 raise', 2, 3))
WHERE ENAME =
'BLAKE’
5.5. Funkcje operacji na datach
Przeznaczenie
ADD_MONTHS
(date, n)
5
-
* 9-
) -/
ujemna
SELECT ADD_MONTHS
(HIREDATE, 12)
”Next year”
FROM EMP
WHERE ENAME =
‘SMITH’
LAST_DAY(date)
5 -
SELECT LAST_DAY
(SYSDATE) ”Last”
Bazy danych
Robert Chwastek
62
podanej dacie.
FROM DUAL
MONTHS_BETWEE
N (date1, date2)
5 -
> <*
( ) -/ -
* :#/
#
31 dni.
SELECT MONTHS_BETWEEN
(‘02-feb-86’, ‘01-jan-86’))
„Months”
FROM DUAL
NEW_TIME(date, a,
b)
5
- #
*
. - )
-/
z:
AST, ADT - Atlantic Standard
or Daylight Time
BST, BDT - Bering Standard
or Daylight Time
CST, CDT - Central Standard
or Daylight Time
EST, EDT - Eastern Standard
or Daylight Time
GMT - Greenwich Mean Time
HST, HDT- Alaska-Hawaii
Standard or Daylight Time
MST, MDT - Mountain
Standard or Daylight Time
NST - Newfoundland Standard
Time
PST, PDT - Pacific Standard or
Daylight Time
YST, YDT - Yukon Standard
or Daylight Time
SELECT TO_CHAR(
NEW_TIME(TO_DATE(
’17:47’, ‘hh24:mi’), ‘PST’,
‘GMT’),
‘hh24:mi’) ”GREENWICH
TIME”
FROM DUAL
NEXT_DAY(date,
string)
5
tygodnia podanego w string,
3 )
* . -/
*
SELECT NEXT_DAY(
‘17-MAR-89’, ‘TUESDAY’)
”NEXT DAY”
FROM DUAL
ROUND(date [, fmt])
5
* #
- ) 7*
SELECT ROUND ( TO_DATE(
‘27-OCT-88’), ‘YEAR’)
”FIRST OF THE YEAR”
FROM DUAL
SYSDATE
5
*
Nie wymaga podania
argumentów.
SELECT SYSDATE FROM
DUAL
Bazy danych
Robert Chwastek
63
TRUNC(date [, fmt])
5
-
jednostki podanej w fmt.
#
7
*
usuwana jest informacja o
czasie.
SELECT TRUNC(
TO_DATE(
‘28-OCT-88’, ‘YEAR’)
”First Of The Year”
FROM DUAL
( IAJ $IJ: ) ) /
- -,
CC, SCC
wiek
SYYY, YYYY, YEAR,
SYEAR, YYY, YY, Y
0 ) >*DV1
Q
0 >H" 1
MONTH, MON, MM
0 >H1
WW
7
W
7
DDD, DD, J
7
DAY, DY, D
- )
HH, HH12, HH24
godzina
MI
minuta
5.6. Inne funkcje
Przeznaczenie
GREATEST(expr [,
expr] ...)
5
#* ( )
konwertowane do typu
)
wykonaniem porównania.
SELECT GREATEST (‘Harry’,
‘Harriot’, ‘Harold’)
”GREATEST” FROM DUAL
LEAST(expr [,
expr] ...)
5
#* ( )
konwertowane do typu
)
wykonaniem porównania.
SELECT LEAST (‘Harry’,
‘Harriot’, ‘Harold’)
”LEAST” FROM DUAL
NVL (expr1, expr2)
8# [>
J99
zwraca expr2, w przeciwnym
wypadku zwraca expr1.
SELECT ENAME
NVL(TO_CHAR(COMM),
‘NOT APPLICABLE’)
”COMMISION”
FROM EMP
WHERE DEPTNO = 30
Bazy danych
Robert Chwastek
64
UID
Zwraca unikalny identyfikator
)
*
SELECT USER, UID FROM
DUAL
USER
5 )
SELECT USER, UID
FROM DUAL
5.7. Formaty zapisu danych
2 ) ,
- # 4
) # *
2 ) $AW:'%I $AW%$M*
5.7.1.
Formaty numeryczne
2 ) $AW:'%I
# #/ *
J) -
*
8 #/ )
#/ CKG*
.)
-
)
/
numerycznego:
Element
Opis
9
9999
9- CFG # #/ #
0
0999
.
$
$9999
. #/ CTG
B
B9999
(# 0 1
MI
9999MI
(# C"C #
PR
9999PR
(#
#/
CaG
‘>’
, (przecinek)
9,999
(#
. (kropka)
99.99
(#
V
999V99
6) #/ >D
n
-
po ‘V’
E
9.999EEEE
(# - 0
/ M1
DATE
DATE
Dla dat przechowywanych w postaci numerycznej.
(# C66QQBBG
5.7.2.
Formaty dat
2 ) $AW:'%I # * 6 -/
) )
$AW%$M
# *
Format standardowy, to ‘DD-MON-YY’.
Bazy danych
Robert Chwastek
65
Elementy formatu dat przedstawia tabela:
Element
Opis
SCC lub CC
(4 C+G C"C
YYYY lub SYYYY
:
C+G
‘-‘
YYY, YY lub Y
Ostatnie 3, 2 lub 1 cyfra roku
Y,YYY
Rok z przecinkiem na podanej pozycji
SYEAR lub YEAR
Rok przeliterowany. ‘S’ powoduje poprzedzenie daty przed
C"C
BC lub AD
5 :Q% 0 Q 1
B.C. lub A.D
Znak BC/AD z kropkami
Q
S 0> < ! - L1
MM
6 0D>"><1
MONTH
F
MON
$
WW
$7 0>"=<1 0
7
i trwa 7 dni)
W
$7 0>"=1 0 7
V 1
DDD
7 0>"!HH1
DD
7 0>"!>1
D
7 0>"V1
DAY
F
DY
Trzyliterowy skrót nazwy dnia
AM lub PM
(3
A.M. lub P.M.
(3
HH lub HH12
Godzina (1-12)
HH24
Godzina (1-24)
MI
Minuta (0-59)
SS
Sekunda (0-59)
SSSS
+ 0D"EH!FF1
/ .,
Znaki przestankowe umieszczane w wyniku
”...”
:
# ) )/,
26 " ^2 6@
Q
liczb zerami;
$' " # - * L
TH
dla
liczby 4;
+. " )
+.$' - $'+. " +. $'*
Bazy danych
Robert Chwastek
66
6. Programowanie proceduralne - PL/SQL
6.1. Wprowadzenie
I +;9 -
# # -
* A
+;9 .9Q+;9*
PL/SQL pozwala wykorz
/ +;9*
(
0%9$MI :IM%$M IM%6M1
niektóre rozkazy kontroli danych jak CONNECT, GRANT i REVOKE.
S .9Q+;9 +;9 z
7 * 6)
+;9 +;9 0 * 1
* S) .9Q+;9 7 #*
PL/SQL pozwala na definiowa
* 5 )
7 - 7 3 * 8
-/ )* S) * $
+;9G* 5
*,
premia NUMBER(7, 2);
( #/ ^,R@ *,
podatek := cena * stopa;
) #/ # ) +M9M:$ - 2M$:'
# ,
SELECT placa INTO placa_aktualna FROM pracownicy
WHERE nazwisko = ‘Nowak’ ;
.9Q+;9
pola.
N ) #/ * -
) :A+$%$
# *
,
stopa_premii CONSTANT NUMBER(3, 2) := 0.10;
( - - * 8 0
1* 6) ) c$B.M *
* 5 /
- 0 ) )/ ) -
1,
tytul books.tytul%TYPE
6) )
- * ( ) )/ cIA($B.M*
Bazy danych
Robert Chwastek
67
( .9Q+;9 ) / 7,
R UR a b bR aR* 6 / ) ,
0 1*
6.2. Struktura
bloku
S .9Q+;9 - * ,
DECLARE
deklaracje
BEGIN
rozkazy wykonywalne
EXCEPTION
-
END;
S) - ) / - * - -/ ))* (
.9Q+;9 - 0 *
- 1* )
- * 6) / )
- * A- - )
* 5 - # -
/ * - - *
N - - -
- 0- 1* N - /
- ) - 7
- * - - )
) - * -
- )) )
- - *
6.3. Procedury i funkcje
PL/SQL w wersji 2.0 pozwala na definiowanie funkcji i procedur.
+ ,
PROCEDURE name [ (parameter [, parameter] ... ) ] IS
[local declarations]
BEGIN
executable statements
[EXCEPTION
exception handlers]
END [name];
+ ,
var_name [IN | OUT | IN OUT] datatype
[{ := | DEFAULT } value]
Bazy danych
Robert Chwastek
68
A# ) / 7 *
) * N$0=1*
. # " *
.IA:MJIM 7 - # *
* . - - * :
N+ 7 M 0 )
/ 1* :#/ 0 N+ M&N1
- * ( ) M:9%IM* :#/
0 M&N MZ:M.$NA - M1
.9Q+;9* ( # / *
- ,
PROCEDURE zwieksz (prac_id INTEGER, kwota REAL) IS
placa_aktualna REAL;
BEGIN
UPDATE pracownicy SET placa_podstawowa =
placa_podstawowa + kwota
WHERE prac_id = id_pracownika;
END zwieksz;
5 - #*
) IM$JI*
FUNCTION name [ (argument [, argument] ... ) ]
RETURN datatype IS
[local declarations]
BEGIN
executable statements
[EXCEPTION
exception handlers]
END [name];
( / IM$JI* I
IM$JI 7
* ( / IM$JI
-/ )* ( ) /
* 8# 7 IM$JI .9Q+;9
* ( IM$JI ) /
) )*
6.4. Kursory
W celu wykonania rozkazu SQL system tworzy pewien obszar roboczy nazywany
* (
* .9Q+;9 / 7 /
* .9Q+;9 )
dwóch typów kursorów:
Bazy danych
Robert Chwastek
69
" ) ) - / 7
/ 0#
2AI14
" .9Q+;9
operacji.
8# )
- ) * S
# - .9Q+;9 * +-
,
DECLARE
6( %7 %"
FROM pracownicy
( 89:::'
...
BEGIN
...
+ *
) /
A.M
sposób:
OPEN prac_kursor;
( )
2M$:'* S) 2M$:'
* I 2M$:' ) -/ ) -,
FETCH prac_kursor INTO prac_nazw, prac_wydz;
. 7
- * :9A+M *,
CLOSE prac_kursor;
S) - # *
- CcG -#
* 5 - ,
cA$2AJ " $IJM #
2M$:' 7
powodu braku wierszy
c2AJ " $IJM # 2M$:' 7
%ROWCOUNT - liczba wierszy w kursorze (po otwarciu kursora)
cN+A.M " $IJM #
- ) - rsora:
LOOP
FETCH prac_kursor INTO prac_nazw, prac_wydz;
IF prac_kursor%ROWCOUNT > 10 THEN
;;,5<:
...
EXIT WHEN prac_kursor%NOTFOUND;
...
END LOOP;
Bazy danych
Robert Chwastek
70
6.5. Rekordy
( .9Q+;9 ) -
* S) *
I ) # #
- * .9Q+;9
/
wierszom w tabeli, widoku lub kursorze, nie pozwala jednak na definiowanie typów
poszczególnych pól.
#/ * 8#
-
)
-
%ROWTYPE:
DECLARE
CURSOR prac_kursor IS
SELECT nazwisko, wydzial, data_zatrudnienia
FROM pracownicy;
prac_rek prac_kursor%ROWTYPE
...
FETCH prac_kursor INTO prac_rek;
Rekor
) -/ )
- -,
nazwa_rekordu nazwa_tabeli%ROWTYPE;
I ,
DECLARE
prac_rek pracownicy%ROWTYPE;
...
BEGIN
...
END;
)
,
nazwa_rekordu.nazwa_pola;
%- / 0 )
# W1 ) /,
suma := suma + prac_rek.placa;
6) # - #* )
/ ) #
# - *
. # ) /
C,RG -,
% = (%! 4(!>! 5'
J) ,
prac_rek.nazwisko := UPPER(prac_rek.nazwisko);
. # ) e jest na dwa sposoby:
# 0 -
/ - - 4
Bazy danych
Robert Chwastek
71
# +M9M:$ *** N$A - 2M$:' *** N$A
J) ,
DECLARE
prac_rek1 pracownicy%ROWTYPE;
prac_rek2 pracownicy%ROWTYPE;
BEGIN
SELECT nazwisko, imie, wydzial, placa_podstawowa
INTO prac_rek1 FROM pracownicy
WHERE wydzial = 30;
prac_rek2 := prac_rek1;
...
END;
.9Q+;9 2AI * +
,
DECLARE
CURSOR prac_kursor IS
SELECT nazwisko, imie, wydzial, placa_podstawowa
FROM pracownicy;
BEGIN
FOR pracownik IN prac_kursor LOOP
suma := suma + pracownik.placa_podstawowa;
...
END LOOP;
Niejawnie deklarowanym rekordem jest tu zmienna o nazwie pracownik. Zmienna ta jest
-
nazwa_kursora%ROWTYPE.
6.6.
$%
6.6.1.
Informacje podstawowe
)
* (# ) / , - -
# * )
) - ) / - * (
- ^. @
7 * (
0:PP 8? .9Q+;91 # - - * 8
- - /
- / *
( - * (
0 1 ) * .
-/, ^A @ ^? - @* (
.9Q+;9 ) ) / # - .9Q+;9*
Bazy danych
Robert Chwastek
72
. ) ^. ) @ -
/ ) - * & -
01 *
-
0 - 1* (
* ( ) -/
I%N+M* ( -
7 -
- -
* 8# - *
. ^ @
05MIAWNONM1 - - 3 :Q5,
DECLARE
cz_wsk NUMBER(3,1);
BEGIN
...
SELECT cena / zysk FROM akcje
?@';;0%5 % 2 ,)
-- ZERO_DIVIDE
INSERT INTO informacje (nazwa, c_z)
VALUES (‘ABC’, cz_wsk);
COMMIT
EXCEPTION
WHEN ZERO_DIVIDE THEN
INSERT INTO informacje (nazwa, c_z)
VALUES (‘ABC’, NULL);
COMMIT;
...
WHEN OTHERS THEN
ROLLBACK;
END;
. * 5
- - - )
* ( # -/
# ) ,
BEGIN
SELECT ...
;;%%! &- A& BC
SELECT ...
;;%%! &- A& BC
SELECT ...
;;%%! &- A& BC
END;
Bazy danych
Robert Chwastek
73
. - - -
#/ ) *
$ - ) # /
,
BEGIN
SELECT ...
SELECT ...
SELECT ...
EXCEPTION
WHEN NO_DATA_FOUND THEN
===D;%&* B&- 3A& BC
END;
( #/ *
5 ) ) - -)* 8#
- - )
- - *
6.6.2.
* '
$ .9Q+;9
- * (
# * (- ),
:JI+AIW%9IM%BWA.M "
-
)
otwartego;
J.WO%9WAWNMZ " -
N+MI$ - J.%$M
-
w indeksie zadeklarowanym jako UNIQUE;
NO%9NW:JI+AI "
-
kursora (np. nie otwartego);
NO%9NWJ6MI "
-
numerycznego z tekstu, który nie reprezentuje liczby;
AW%$%W2AJ " +M9M:$ /
) 0* +M9M:$ *** N$A14
+$AI%&MWMIIAI " - -
# 4
$AAW6%BWIA(+ " +M9M:$
) 0* +M9M:$ *** N$A14
O%9JMWMIIAI "
#
lub pola;
ZERO_DIVIDE - próba dzielenia przez zero;
6.6.3.
(
%- -)/ 0^/@1 -
* # - .9Q+;9
MZ:M.$NA 7 - * S)
Bazy danych
Robert Chwastek
74
- ('M
$'M #
-* 2 - 7 -
) - * A A$'MI+
0 1 / -
0 * #1* A #/ MZ:M.$NA
,
EXCEPTION
WHEN ... THEN
;;%&* ,)
WHEN ... THEN
;;%&* ,)
WHEN ... THEN
;;%&* ,)
WHEN OTHERS THEN
;;%&* (%% B ,)3
END;
8# - ) )
/ ('M AI,
WHEN over_limit OR under_limit OR VALUE_ERROR THEN
...
) )/ A$'MI+ #* + A$'MI+
/ * ) / ) ) ) -/
- - *
( -
* - - *
6.6.4.
* ' %
8 .9Q+;9 )
*( -/ #
I%N+M*
( - ) )
MZ:M.$NA* ,
DECLARE
overflow EXCEPTION;
result NUMBER(5);
BEGIN
...
END;
) / ) .9Q+;9 - 0
7 1 #
* ( ) ) #
* (
) -/
) )
rozkazach SQL.
Bazy danych
Robert Chwastek
75
) - *
6) / ) - *
Jak podano w
#
* ( ) -/
* +) I%N+M* J) ,
DECLARE
brak_czesci EXCEPTION;
liczba_czesci NUMBER(4);
BEGIN
...
IF liczba_czesci < 1 THEN
RAISE brak_czesci;
END IF;
...
EXCEPTION
WHEN brak_czesci THEN
;;%&* &- A& -1C
END;
6) ) 0 I%N+M1
,
RAISE INVALID_NUMBER;
: #/
- - * . ) -/
- )) - -
* ( ) ) I%N+M -
* ) / ) -
-
- #* .- #
- *
6.7.
!& !
6.7.1.
Rozkaz OPEN
Rozkaz OPEN wykonuje zapytanie skojarzone z jawnie zadeklarowanym kursorem
- - - * S
) *
+,
OPEN cursor_name
[(input_parameter [, input_parameter] ... )] ;
Parametry:
cursor_name - nazwa kursora uprzednio zadeklarowanego, który nie jest aktualnie
otwarty.
W " ) .9Q+;9 * 8
# )
0#
klauzuli WHERE).
Bazy danych
Robert Chwastek
76
. A.M -/ ) #/
* N #/ A.M
-/ # * . A.M
)
-/
celu pobrania ich z kursora.
. 0 A.M1
0 1 ) - / -,
( #/ ) A.M
* ( -/
# ) ) -/
CRbG* +- ) - ) # ,
DECLARE
CURSOR prac_kur(nazw CHAR, wydz NUMBER) IS ...
BEGIN
OPEN prac_kur(‘Kowalski’, 10);
...
OPEN prac_kur(wydz => 15, nazw => ‘Nowak’);
END;
6) ) / # )
/ )
/ *
6.7.2.
Rozkaz CLOSE
I :9A+M ) * S)
/ * I :9A+M
- - *
+,
CLOSE cursor_name ;
Parametry:
cursor_name - nazwa aktualnie otwartego kursora.
6.7.3.
Rozkaz FETCH
I 2M$:' - 0
+M9M:$ 1* A
* 5
#
kolumn w aktualnym wierszu.
+,
FETCH cursor_name INTO
{ record_name |
variable_name [, variable_name] ... } ;
Parametry:
Bazy danych
Robert Chwastek
77
cursor_name - nazwa aktualnie otwartego kursora.
?- W " * (
# -/ * )
/ * ( -/
- *
W "
- 0
)
-
%ROWTYPE).
.,
...
OPEN prac_kursor;
...
LOOP
FETCH prac_kursor INTO prac_rek;
EXIT WHEN prac_kursor%NOTFOUND;
...
END LOOP;
6.7.4.
Rozkaz SELECT ... INTO
Rozkaz SELECT ... INTO odczytuje informacje z bazy danych i zapisuje je do
* ( .9Q+;9 0 +;91 +M9M:$
N$A* %- - +M9M:$
0 ) /
/ 1*
+ +M9M:$ N$A,
SELECT select_list_item [, select_list_item] ... INTO
{ record_name |
variable_name [, variable_name] ... }
rest_of_select_statement ;
Parametry:
Zobacz opis rozkazu FETCH.
.,
SELECT nazwisko, placa*12 INTO pnazw, plac_sum
FROM pracownicy
WHERE pracownik_nr = 12345;
6.7.5.
Rozkaz IF
Rozkaz IF pozwala na warunkowe wykonywanie rozkazów.
+,
IF plsql_condition THEN seq_of_statements
[ELSEIF plsql_condition THEN seq_of_statements]
...
[ELSE seq_of_statements]
END IF;
Parametry:
X W " 0 ) - # 1
Bazy danych
Robert Chwastek
78
XWW " -/ 0-3
1
Opis:
I N2 )/ -
0 - 1* 8#
$'M ) M9+MN2 M9+M - M
N2 - )
M N2* (
M9+MN2* 8#
$'M N2 7* 8#
) M9+MN2*
8# ) M9+M
0# 1* ( - J99
*
.,
IF liczba_czesci < 20 THEN
ilosc_zamawianych := 50;
ELSEIF liczba_czesci < 30 THEN
ilosc_zamawianych := 20;
ELSE
ilosc_zamawianych := 5;
END IF;
INSERT INTO zamowienia
VALUES(typ_czesci, ilosc_zamawianych);
6.7.6.
Rozkaz LOOP
I 9AA. ) .9*Q+;9*
,
('N9M
2AI
2AI
+,
[<<label_name>>]
[ { WHILE plsql_condition } |
{ FOR {numeric_loop_param | cursor_loop_param } } ]
LOOP seq_of_statements END LOOP [ label_name ] ;
+ W W,
index IN [REVERSE] integer_expr .. integer_expr
+ W W,
record_name IN
{ cursor_name [(parameter [, parameter] ...)] |
( select_statement ) }
Bazy danych
Robert Chwastek
79
Parametry:
- W " * 6)
) MZN$ # /
#* . )
# ,
label_name.index
XWW " -
X W " .9*Q+;9* ( ('N9M -
) * A
#/ $IJM* (
*
[ " 2AI* # *
W[ " ) - * ()
- # 2AI*
IMOMI+M " / [ 0 1*
W " * ( #
2AI *
"
0#
parametrami).
W "
) * .9*Q+;9 - 0
1*
Opis:
N - ) *
$ 7 MZN$* .
,
<<loop1>> LOOP
...
IF (x > 10) THEN EXIT loop1;
...
END LOOP loop1;
. ('N9M /
* ( - ) *
( ) / * .,
WHILE x < 10 LOOP
...
x := x - y;
...
END LOOP;
. 2AI / # #/ *
)
* N ) -/ - * .,
FOR i IN 1 .. n LOOP
silnia := silnia * n;
Bazy danych
Robert Chwastek
80
END LOOP;
. 2AI ) / )
0 - 1* : )
* .,
DECLARE
CURSOR prac_kursor IS select * FROM pracownicy;
prac_rek prac_kursor%ROWTYPE;
BEGIN
...
FOR prac_rek IN prac_kursor LOOP
suma := suma + prac_rek.placa_podstawowa;
END LOOP;
...
END;
6.7.7.
Rozkaz EXIT
I MZN$ ) # * I , -
*
+,
EXIT [label_name] [WHEN plsql_condition] ;
Parametry:
- W " / #* 8#
MZN$
# - ))
wykonywanej.
X W " ) MZN$ * 6 -/
.9*Q+;9* (# -
#/ $IJM*
6.7.8.
Rozkaz GOTO
I &A$A ) hmiastowego przekazania sterowania od rozkazu
*
+ ,
<< label_name >>
+ &A$A,
GOTO label_name ;
Opis:
I &A$A )
- - - - * 5 -
) - - *
) ) * 8# &A$A
)
2AI
automatycznie.
Bazy danych
Robert Chwastek
81
7. Literatura
1.
Wojciech Cellary, Zbyszko Królikowski “Wprowadzenie do projektowania baz danych
dBase III”, Wydawnictwa Naukowo -Techniczne, Warszawa 1988
2.
ORACLE SQL Language Reference Manual
3.
ORACLE PL/SQL User’s Guide and Reference
4.
ORACLE SQL*Plus User’s Guide and Reference