You are on page 1of 36

IDZ DO

PRZYKADOWY ROZDZIA
SPIS TRECI

KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG

TWJ KOSZYK
DODAJ DO KOSZYKA

CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK

CZYTELNIA
FRAGMENTY KSIEK ONLINE

Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl

Oracle8.
Programowanie
w jzyku PL/SQL
Autor: Scott Urman
Tumaczenie: Tomasz Pdziwiatr, Grzegorz Stawikowski,
Cezary Welsyng
ISBN: 83-7197-533-3
Tytu oryginau: Oracle8 PL/SQL Programming
Format: B5, stron: 762
Wykorzystanie wbudowanego w system Oracle jzyka PL/SQL w znaczcy sposb
powiksza potencja programisty systemw bazodanowych. PL/SQL czy w sobie due
moliwoci i elastyczno jzyka czwartej generacji (4GL) SQL z konstrukcjami
proceduralnymi jzyka trzeciej generacji (3GL). Programy napisane w tym jzyku
umoliwiaj obsug danych zarwno w samym systemie Oracle, jak i w zewntrznych
aplikacjach.
Ksika Oracle8. Programowanie w jzyku PL/SQL to wyczerpujce omwienie jzyka
PL/SQL. To doskonaa pozycja uatwiajca nauk tego jzyka, wietnie te sprawdza
si jako podrczne kompendium wiedzy o PL/SQL, pomocne w codziennej pracy.
Liczne przykady uzupeniaj informacje zawarte w ksice pokazujc sprawdzone
metody rozwizywania problemw, napotykanych przez programistw.
W ksice omwiono midzy innymi:
Podstawy jzyka PL/SQL: struktura programu, zmienne, typy, wyraenia
i operatory oraz instrukcje sterujce
Korzystanie z rekordw i tabel
Korzystanie z SQL z poziomu PL/SQL, funkcje SQL dostpne w PL/SQL
Tworzenie i uywanie kursorw
Bloki w PL/SQL: podprogramy (procedury i funkcje), pakiety i wyzwalacze
Metody obsugi bdw w PL/SQL
Obiekty w PL/SQL, kolekcje
Testowanie i wykrywanie bdw
Zagadnienia zaawansowane: dynamiczny PL/SQL, komunikacja midzy sesjami,
kolejkowanie, obsuga zada, procedury zewntrzne
Optymalizacja aplikacji PL/SQL i metody zapewnienia maksymalnej wydajnoci
Ksika jest przeznaczona zarwno dla dowiadczonych programistw, jak i tych,
ktrzy jeszcze nie poznali innych jzykw trzeciej generacji. Przydatna, cho
niekonieczna, jest oglna znajomo systemu Oracle (czenie si i korzystanie z bazy
danych, podstawy jzyka SQL, itp.).

Spis treci
Wstp ...................................................................................................17
Rozdzia 1. Wprowadzenie do PL/SQL......................................................................23
Dlaczego jzyk PL/SQL?..........................................................................................................23
Model klient-serwer............................................................................................................25
Normy .................................................................................................................................26
Waciwoci jzyka PL/SQL ....................................................................................................26
Struktura bloku ...................................................................................................................26
Zmienne i typy danych .......................................................................................................27
Konstrukcje ptlowe ...........................................................................................................28
Konwencje stosowane w niniejszej ksice..............................................................................30
Wersje jzyka PL/SQL oraz bazy danych Oracle...............................................................30
Dokumentacja Oracle .........................................................................................................31
Kod dostpny na pycie CD................................................................................................32
Przykadowe tabele ...................................................................................................................32
Podsumowanie ..........................................................................................................................38

Rozdzia 2. Podstawy jzyka PL/SQL .......................................................................39


Blok PL/SQL.............................................................................................................................39
Podstawowa struktura bloku...............................................................................................42
Jednostki leksykalne .................................................................................................................44
Identyfikatory .....................................................................................................................44
Ograniczniki .......................................................................................................................46
Literay................................................................................................................................48
Komentarze.........................................................................................................................49
Deklaracje zmiennych...............................................................................................................51
Skadnia deklaracji..............................................................................................................51
Inicjowanie zmiennych.......................................................................................................52
Typy danych w jzyku PL/SQL................................................................................................53
Typy skalarne......................................................................................................................53
Typy zoone ......................................................................................................................60
Typy odwoania ..................................................................................................................60
Typy LOB...........................................................................................................................60
Wykorzystanie atrybutu %Type .........................................................................................61
Podtypy definiowane przez uytkownika...........................................................................62
Konwersja pomidzy typami danych..................................................................................62
Zakres i widoczno zmiennej............................................................................................64
Wyraenia i operatory...............................................................................................................65
Przypisanie..........................................................................................................................66
Wyraenia ...........................................................................................................................67

Oracle8. Programowanie w jzyku PL/SQL

Struktury sterowania PL/SQL...................................................................................................69


Instrukcja IF-THEN-ELSE.................................................................................................70
Ptle ....................................................................................................................................73
Instrukcje GOTO oraz etykiety ..........................................................................................77
Dyrektywy pragma .............................................................................................................80
Styl programowania w jzyku PL/SQL ....................................................................................80
Wprowadzanie komentarzy ................................................................................................81
Nazywanie zmiennych........................................................................................................82
Stosowanie duych liter......................................................................................................82
Odstpy w kodzie programu...............................................................................................82
Oglne uwagi dotyczce stylu programowania..................................................................83
Podsumowanie ..........................................................................................................................83

Rozdzia 3. Rekordy i tabele ....................................................................................85


Rekordy w jzyku PL/SQL .......................................................................................................85
Przypisanie rekordu ............................................................................................................86
Stosowanie operatora %ROWTYPE ..................................................................................88
Tabele........................................................................................................................................88
Tabele a tablice ...................................................................................................................89
Atrybuty tabeli ....................................................................................................................91
Wytyczne stosowania tabel PL/SQL ..................................................................................94
Podsumowanie ..........................................................................................................................95

Rozdzia 4. SQL w PL/SQL.......................................................................................97


Instrukcje SQL ..........................................................................................................................97
Wykorzystanie instrukcji SQL w jzyku PL/SQL..............................................................98
Stosowanie instrukcji DML w jzyku PL/SQL ........................................................................99
Instrukcja SELECT...........................................................................................................101
Instrukcja INSERT ...........................................................................................................102
Instrukcja UPDATE..........................................................................................................104
Instrukcja DELETE ..........................................................................................................104
Klauzula WHERE.............................................................................................................105
Odwoania do tabel ...........................................................................................................108
Powizania bazy danych...................................................................................................109
Synonimy..........................................................................................................................110
Pseudokolumny.......................................................................................................................110
Pseudokolumny CURRVAL oraz NEXTVAL.................................................................110
Pseudokolumna LEVEL ...................................................................................................111
Pseudokolumna ROWID ..................................................................................................111
Pseudokolumna ROWNUM .............................................................................................112
Instrukcje GRANT i REVOKE. Uprawnienia........................................................................112
Uprawnienia obiektowe a uprawnienia systemowe..........................................................113
Instrukcje GRANT oraz REVOKE ..................................................................................113
Role...................................................................................................................................115
Sterowanie transakcjami .........................................................................................................116
Instrukcja COMMIT a instrukcja ROLLBACK...............................................................116
Punkty zachowania ...........................................................................................................118
Transakcje a bloki.............................................................................................................119
Podsumowanie ........................................................................................................................120

Rozdzia 5. Wbudowane funkcje SQL......................................................................121


Wstp ......................................................................................................................................121
Funkcje znakowe zwracajce wartoci znakowe ....................................................................122
CHR ..................................................................................................................................122
CONCAT..........................................................................................................................122

Spis treci

INITCAP...........................................................................................................................123
LOWER ............................................................................................................................123
LPAD................................................................................................................................124
LTRIM..............................................................................................................................125
NLS_INITCAP .................................................................................................................125
NLS_LOWER...................................................................................................................126
NLS_UPPER ....................................................................................................................126
REPLACE.........................................................................................................................127
RPAD................................................................................................................................128
RTRIM..............................................................................................................................128
SOUNDEX .......................................................................................................................129
SUBSTR ...........................................................................................................................130
SUBSTRB.........................................................................................................................131
TRANSLATE ...................................................................................................................131
UPPER..............................................................................................................................132
Funkcje znakowe zwracajce wartoci liczbowe....................................................................133
ASCII................................................................................................................................133
INSTR...............................................................................................................................133
INSTRB ............................................................................................................................134
LENGTH ..........................................................................................................................135
LENGTHB........................................................................................................................135
NLSSORT.........................................................................................................................136
Funkcje numeryczne ...............................................................................................................136
ABS...................................................................................................................................136
ACOS................................................................................................................................137
ASIN .................................................................................................................................137
ATAN ...............................................................................................................................138
ATAN2 .............................................................................................................................138
CEIL .................................................................................................................................139
COS...................................................................................................................................139
COSH................................................................................................................................140
EXP...................................................................................................................................140
FLOOR .............................................................................................................................140
LN .....................................................................................................................................141
LOG ..................................................................................................................................141
MOD .................................................................................................................................142
POWER ............................................................................................................................142
ROUND ............................................................................................................................143
SIGN .................................................................................................................................143
SIN....................................................................................................................................144
SINH .................................................................................................................................144
SQRT ................................................................................................................................144
TAN ..................................................................................................................................145
TANH ...............................................................................................................................145
TRUNC.............................................................................................................................146
Funkcje zwizane z dat .........................................................................................................146
ADD_MONTHS...............................................................................................................146
LAST_DAY......................................................................................................................147
MONTHS_BETWEEN ....................................................................................................147
NEW_TIME .....................................................................................................................148
NEXT_DAY .....................................................................................................................149
ROUND ............................................................................................................................149
SYSDATE ........................................................................................................................150
TRUNC.............................................................................................................................151

Oracle8. Programowanie w jzyku PL/SQL

Funkcje dokonujce konwersji................................................................................................152


CHARTOROWID ............................................................................................................152
CONVERT .......................................................................................................................153
HEXTORAW ...................................................................................................................153
RAWTOHEX ...................................................................................................................154
ROWIDTOCHAR ............................................................................................................154
TO_CHAR(daty) ..............................................................................................................155
TO_CHAR(etykiety) ........................................................................................................155
TO_CHAR(liczba)............................................................................................................157
TO_DATE ........................................................................................................................159
TO_LABEL ......................................................................................................................159
TO_MULTI_BYTE..........................................................................................................160
TO_NUMBER..................................................................................................................160
TO_SINGLE_BYTE ........................................................................................................161
Funkcje grupowe.....................................................................................................................161
AVG..................................................................................................................................161
COUNT.............................................................................................................................162
GLB ..................................................................................................................................163
LUB ..................................................................................................................................163
MAX .................................................................................................................................163
MIN...................................................................................................................................164
STDDEV...........................................................................................................................164
SUM..................................................................................................................................165
VARIANCE......................................................................................................................165
Inne funkcje.............................................................................................................................166
BFILENAME ...................................................................................................................166
DECODE ..........................................................................................................................166
DUMP...............................................................................................................................167
EMPTY_CLOB/EMPTY_BLOB.....................................................................................169
GREATEST......................................................................................................................169
GREATEST_LB...............................................................................................................170
LEAST..............................................................................................................................170
LEAST_UB ......................................................................................................................170
NVL ..................................................................................................................................171
UID ...................................................................................................................................171
USER ................................................................................................................................172
USERENV........................................................................................................................172
VSIZE ...............................................................................................................................173
PL/SQL w dziaaniu. Drukowanie liczb w postaci tekstowej.................................................174
Podsumowanie ........................................................................................................................180

Rozdzia 6. Kursory ...............................................................................................181


Czym jest kursor?....................................................................................................................181
Przetwarzanie kursorw jawnych .....................................................................................182
Przetwarzanie kursorw niejawnych ................................................................................189
Ptle pobierania danych kursora .............................................................................................191
Ptle proste........................................................................................................................191
Ptle WHILE ....................................................................................................................193
Ptle FOR kursora.............................................................................................................194
Wyjtek NO_DATA_FOUND kontra atrybut %NOTFOUND .......................................195
Kursory z klauzul FOR UPDATE instrukcji SELECT...................................................196
Zmienne kursora .....................................................................................................................199
Deklaracja zmiennej kursora ............................................................................................200
Przydzielenie obszaru pamici dla zmiennych kursora ....................................................201
Otwieranie zmiennej kursora dla zapytania......................................................................202

Spis treci

Zamykanie zmiennych kursora.........................................................................................203


Pierwszy przykad zmiennej kursora ................................................................................203
Drugi przykad zmiennej kursora .....................................................................................205
Ograniczenia uycia zmiennych kursora ..........................................................................206
Podsumowanie ........................................................................................................................207

Rozdzia 7. Podprogramy: procedury i funkcje ........................................................209


Tworzenie procedur i funkcji..................................................................................................209
Tworzenie procedury ........................................................................................................210
Tworzenie funkcji.............................................................................................................221
Wyjtki wywoywane wewntrz podprogramw .............................................................224
Usuwanie procedur i funkcji.............................................................................................226
Pooenie podprogramw .......................................................................................................226
Skadowane podprogramy oraz sownik danych ..............................................................226
Podprogramy lokalne........................................................................................................228
Zalenoci dotyczce podprogramw.....................................................................................231
Okrelanie zalenoci .......................................................................................................233
Uprawnienia i podprogramy skadowane ...............................................................................236
Uprawnienie EXECUTE ..................................................................................................236
Skadowane podprogramy i role.......................................................................................237
Podsumowanie ........................................................................................................................239

Rozdzia 8. Pakiety ...............................................................................................241


Pakiety.....................................................................................................................................241
Specyfikacja pakietu.........................................................................................................241
Ciao pakietu.....................................................................................................................243
Pakiety i zakres .................................................................................................................245
Przecienie podprogramw pakietowych .......................................................................246
Inicjalizacja pakietu ..........................................................................................................247
Pakiety i zalenoci...........................................................................................................249
Stosowanie skadowanych funkcji w instrukcjach SQL .........................................................251
Poziomy czystoci ............................................................................................................252
Parametry domylne .........................................................................................................256
PL/SQL w dziaaniu Eksporter schematw PL/SQL.........................................................256
Podsumowanie ........................................................................................................................264

Rozdzia 9. Wyzwalacze.........................................................................................265
Tworzenie wyzwalaczy...........................................................................................................265
Komponenty wyzwalacza.................................................................................................267
Wyzwalacze i sownik danych..........................................................................................270
Kolejno uruchamiania wyzwalaczy...............................................................................272
Stosowanie wartoci :old oraz :new w wyzwalaczach na poziomie wiersza ...................273
Korzystanie z predykatw wyzwalacza: INSERTING, UPDATING oraz DELETING.....276
Tabele mutujce ......................................................................................................................278
Przykad tabeli mutujcej .................................................................................................280
Rozwizanie problemu bdu tabeli mutujcej.................................................................281
PL/SQL w dziaaniu wdraanie techniki kaskadowego uaktualniania ..............................283
Program narzdziowy kaskadowego uaktualniania..........................................................285
Dziaanie pakietu kaskadowego uaktualniania.................................................................288
Podsumowanie ........................................................................................................................292

Rozdzia 10. Obsuga bdw ...................................................................................293


Zdefiniowanie wyjtku ...........................................................................................................293
Deklarowanie wyjtkw ...................................................................................................295
Wywoywanie wyjtkw ..................................................................................................298
Obsuga wyjtkw ............................................................................................................299

10

Oracle8. Programowanie w jzyku PL/SQL

Dyrektywa pragma EXCEPTION_INIT ..........................................................................305


Stosowanie funkcji RAISE_APPLICATION_ERROR ...................................................305
Propagacja wyjtkw ..............................................................................................................308
Wyjtki wywoane w sekcji wykonania ...........................................................................308
Wyjtki wywoane w sekcji deklaracji .............................................................................310
Wyjtki wywoane w sekcji wyjtkw .............................................................................312
Wytyczne wyjtkw................................................................................................................314
Zakres wyjtkw...............................................................................................................314
Unikanie nieobsugiwanych wyjtkw.............................................................................315
Maskowanie lokalizacji bdu ..........................................................................................315
PL/SQL w dziaaniu oglny program obsugi bdw.......................................................316
Podsumowanie ........................................................................................................................324

Rozdzia 11. Obiekty ...............................................................................................325


Wprowadzenie ........................................................................................................................325
Podstawy programowania obiektowego ...........................................................................325
Obiektowo-relacyjne bazy danych ...................................................................................327
Typy obiektw ........................................................................................................................328
Definiowanie typw obiektowych....................................................................................328
Deklarowanie i inicjalizacja obiektw..............................................................................330
Metody..............................................................................................................................332
Zmiana i usuwanie typw.................................................................................................338
Zalenoci midzy obiektami ...........................................................................................340
Obiekty w bazie danych..........................................................................................................340
Pooenie obiektw...........................................................................................................341
Obiekty w instrukcjach DML ...........................................................................................344
Metody MAP i ORDER....................................................................................................349
Podsumowanie ........................................................................................................................351

Rozdzia 12. Kolekcje..............................................................................................353


Tabele zagniedone ...............................................................................................................353
Deklarowanie tabeli zagniedonej ..................................................................................353
Zagniedone tabele w bazie danych ...............................................................................356
Tabele zagniedone a tabele indeksowe .........................................................................361
Tablice o zmiennym rozmiarze...............................................................................................361
Deklarowanie tablicy o zmiennym rozmiarze ..................................................................362
Tablice o zmiennym rozmiarze w bazie danych...............................................................363
Tablice o zmiennym rozmiarze a tabele zagniedone ....................................................365
Metody dla kolekcji ................................................................................................................366
EXISTS.............................................................................................................................366
COUNT.............................................................................................................................367
LIMIT ...............................................................................................................................368
FIRST i LAST ..................................................................................................................368
NEXT i PRIOR.................................................................................................................369
EXTEND ..........................................................................................................................369
TRIM ................................................................................................................................371
DELETE ...........................................................................................................................373
Podsumowanie ........................................................................................................................374

Rozdzia 13. rodowiska wykonawcze PL/SQL .........................................................375


Rne mechanizmy jzyka PL/SQL .......................................................................................375
Implikacje umieszczenia mechanizmu PL/SQL po stronie klienta ..................................377
Mechanizm PL/SQL po stronie serwera .................................................................................378
Program SQL*Plus ...........................................................................................................378
Prekompilatory Oracle......................................................................................................383

Spis treci

11

OCI ...................................................................................................................................389
Program SQL-Station .......................................................................................................392
Mechanizm PL/SQL po stronie klienta...................................................................................396
Przyczyny wykorzystywania mechanizmu PL/SQL po stronie klienta............................396
Program Oracle Forms......................................................................................................397
Program Procedure Builder ..............................................................................................399
Wrapper PL/SQL ....................................................................................................................401
Wykonanie wrappera ........................................................................................................401
Pliki wejcia i wyjcia ......................................................................................................402
Sprawdzanie syntaktyki i semantyki ................................................................................402
Wytyczne dla programu wrapper......................................................................................403
Podsumowanie ........................................................................................................................403

Rozdzia 14. Testowanie i wykrywanie bdw..........................................................405


Diagnostyka problemu ............................................................................................................405
Wytyczne wykrywania i usuwania bdw ......................................................................405
Pakiet Debug sucy do wykrywania i usuwania bdw...............................................407
Wstawianie do tabeli testowania.............................................................................................407
Problem 1..........................................................................................................................407
Pakiet DBMS_OUTPUT ........................................................................................................415
Skadniki pakietu DBMS_OUTPUT ................................................................................416
Problem 2..........................................................................................................................420
Programy PL/SQL suce do wykrywania i usuwania bdw .............................................426
Program Procedure Builder.....................................................................................................426
Problem 3..........................................................................................................................426
Program SQL-Station..............................................................................................................432
Problem 4..........................................................................................................................433
Porwnanie programw Procedure Builder i SQL-Station.....................................................437
Metodyka programowania ......................................................................................................438
Programowanie modularne...............................................................................................438
Projektowanie zstpujce..................................................................................................439
Abstrakcja danych ............................................................................................................440
Podsumowanie ........................................................................................................................440

Rozdzia 15. Dynamiczny PL/SQL ............................................................................441


Wprowadzenie ........................................................................................................................441
Instrukcje SQL statyczne a instrukcje dynamiczne ..........................................................441
Oglny opis pakietu DBMS_SQL ....................................................................................442
Wykonywanie instrukcji DML oraz DDL nie bdcych zapytaniami....................................446
Otwieranie kursora............................................................................................................447
Parsowanie instrukcji........................................................................................................447
Wizanie kadej zmiennej wejciowej .............................................................................448
Wykonanie instrukcji........................................................................................................450
Zamykanie kursora ...........................................................................................................450
Przykad ............................................................................................................................451
Wykonywanie instrukcji DDL..........................................................................................452
Wykonywanie zapyta......................................................................................................453
Parsowanie instrukcji........................................................................................................454
Zdefiniowanie zmiennych wyjciowych ..........................................................................454
Pobieranie wierszy............................................................................................................456
Zwracanie wynikw do zmiennych PL/SQL....................................................................456
Przykad ............................................................................................................................458
Wykonywanie bloku PL/SQL.................................................................................................461
Parsowanie instrukcji........................................................................................................461
Pobranie wartoci kadej zmiennej wyjciowej ...............................................................462

12

Oracle8. Programowanie w jzyku PL/SQL

Przykad ............................................................................................................................463
Zastosowanie parametru out_value_size ..........................................................................465
PL/SQL w dziaaniu wykonywanie dowolnych procedur skadowanych .........................466
Udoskonalenia pakietu DBMS_SQL w wydaniu PL/SQL 8.0 ...............................................472
Parsowanie duych cigw znakw instrukcji SQL.........................................................473
Przetwarzanie tablicowe za pomoc pakietu DBMS_SQL ..............................................474
Opisywanie listy instrukcji SELECT................................................................................478
Rne procedury .....................................................................................................................481
Pobieranie danych typu LONG ........................................................................................481
Dodatkowe funkcje obsugi bdw .................................................................................482
PL/SQL w dziaaniu zapisywanie wartoci typu LONG do pliku .....................................484
Uprawnienia a pakiet DBMS_SQL.........................................................................................486
Uprawnienia wymagane dla pakietu DBMS_SQL...........................................................486
Role a pakiet DBMS_SQL ...............................................................................................487
Porwnanie pakietu DBMS_SQL z innymi metodami przetwarzania dynamicznego ...........487
Opisywanie listy instrukcji SELECT................................................................................488
Przetwarzanie tablicowe ...................................................................................................488
Operacje dzielenia na czci danych typu LONG ............................................................488
Rnice interfejsw ..........................................................................................................489
Wskazwki i techniki..............................................................................................................489
Ponowne zastosowanie kursorw .....................................................................................489
Zezwolenia........................................................................................................................489
Zawieszenia programu zwizane z operacjami DDL .......................................................490
Podsumowanie ........................................................................................................................490

Rozdzia 16. Komunikacja midzy sesjami................................................................491


Pakiet DBMS_PIPE ................................................................................................................491
Wysyanie komunikatu .....................................................................................................495
Odbieranie komunikatu ....................................................................................................496
Tworzenie potokw i zarzdzanie nimi............................................................................498
Uprawnienia i bezpieczestwo .........................................................................................500
Ustanawianie protokou komunikacji ...............................................................................501
Przykad ............................................................................................................................503
Pakiet DBMS_ALERT ...........................................................................................................509
Wysyanie ostrzeenia ......................................................................................................509
Odbieranie ostrzeenia......................................................................................................509
Inne procedury ..................................................................................................................511
Ostrzeenia i sownik danych ...........................................................................................512
Porwnanie pakietw DBMS_PIPE i DBMS_ALERT ..........................................................514
Podsumowanie ........................................................................................................................515

Rozdzia 17. Zaawansowane kolejkowanie w Oracle.................................................517


Wprowadzenie ........................................................................................................................517
Elementy systemu zaawansowanego kolejkowania .........................................................518
Realizacja zaawansowanego kolejkowania ......................................................................520
Operacje na kolejkach.............................................................................................................520
Typy pomocnicze..............................................................................................................521
Operacja ENQUEUE ........................................................................................................525
Operacja DEQUEUE ........................................................................................................526
Administrowanie kolejk ........................................................................................................526
Podprogramy pakietu DBMS_AQADM ..........................................................................526
Uprawnienia do kolejek....................................................................................................533
Kolejki i sownik danych ..................................................................................................533
Przykady ................................................................................................................................536
Tworzenie kolejek i tabel kolejek.....................................................................................536
Proste wstawianie i odbieranie komunikatw ..................................................................538

Spis treci

13

Czyszczenie kolejek ......................................................................................................539


Wstawianie i odbieranie komunikatw z uwzgldnieniem priorytetw...........................540
Wstawianie i odbieranie komunikatw z wykorzystaniem identyfikatora
korelacji lub identyfikatora komunikatu ....................................................................542
Przegldanie kolejek.........................................................................................................544
Stosowanie kolejek wyjtkw ..........................................................................................546
Usuwanie kolejek..............................................................................................................548
Podsumowanie ........................................................................................................................549

Rozdzia 18. Obsuga zada i plikw w bazie danych ................................................551


Zadania w bazie danych..........................................................................................................551
Procesy drugoplanowe......................................................................................................551
Uruchamianie zadania ......................................................................................................552
Zadania niewykonane .......................................................................................................556
Usuwanie zadania .............................................................................................................557
Dokonywanie zmian w zadaniu........................................................................................557
Przegldanie zada w sowniku danych ...........................................................................558
Warunki wykonywania zada...........................................................................................558
Obsuga plikw .......................................................................................................................558
Zabezpieczenia .................................................................................................................559
Wyjtki w pakiecie UTL_FILE ........................................................................................560
Otwieranie i zamykanie plikw ........................................................................................561
Zapis do pliku ...................................................................................................................563
Odczyt z pliku...................................................................................................................566
Przykady ..........................................................................................................................566
Podsumowanie ........................................................................................................................573

Rozdzia 19. Serwer WWW Oracle............................................................................575


rodowisko serwera WWW Oracle ........................................................................................575
Agent PL/SQL ..................................................................................................................577
Okrelanie wartoci parametrw w procedurach..............................................................578
Narzdzia WWW w PL/SQL..................................................................................................580
Pakiety HTP i HTF ...........................................................................................................580
Pakiet OWA_UTIL...........................................................................................................594
Pakiet OWA_IMAGE.......................................................................................................601
Pakiet OWA_COOKIE.....................................................................................................604
Tworzenie procedur OWA......................................................................................................607
Procedura OWA_UTIL.SHOWPAGE .............................................................................607
SQL-Station ......................................................................................................................608
Podsumowanie ........................................................................................................................608

Rozdzia 20. Procedury zewntrzne ..........................................................................609


Czym jest procedura zewntrzna?...........................................................................................609
Wywoywanie procedury zewntrznej .............................................................................610
Odwzorowywanie parametrw.........................................................................................617
Funkcje i procedury zewntrzne w pakietach...................................................................624
Poczenie zwrotne z baz danych..........................................................................................626
Podprogramy usugowe ....................................................................................................626
Wykonywanie instrukcji SQL w procedurze zewntrznej ...............................................629
Wskazwki, wytyczne i ograniczenia.....................................................................................630
Wykrywanie bdw w procedurach zewntrznych .........................................................630
Wytyczne ..........................................................................................................................632
Ograniczenia .....................................................................................................................633
Podsumowanie ........................................................................................................................634

14

Oracle8. Programowanie w jzyku PL/SQL

Rozdzia 21. Due obiekty .......................................................................................635


Czym s due obiekty? ...........................................................................................................635
Skadowanie duych obiektw .........................................................................................636
Due obiekty w instrukcjach DML...................................................................................637
Obiekty typu BFILE................................................................................................................639
Katalogi.............................................................................................................................639
Otwieranie i zamykanie plikw BFILE............................................................................641
Pliki BFILE w instrukcjach DML ....................................................................................641
Pakiet DBMS_LOB ................................................................................................................643
Podprogramy pakietu DBMS_LOB .................................................................................643
Wyjtki zgaszane przez podprogramy z pakietu DBMS_LOB.......................................658
Porwnanie interfejsw DBMS_LOB i OCI....................................................................658
PL/SQL w dziaaniu: Kopiowanie danych typu LONG do postaci LOB ...............................659
Podsumowanie ........................................................................................................................661

Rozdzia 22. Wydajno i strojenie ..........................................................................663


Obszar wsplny.......................................................................................................................663
Struktura instancji bazy Oracle.........................................................................................663
Jak funkcjonuje obszar wsplny? .....................................................................................667
Rozmiar obszaru wsplnego.............................................................................................669
Unieruchamianie obiektw...............................................................................................670
Strojenie instrukcji SQL..........................................................................................................672
Generowanie planu wykonania.........................................................................................672
Wykorzystywanie planu ...................................................................................................678
Sie..........................................................................................................................................679
Wykorzystywanie rodowiska PL/SQL po stronie klienta...............................................679
Unikanie powtrnej analizy skadni .................................................................................679
Przetwarzanie tablicowe ...................................................................................................680
Podsumowanie ........................................................................................................................680

Dodatek A Sowa zastrzeone w PL/SQL ...............................................................681


Dodatek B Pakiety dostpne w PL/SQL ................................................................683
Tworzenie pakietw................................................................................................................683
Opis pakietw .........................................................................................................................683
DBMS_ALERT ................................................................................................................683
DBMS_APPLICATION_INFO .......................................................................................684
DBMS_AQ i DBMS_AQADM........................................................................................686
DBMS_DEFER, DBMS_DEFER_SYS i DBMS_DEFER_QUERY ..............................686
DBMS_DDL.....................................................................................................................686
DBMS_DESCRIBE..........................................................................................................687
DBMS_JOB......................................................................................................................688
DBMS_LOB .....................................................................................................................688
DBMS_LOCK ..................................................................................................................688
DBMS_OUTPUT .............................................................................................................693
DBMS_PIPE.....................................................................................................................693
DBMS_REFRESH i DBMS_SNAPSHOT ......................................................................693
DBMS_REPCAT, DBMS_REPCAT_AUTH i DBMS_REPCAT_ADMIN ..................693
DBMS_ROWID ...............................................................................................................693
DBMS_SESSION.............................................................................................................694
DBMS_SHARED_POOL.................................................................................................695
DBMS_SQL .....................................................................................................................696
DBMS_TRANSACTION.................................................................................................696
DBMS_UTILITY .............................................................................................................698
UTL_FILE ........................................................................................................................700

Spis treci

15

Dodatek C Sownik wybranych elementw PL/SQL ................................................701


Dodatek D Sownik danych ...................................................................................721
Czym jest sownik danych?.....................................................................................................721
Standardy nazewnictwa ....................................................................................................721
Uprawnienia......................................................................................................................722
Perspektywy DBA, All i User w sowniku danych.................................................................722
Zalenoci .........................................................................................................................723
Kolekcje............................................................................................................................724
Bdy kompilacji...............................................................................................................724
Katalogi.............................................................................................................................725
Zadania .............................................................................................................................725
Biblioteki ..........................................................................................................................726
Due obiekty (LOB) .........................................................................................................726
Metody obiektw ..............................................................................................................727
Parametry metod obiektw ...............................................................................................727
Wartoci zwracane przez metody obiektw .....................................................................728
Typy obiektowe ................................................................................................................729
Odwoania do obiektw....................................................................................................729
Atrybuty typw obiektowych ...........................................................................................729
Obiekty w schemacie........................................................................................................730
Kod rdowy ...................................................................................................................730
Tabele ...............................................................................................................................731
Kolumny tabeli .................................................................................................................732
Wyzwalacze......................................................................................................................733
Kolumny wyzwalaczy ......................................................................................................734
Perspektywy......................................................................................................................734
Inne perspektywy sownika danych ........................................................................................735
dbms_alert_info ................................................................................................................735
dict_columns.....................................................................................................................735

Skorowidz ...........................................................................................737

Rozdzia 4.

SQL w PL/SQL
Strukturalny jzyk zapyta (SQL) okrela sposb manipulowania danymi w bazie danych
Oracle. Konstrukcje proceduralne, ktre przedstawiono w rozdziale 2. i 3., staj si znacznie
bardziej uyteczne w poczeniu z moc przetwarzania jzyka SQL, poniewa wtedy
konstrukcje te pozwalaj programom PL/SQL na manipulowanie danymi w bazie danych
Oracle. W niniejszym rozdziale zostan omwione instrukcje SQL, ktre s dozwolone
w jzyku PL/SQL i instrukcje sterowania transakcjami, ktre gwarantuj utrzymanie
spjnoci danych. W rozdziale 5. Czytelnik zapozna si z wbudowanymi funkcjami SQL.

Instrukcje SQL
Instrukcje SQL mona podzieli na sze kategorii, ktre wymieniono poniej. W tabeli
4.1 znajduje si kilka przykadowych instrukcji. Szczegowy opis wszystkich instrukcji
SQL znajduje si w publikacji Server SQL Reference.
Tabela 4.1. Kategorie instrukcji SQL
Kategoria

Przykadowe instrukcje SQL

Instrukcje jzyka manipulowania danymi DML


(Data Manipulation Language)

, ,
, ,    ,

 
 

Instrukcje jzyka definicji danych DDL


(Data Definition Language)


,  , ,  ,  

Instrukcje sterowania transakcj

 ,   ,  




Instrukcje sterowania sesji

  ,   

Instrukcje sterowania systemu

 

Wbudowane polecenia SQL

 ,     ,   1

instrukcje jzyka manipulowania danymi DML (Data Manipulation Language)


su do zmieniania danych w tabelach lub danych zapyta w tabeli bazy danych,
ale nie umoliwiaj zmiany struktury tabeli lub innych obiektw;

Wbudowane polecenie SQL    jest dostpne w wydaniu Oracle 7.2 i wyszym.

98

Oracle8. Programowanie w jzyku PL/SQL

instrukcje jzyka definicji danych DDL (Data Definition Language) su


do tworzenia, usuwania lub zmieniania struktury obiektu schematu. Polecenia,
ktre zmieniaj uprawnienia do obiektw schematu, s rwnie instrukcjami DDL;

instrukcje sterowania transakcji gwarantuj zachowanie spjnoci danych dziki


zorganizowaniu instrukcji SQL w logiczne transakcje, ktrych wykonywanie
jako jednostki koczy si powodzeniem lub niepowodzeniem;

instrukcje sterowania sesji su do zmieniania ustawie dla pojedynczego


poczenia z baz danych, np. do aktywacji ledzenia sesji SQL;

instrukcje sterowania systemu su do zmieniania ustawie dla caej bazy danych,


np. do aktywowania lub dezaktywowania procesu archiwizacji;

wbudowane polecenia SQL s wykorzystywane w programach prekompilatora


Oracle.

Wykorzystanie instrukcji SQL w jzyku PL/SQL


Jedynymi instrukcjami SQL, ktre s dozwolone w programie PL/SQL, s instrukcje DML
oraz instrukcje sterowania transakcji. W szczeglnoci instrukcje DDL s niedozwolone.
Take instrukcja , mimo e jest klasyfikowana jako instrukcja DML, jest
niedozwolona. Aby to wyjani, konieczna jest znajomo zaoe projektowych przyjtych dla jzyka PL/SQL.
Oglnie jzyk programowania moe wiza zmienne na dwa sposoby: przez wizanie
wczesne lub wizanie pne. Wizanie zmiennej jest procesem identyfikowania lokacji
pamici skojarzonej z identyfikatorem programu. W jzyku PL/SQL wizanie uwzgldnia rwnie sprawdzenie istnienia zezwolenia na uzyskanie dostpu do odwoywanego
obiektu schematu w bazie danych. W przypadku jzyka, w ktrym stosuje si wizanie
wczesne, wizanie zmiennej nastpuje podczas etapu kompilacji, natomiast w przypadku jzyka, w ktrym stosuje si wizanie pne, proces wizania zmiennej jest odkadany a
do czasu uruchomienia programu. Uwzgldnienie procesu wizania wczesnego oznacza, e
etap kompilacji bdzie trwa duej (poniewa musi by wykonane wizanie zmiennych),
ale sam program bdzie wykonywany szybciej, poniewa wizanie bdzie ju zakoczone.
Wizanie pne skraca czas kompilacji, ale wydua czas wykonywania programu.
Jzyk PL/SQL celowo zaprojektowano w taki sposb, aby zastosowa wizanie wczesne.
Decyzj t podjto w celu zapewnienia jak najszybszego wykonywania bloku, poniewa
wszystkie obiekty bazy danych s sprawdzane przez kompilator. Jest to sensowne rozwizanie, poniewa bloki PL/SQL mog by skadowane w bazie danych za pomoc procedur,
funkcji, pakietw i wyzwalaczy. Obiekty te s skadowane w skompilowanej formie,
a zatem w razie potrzeby mog by bezporednio adowane z bazy danych do pamici
i uruchamiane. Wicej informacji na temat obiektw skadowanych znajduje si w rozdziaach 7., 8. oraz 9. Konsekwencj podjcia takiej decyzji projektowej jest zakaz stosowania instrukcji DDL. Instrukcje DDL modyfikuj obiekt bazy danych, w wic zachodzi
konieczno ponownego sprawdzania zezwole. Sprawdzanie zezwole wymagaoby ponownego wizania identyfikatorw, a ten proces jest przeprowadzany podczas kompilacji.
W tym punkcie warto rozway nastpujcy, hipotetyczny blok PL/SQL:

Rozdzia 4.

SQL w PL/SQL

99

 

 !  "
#$%! & '())*
  ! "#$%! )
  '("+&,+)*
 *

W celu kompilacji tego bloku identyfikator  wymaga dowizania. Podczas tego
procesu nastpuje sprawdzenie faktu istnienia tabeli. Jednak tabela nie moe istnie przed
uruchomieniem bloku. Z powyszego wynika, e omawiany blok nie moe zosta skompilowany, a zatem nie ma sposobu na uruchomienie go.
Instrukcje sterowania transakcji s jedynymi instrukcjami SQL, ktre nie maj moliwoci
modyfikowania obiektw schematu lub uprawnie do obiektw schematu i w ten sposb
s jedynymi poprawnymi instrukcjami SQL, stosowanymi w jzyku PL/SQL.

Stosowanie instrukcji DDL


Istnieje alternatywne rozwizanie problemu przedstawionego w poprzednim podrozdziale. Od wydania PL/SQL 2.1 jest dostpny wbudowany pakiet
.
Jest to pakiet, ktry umoliwia dynamiczne tworzenie instrukcji SQL podczas 1 tworzona
a do czasu uruchomienia programu, a wic kompilator PL/SQL nie musi wiza identyfikatorw w instrukcji, co pozwala na kompilowanie bloku. Pakiet
 jest szczegowo
opisany w rozdziale 15. Przykadowo, do wykonania instrukcji 
 z poprzedniego bloku mona uy pakietu
. Jednak nawet wtedy kompilacja instrukcji
  nie powiedzie si, poniewa tabela nie istnieje przed uruchomieniem bloku.
Rozwizaniem tego problemu jest zastosowanie pakietu
 rwnie do wykonywania instrukcji  .

Stosowanie instrukcji DML


w jzyku PL/SQL
Dozwolonymi instrukcjami DML w jzyku PL/SQL s instrukcje: ,  ,  
oraz . Instrukcje te dziaaj w nastpujcy sposb: instrukcja  zwraca te
wiersze z tabeli bazy danych, ktre odpowiadaj kryteriom podanym w jej klauzuli ,
instrukcja   dodaje wiersze do tabeli bazy danych, instrukcja   modyfikuje te
wiersze w tabeli bazy danych, ktre odpowiadaj klauzuli , natomiast instrukcja 
usuwa wiersze identyfikowane przez klauzul . Poza klauzul  powysze instrukcje mog uwzgldnia take inne klauzule. Klauzule te opisano w kolejnych podrozdziaach
niniejszego rozdziau.
Podczas wykonywania instrukcji SQL w programie SQL*Plus wyniki tego wykonania
s wywietlane na ekranie. Przykadowy sposb takiego wywietlania przedstawiono na
rysunku 4.1. W przypadku wykonywania instrukcji  ,   lub  SQL*Plus
zwraca liczb przetwarzanych wierszy. W razie wykonywania instrukcji  wiersze,
ktre odpowiadaj zapytaniu, s wywietlane na ekranie.

100

Oracle8. Programowanie w jzyku PL/SQL

Rysunek 4.1.
Wyniki
wykonania
instrukcji SQL
w programie
SQL*Plus

Naley zwrci uwag na sposb zastosowania instrukcji  . Wyniki wykonania tej
instrukcji pokazano na rysunku 4.1.

 
 #%-./01
2&-%0+&+
  #, %/0'('*

Wszystkie wartoci, ktre s wykorzystane w celu zmiany zawartoci tabeli 


, s
ustalone s znane podczas tworzenia instrukcji. Jzyk PL/SQL usuwa to ograniczenie za pomoc zmiennych. Stosowanie zmiennych jest dozwolone wszdzie tam, gdzie
w instrukcji SQL jest dozwolone stosowanie wyrae. Jeli zmienne s uywane w opisywany sposb, s nazywane zmiennymi dowizanymi. Przykadowo, w poprzedniej instrukcji   mona zastpi warto ustalon liczby zalicze ( ) zmienn
dowizan:
Dostpne na pycie CD w skrypcie bindvar.sql
 

#///3 #%-./4
*

56
%78./79%,/#7.:! %-./65



 
 #%-./0

2&-%0+&+
  #, %/0'('*
 *

Rozdzia 4.

SQL w PL/SQL

101

Nie wszystkie elementy w instrukcji SQL mog by zastpowane zmiennymi zastpowa


mona tylko wyraenia. W szczeglnoci musz by znane nazwy tabel i kolumn. Jest
to wymagane ze wzgldu na wizanie wczesne nazwy obiektw Oracle musz by
znane w czasie kompilacji. Z definicji warto zmiennej nie jest znana a do czasu uruchomienia programu. W celu przezwycienia tego ograniczenia mona rwnie wykorzystywa pakiet
.

Instrukcja SELECT
Instrukcja SELECT pobiera dane z bazy danych do zmiennych PL/SQL. Poniej przedstawiono skadni instrukcji SELECT:

W poniszej tabeli opisano wszystkie elementy.


Tabela 4.2. Klauzule wyboru instrukcji SELECT
Klauzula wyboru

Opis

./898,%

Kolumna (lub wyraenie) do wybrania. Kady element listy wyboru jest oddzielony
przecinkiem i moe by opcjonalnie identyfikowany przez alias (zamiennik).
Cay zbir elementw listy w instrukcji  nazywa si list wyboru.
Znak 6 w skadni jest skrtem zastpujcym cay wiersz. W ten sposb s zwracane
poszczeglne pola w tabeli w kolejnoci, w jakiej zdefiniowano pola.

;.

Zmienna PL/SQL, do ktrej bdzie przekazany element listy wyboru. Kada zmienna
powinna by kompatybilna ze swoim skojarzonym elementem listy wyboru.
Dlatego elementy listy oraz zmienne wyjciowe powinny istnie w tej samej liczbie.

%<,%-
5=

Moe by stosowany zamiast listy zmiennych. Rekord powinien zawiera pola,


ktre odpowiadaj elementom z listy wyboru, ale rwnie pozwalaj na atwiejsz
manipulacj zwracanymi danymi. Rekordy cz powizane pola w jednej jednostce
skadniowej. W ten sposb mona manipulowa tymi polami zarwno jako grup,
jak rwnie indywidualnie. Zagadnienia dotyczce rekordw opisano w dalszej
czci niniejszego rozdziau. Jeeli list wyboru jest znak 6, wtedy ten rekord moe
by zdefiniowany jako ,-9,..4 2
.

,-9,..

Identyfikuje tabel, z ktrej maj by pobrane dane. Moe by synonimem lub tabel
w odlegej bazie danych, okrelonej przez powizanie z baz danych. Wicej informacji
na temat odwoa tabel znajduje si w dalszej czci niniejszego rozdziau.

< 7 9$%

Kryterium dla tego zapytania. Klauzula ta identyfikuje wiersz, ktry bdzie zwrcony
przez zapytanie. Kryterium skada si z warunkw logicznych (booleowskich)
czonych operatorami logicznymi. Zagadnienia zwizane z kryteriami wyboru opisano
bardziej szczegowo w dalszej czci niniejszego rozdziau.

102

Oracle8. Programowanie w jzyku PL/SQL

Oglnie wicej klauzul jest dostpnych dla instrukcji . Przykadowo, zaliczaj si
do nich klauzule     oraz 
 . Szczegowo omwiono je w rozdziale 6.
Wicej informacji na ich temat znajduje si w publikacji Server SQL Reference.

Instrukcja  wedug podanej powyej skadni powinna zwraca najwyej jeden wiersz.
Klauzula  jest sprawdzana dla kadego wiersza w tabeli. Jeeli odpowiada ona wicej
ni jednemu wierszowi, PL\SQL zwraca nastpujcy komunikat o bdzie:
 >'?@AB.C>%,9D %8% %/,%$,%,9
;8.,:-9.%/779%#9.#:.7:-9.%/7)

W takim przypadku do pobrania kadego wiersza osobno konieczne jest zastosowanie


kursora. Wicej informacji na ten temat znajduje si w rozdziale 6.
W poniszym przykadzie przedstawiono sposb zastosowania dwch rnych instrukcji
:
Dostpne na pycie CD w skrypcie select.sql
 
! -#,%-/ -/4 2
*
! %#///3-%4
*
!, %/#///3#, %/4
*

>>
,.%7:-%<,%-7./ -/.7#$,9:9%<,%-7.
>>! -#,%-37879%,#.# 9C"7< 7 2&
>>,-,9.-8<,:- 9.%/7,9..378%,9.779%,#.#
>> 9C"778.79%#9/78/<.,9./ -/
>>,.97/,/,98:/7<6)32/,/,-,98%<,%>>:/7-E..,98:<,/ -/4 2
3
6
 ! -#,%F / -/
2&.-0'((((*
>>
,.%7-9,7.#///.7#$,9::97.8#$
>>! %,%7!, %/3;,9 7< 7 2&,-,9.-
>>8<,:- 9.%/7,9..3
-%"#, %/
 ! %"!, %/
F #///
2&%,,.-0GGGGA*
 *

Instrukcja INSERT
Skadni instrukcji   przedstawiono poniej. Naley zwrci uwag, e bezporednio
w instrukcji nie wystpuje klauzula WHERE (chocia moe ona wystpowa w podzapytaniu).
Klauzula  !" "#! odwouje si do tabeli Oracle, "$ " %!& odwouje si
do kolumny w tej tabeli, a &"$ jest wyraeniem SQL lub PL/SQL, co zdefiniowano
w poprzednim rozdziale. Odwoania do tabel omwiono bardziej szczegowo w dalszej

Rozdzia 4.

SQL w PL/SQL

103

czci niniejszego rozdziau. Jeeli instrukcja   zawiera %'" !, wtedy
elementy listy instrukcji ! powinny odpowiada kolumnom, do ktrych maj by
wstawiane dane.
Prawidowe zastosowanie kilku instrukcji   przedstawiono w poniszym przykadzie:
Dostpne na pycie CD w skrypcie insert.sql
 
! - / -/3.-4
*

>>
,.%7,98.-8E.<,% / -
/ -/D #3 
 ! -
F - *
>> ,-:9.%/7-,./ -/3
 / -/.-"E.%/"/)
  ! - "+.,$8+"+%+)*
>> ,-:-% C.9.%/7" 78: % /<9#:.7,/%-.,9
>>./% <#:.3
 / -/.-"E.%/"/)
  / -/D #3 "+
%.#<+"+
,+)*
 *

W nastpnym przykadzie przedstawiono nieprawidowy sposb wykonania polecenia


 . Elementy listy instrukcji  podzapytania nie odpowiadaj kolumnom, ktre
maj by wstawiane. Taka instrukcja powoduje zwrcenie bdu Oracle ORA-913: too
many values.
 %,,/
6F #///*

Kolejny przykad przedstawia prawidowo wydan instrukcj  . Przez wstawienie


kopii kadego wiersza nastpuje podwojenie wielkoci tabeli !".
 #///
6F #///*

Wersja Oracle8 z opcj obiektw dostarcza dodatkow klauzul dla instrukcji  
klauzuli (). W razie zastosowania tej klauzuli z tabelami obiektw jest zwracane
odwoanie do wstawianego obiektu. Wicej informacji na ten temat znajduje si w rozdziale 11.

104

Oracle8. Programowanie w jzyku PL/SQL

Instrukcja UPDATE
Poniej przedstawiono skadni instrukcji  :

Klauzula  !" "#! odwouje si do modyfikowanej tabeli, "$ " %!& jest
nazw kolumny, ktrej warto ma by zmieniona, a &"$ jest wyraeniem SQL,
co zdefiniowano w rozdziale 2. Jeeli instrukcja   zawiera %'" ,
elementy listy wyboru powinny odpowiada kolumnom w klauzuli .
W poniszym przykadzie pokazano zastosowanie instrukcji  :
Dostpne na pycie CD w skrypcie update.sql
 
!:,%/ -/3:,%4
*
!%-.#%/ B01*

>>./% <#:
-,-1-,,# %%#%-./
>>-9/78/<.#$/ -,9"<,%78/ -. :&./,%.3
!:,%B0+&./,%8+*

/ -/
# %%#%-./0# %%#%-./H!%-.#%/
2&:,%0!:,%*
 *

Instrukcja DELETE
Instrukcja  usuwa wiersze z tabeli bazy danych. Klauzula  wskazuje, ktre
wiersze maj by usunite. Poniej podana jest skadnia instrukcji :

Rozdzia 4.

SQL w PL/SQL

105

Klauzula  !" "#! odwouje si do tabeli z bazy danych Oracle, a %!"$!" *
definiuje zbir wierszy, ktre maj by usunite. Specjalna skadnia )(%
jest uywana wraz z definicj kursora i jest omwiona w rozdziale 6. Odwoania do tabeli
oraz klauzula  s omawiane szczegowo w kolejnej czci tego rozdziau, w podrozdziale Klauzula WHERE.
W poniszym przykadzie przedstawiono sposb stosowania kilku rnych instrukcji :
Dostpne na pycie CD w skrypcie delete.sql
 
! - ,EE *

! - ,EEB0'(*
>> / --,8#7#</"9<,%8#$.98/%#7:#:.#78
>>7%:/%,98#$/ -,93
 F #///
2&# %%/ -/I! - ,EE*
>> / --,8#7#<7-C,/ -/ -. :#C,<,,."<J%8
>>.,/.-:/7#77-8#$7.#73
 F / -/
2&# %%#%-./0(
  :,%0+#,,.#/+*
 *

Klauzula WHERE
Wraz z instrukcjami ,   oraz  stosuje si klauzul , bdc integraln czci wykonywanych przez te instrukcje operacji. Klauzula ta definiuje, ktre
instrukcje tworz zestaw aktywny zestaw wierszy zwracanych przez zapytanie ( )
lub na ktrych s wykonywane instrukcje   oraz .
Klauzula  skada si z warunkw poczonych operatorami logicznymi  , ) oraz
). Warunki zwykle przyjmuj form porwna, tak jak w poniszym przykadzie zastosowania instrukcji :
 
! %& 1)*

! %B0++*
>> / 9/78/<.</898-7. E,%8<
 F #///
2& 
 *
 *

Powyszy, przykadowy blok usuwa wszystkie te wiersze z tabeli 


, dla ktrych
warunek zosta oceniony na warto  (dla ktrych kolumna    = + +,. Przy
tego typu porwnaniach naley zwraca uwag na waciwe stosowanie nazw zmiennych
oraz sposb porwnywania znakw.

106

Oracle8. Programowanie w jzyku PL/SQL

Nazwy zmiennych
Na potrzeby kolejnego przykadu przyjto, e w poprzednim bloku programu zmieniono
nazw zmiennej z    na   :
 
 & 1)*

 %B0++*
>> / 9/78/<.</898-7. E,%8<
 F #///
2&-%0 *
 *

Ta prosta zmiana radykalnie wpywa na otrzymane wyniki wykonania tej instrukcji tak
zmodyfikowany blok usunie wszystkie wiersze tabeli 


, a nie tylko te, dla ktrych
zachodzi rwno -".+ +. Wynika to ze sposobu parsowania identyfikatorw
w instrukcji SQL. Kiedy mechanizm PL/SQL napotyka na warunek taki jak:
 

 

najpierw nastpuje sprawdzenie identyfikatorw / &"$ oraz 0 &"$ w celu ustalenia, czy odpowiadaj one kolumnom tabeli, na ktrych jest wykonywana dana operacja.
Nastpnie identyfikatory te s sprawdzane, czy s zmiennymi w bloku PL/SQL. Jzyk
PL/SQL nie rozrnia maych i duych liter, zatem w poprzednim bloku obydwa identyfikatory    oraz    s skojarzone z kolumn w tabeli 


, a nie ze
zmienn. Wynikiem sprawdzenia tego warunku dla kadego wiersza tabeli bdzie warto
 i dlatego wszystkie wiersze zostan usunite.
Jeeli blok posiada etykiet, mona w dalszym cigu uy tej samej nazwy dla zmiennej
jak dla kolumny tabeli dziki nadanej etykiecie do odwoania do zmiennej. Przedstawiony poniej blok daje podany efekt, a mianowicie usuwa tylko te wiersze, dla ktrych
-".+ +:
II ,#<KK
 
 %& 1)*

 %B0++*
>> / 9/78/<.</898-7. E,%8<
 F #///
2&-%0
  *
 *

Mimo e ten sposb dziaania prowadzi do uzyskania podanego wyniku, jednak stosowanie tej samej nazwy dla zmiennej PL/SQL i dla kolumny tabeli nie jest cech dobrego
stylu programowania. Te i inne wytyczne dotyczce stylu programowania w jzyku PL/SQL
omwiono w kocowej czci rozdziau 2.

Porwnania znakw
W poprzednim przykadzie znajduje si fragment kodu sucy do porwnywania wartoci
dwch znakw. W systemie Oracle mog by zastosowane dwa rne rodzaje porwna:
z dopenieniem odstpu (blank-padded) lub bez dopenienia odstpu (non-blank-padded).

Rozdzia 4.

SQL w PL/SQL

107

Te dwa rodzaje porwna rni si w sposobie porwnywania cigw znakw o rnych


dugociach. Przyjto, e s porwnywane dwa cigi znakw:   oraz  .
Do porwnania z dopenieniem odstpu stosuje si nastpujcy algorytm.
1. Jeeli cigi znakw   oraz   s rnej dugoci, krtszy cig

naley dopeni znakami odstpu (spacjami), tak aby obydwa miay t sam dugo.
2. Nastpnie porwnuje si kady cig znakw, znak po znaku, zaczynajc
od lewej strony. Przykadowo, w cigu znakw   znakiem jest  ,
a w cigu znakw   znakiem jest  .
3. Jeeli ASCII( ) < ASCII( ), to   <  .
Jeeli ASCII( ) > ASCII( ), to   >  .
Jeeli ASCII( ) = ASCII( ), to odpowiednio w cigach znakw
  oraz   przechodzi si do nastpnego znaku.
4. Jeeli moliwe jest osignicie kocw cigw znakw  
oraz  , wtedy te cigi s sobie rwne.

Przy zastosowaniu algorytmu porwnania z dopenieniem odstpu wszystkie ponisze


warunki zwrc warto :
+#+0+#+
+#+0+#+>>7879%,#.# 9C<,#,97<.,-/
>>9.%9/78#.C 7<,93
++I+#+
+#-+K+##+

Algorytm porwnania bez dopenienia odstpu jest nieco inny.


1. Naley porwna kady cig znakw, znak po znaku, zaczynajc od lewej strony.
Przykadowo, w cigu znakw   znakiem jest  , a w cigu znakw
  znakiem jest  .
2. Jeeli ASCII( ) < ASCII( ), to   <  .
Jeeli ASCII( ) > ASCII( ), to   >  .
Jeeli ASCII( ) = ASCII( ), to naley przej do nastpnego znaku
odpowiednio w cigach znakw   oraz  .
3. Jeeli cig znakw   koczy si przed cigiem znakw  ,
wtedy   <  . Jeeli cig znakw   koczy
si przed cigiem znakw  , wtedy   >  .

Przy zastosowaniu algorytmu porwnania bez dopenienia odstpu ponisze warunki


zwrc warto :
+#+0+#+
++I+#+
+#-+K+##+

Jednak ponisze porwnanie bez dopenienia odstpu zwrci warto ( , poniewa cigi
znakw s rnej dugoci. Jest to podstawowa rnica pomidzy powyszymi dwoma
metodami porwna.
+#+0+#+>>7879%,#.# 9C<,#,97<.,-/
>>9.%9/78#.C 7<,93

108

Oracle8. Programowanie w jzyku PL/SQL

Po zdefiniowaniu tych dwch rnych metod porwna warto si zastanowi, kiedy naley
stosowa kad z nich. Jzyk PL/SQL wykorzystuje metody porwnania z dopenieniem
odstpu tylko wtedy, gdy obydwa porwnywane cigi znakw s staej dugoci. Jeeli
dane cigi znakw s rnej dugoci, stosuje si metod porwnywania bez dopeniania
odstpu. Typ danych  okrela cig znakw o staej dugoci, a typ danych 10
okrela cig znakw o zmiennej dugoci. Stae znakowe (objte znakami apostrofu) s
zawsze uwaane za cigi znakw o staej dugoci.
Jeeli dana instrukcja nie jest wykonywana na poprawnych wierszach, naley sprawdzi typy danych uyte w klauzuli . Wykonanie poniszego bloku nie spowoduje usunicia
jakichkolwiek wierszy, poniewa zmienna    jest typu 10, a nie typu :
 
! %!"#1)*

! %B0++*
>> / 9/78/<.</898-7. E,%8<
 F #///
2&-%0! %*
 *

Kolumna    tabeli 


ma zdefiniowany typ danych . Wszystkie klasy
informatyki (computer science) posiadaj wartoci + + dla kolumny    naley
zwrci uwag na kocowy znak odstpu. Zmienna    = + + nie ma kocowego
znaku odstpu i zdefiniowano dla niej typ danych o zmiennej dugoci, a zatem instrukcja
 nie bdzie miaa adnego wpywu na wiersze.
Aby klauzula  daa podany efekt, dla zmiennych w bloku PL/SQL naley zdefiniowa ten sam typ danych, co dla porwnywanych kolumn bazy danych. Taki efekt
gwarantuje zastosowanie atrybutu 23.

Odwoania do tabel
Wszystkie operacje DML odwouj si do tabeli. Poniej przedstawiono przykad takiego
odwoania:
L 3MLN  M

gdzie *" identyfikuje waciciela tabeli, a - "$"#"$&"&* identyfikuje tabel


w odlegej bazie danych.
W celu nawizania poczenia z baz danych konieczne jest podanie nazwy uytkownika
i hasa dla odpowiedniego schematu uytkownika. Pniejsze instrukcje SQL, wydawane
podczas sesji, bd domylnie odwoywa si do tego schematu. Jeeli odwoanie do tabeli
jest niesklasyfikowane, jak w poniszym przykadzie:

 
:,%0+ /.#+
2&.-0'(((O*

wtedy ta nazwa tabeli (w tym przykadzie


  
) musi by nazw tabeli w schemacie
domylnym. Jeeli tak nie jest, wystpi bd:
 >G?@B,%!.9-,/,P./
 %/<89../.:)

Rozdzia 4.

SQL w PL/SQL

109

>@('B.-.E.% /-#%.-8E.<,% /.8#7-<%,98)

Schemat domylny jest schematem, z ktrym uytkownik jest poczony przed wykonywaniem jakichkolwiek instrukcji. Jeeli dana tabela znajduje si w innym schemacie,
moe by kwalifikowana przez nazw schematu, jak w kolejnym przykadzie:

$  / -/
:,%0+ /.#+
2&.-0'(((O*

Instrukcja   w powyszym przykadzie bdzie wykonana, jeeli zostanie nawizane


poczenie ze schematem tabeli  lub z innym schematem, dla ktrego przyznano
uprawnienie   na tabeli
  
.

Powizania bazy danych


Jeeli w systemie operacyjnym zainstalowano program SQL*Net, mona wykorzystywa
powizania bazy danych. Powizanie bazy danych jest odwoaniem do odlegej bazy
danych. Odlega baza danych moe pracowa w zupenie innym systemie operacyjnym
ni lokalna baza danych. Poniej przedstawiono instrukcj DDL, ktra tworzy powizanie bazy danych:
      
    F  
   *

Nazwa powizania bazy danych "$ " - "$"" podlega tym samym reguom skadniowym, co identyfikator bazy danych. Schemat w odlegej bazie danych jest identyfikowany
przez nazw uytkownika "$ "$&% %" oraz haso *"!, a "4$"% 5! jest poprawnym cigiem znakw poczenia dla odlegej bazy danych. Zakadajc, e utworzono
odpowiednie schematy i e jest zainstalowany program SQL*Net wersja 2., poniszy,
przykadowy fragment kodu tworzy powizanie bazy danych:
%& 'P#< 
  P F P
 +#< -/+*

Wicej informacji dotyczcych sposobw instalowania i konfigurowania programu


SQL*Net znajduje si w publikacji SQL*Net Users Guide and Reference. Kontynuujc
powyszy przykad, za pomoc utworzonego powizania mona zdalnie modyfikowa
tabel . W tym celu wpisuje si poniszy fragment kodu:

/ -/($ 
) 
:,%0+ /.#+
2&.-0'(((O*

Jeli powizanie bazy danych stanowi cz transakcji, wtedy ta transakcja jest nazywana
transakcj rozproszon, poniewa jej rezultatem jest zmodyfikowanie wicej ni jednej
bazy danych. Wicej informacji dotyczcych transakcji rozproszonych i sposobw zarzdzania nimi znajduje si w publikacji Server SQL Reference.

110

Oracle8. Programowanie w jzyku PL/SQL

Synonimy
Odwoania do tabel mog by skomplikowane, szczeglnie kiedy obejmuj operacje
zwizane ze schematem uytkownika i (lub) powizaniem bazy danych. Aby uatwi
obsug skomplikowanych odwoa, system Oracle pozwala na tworzenie ich synonimw.
Synonim w zasadzie zmienia nazw odwoania do tabeli, podobnie jak alias dla elementu
listy wyboru instrukcji . Synonim jest obiektem sownika danych i jest tworzony
przez instrukcj DDL  3)3 :
    F  *

W celu utworzenia synonimu naley za pomoc powyszego polecenia wstawi w miejsce


"$ " & nazw synonimu, a w miejsce  !" obiekt schematu, do ktrego
ma nastpi odwoanie. Obiektem tym moe by tabela, jak w poniszym przykadzie,
ale moe to by rwnie procedura, sekwencja lub inny obiekt bazy danych.
%* + *,P/ -/
F / -/(P#< *

Kontynuujc powyszy przykad, za pomoc utworzonego synonimu mona zapisa rozproszon instrukcj  :

$ 
 
:,%0+ /.#+
2&.-0'(((O*

Utworzenie synonimu nie powoduje przyznania adnych uprawnie na odwoywanym


obiekcie po prostu umoliwia wykorzystywanie jego alternatywnej nazwy. Jeeli obiekt
wymaga odwoania z innego schematu, dostp do tego obiektu powinien by przyznany
albo jawnie, albo przez rol (za pomoc instrukcji  ).

Pseudokolumny
Pseudokolumny s dodatkowymi obiektami, ktre mog by wywoywane tylko z poziomu
instrukcji SQL. Pod wzgldem skadniowym pseudokolumny s traktowane jak kolumny
w tabeli. Jednak faktycznie nie istniej w ten sam sposb jak kolumny. Zamiast tego s
one okrelane jako cz wykonania instrukcji SQL.

Pseudokolumny CURRVAL oraz NEXTVAL


Pseudokolumny 1 oraz 1 s uywane wraz z sekwencjami. Sekwencj jest
obiekt Oracle, ktry jest uywany do generowania unikatowych liczb. Sekwencja jest
tworzona za pomoc polecenia DDL  . Po utworzeniu sekwencji mona
uzyska do niej dostp. W tym celu wydaje si polecenie:
3  

oraz
3 

Rozdzia 4.

SQL w PL/SQL

111

gdzie % '" jest nazw sekwencji. Pseudokolumna 1 zwraca biec warto
sekwencji, a pseudokolumna1 inkrementuje sekwencj i zwraca now warto.
Obydwie pseudokolumny 1 oraz 1 zwracaj wartoci typu 
.
Wartoci sekwencji mog by uywane w licie wyboru zapytania, w klauzuli 1
instrukcji   oraz w klauzuli  instrukcji  . Jednak nie mog by one zastosowane w klauzuli  lub w instrukcji proceduralnej PL/SQL. Poniej podano przykady
poprawnego wykorzystania pseudokolumn 1 oraz 1:
 = / -/D #
 2&'((((*
>>2:./% <#:.'((((7,/.98<,%78/:<,9%,/#.-8E.<,%
 / -/.-"E.%/"/)
   
-  .!"+#,+"+.$+)*
>>2:./% <#:.'((('7,/.98<,%78/:<,9%,/#.-8E.<,%
 / -/.-"E.%/"/)
   
-  .!"+%C%+"+/,+)*
 
-  .!Q Q
F - *>>:.%9.<% :.#7/<9#:.
 
>>>>>>>>>>
'(((@
 
-  /!Q Q
F - *>>;9%#.7#9%,/#
 
>>>>>>>>>>
'(((@

Pseudokolumna LEVEL
Pseudokolumna 1 jest wykorzystywana tylko wewntrz instrukcji , ktra umoliwia poruszanie si po drzewie hierarchii, obejmujcym dan tabel. Podczas tego procesu
s stosowane klauzule  oraz )
3. Pseudokolumna 1 zwraca biecy
poziom drzewa jako warto typu 
. Wicej informacji na ten temat znajduje si
w publikacji Server SQL Reference.

Pseudokolumna ROWID
Pseudokolumna ) jest wykorzystywana w licie wyboru zapytania. Zwraca ona identyfikator danego wiersza. Formatem pseudokolumny jest 18-znakowy cig znakw, co
opisano w rozdziale 2. Pseudokolumna ) zwraca warto typu ) . W poniszym
przykadzie zapytanie zwraca wszystkie identyfikatory wierszy w tabeli 
(pokoje):
 2
F %,,/*
 2
>>>>>>>>>>>>>>>>>>
((((((?O3((((3(((@
((((((?O3((('3(((@

112

Oracle8. Programowanie w jzyku PL/SQL


((((((?O3(((@3(((@
((((((?O3(((13(((@
((((((?O3(((?3(((@

Identyfikator  2 w wersji Oracle8 rni si od identyfikatora  2 w wersji Oracle7.


Mimo to format zewntrzny dla obydwch wersji jest w dalszym cigu 18-znakowym
cigiem znakw. Wicej informacji na ten temat znajduje si w rozdziale 2.

Pseudokolumna ROWNUM
Pseudokolumna ) zwraca biecy numer wiersza w zapytaniu. Umoliwia to ograniczenie cakowitej liczby wierszy. Pseudokolumna ) jest wykorzystywana gwnie
w klauzuli  zapyta oraz w klauzuli  instrukcji  . Pseudokolumna )
zwraca warto typu 
. Wykonanie poniszego zapytania spowoduje zwrcenie
tylko dwch pierwszych wierszy z tabeli
  
:
6
F / -/
2& 2 I1*

Pierwszy wiersz posiada ) /, drugi ) 0, itd.


Warto  2  jest przypisywana wierszowi przed wykonaniem operacji sortowania
(za pomoc klauzuli  ). W rezultacie nie mona zastosowa tej pseudokolumny
w celu pobrania wierszy o najniszych wartociach ROWNUM dla okrelonej kolejnoci
wyszukiwania. Warto rozway przykadow, ponisz instrukcj:
E.%/"/
F / -/
2& 2 I1
  E.%/*

Wprawdzie powysza instrukcja zwraca dwa wiersze z tabeli   (studenci), posortowane wedug kolumny 0
  (imi), jednak niekoniecznie te wiersze s dwoma
pierwszymi wierszami wedug kolejnoci w caym sortowaniu. Aby to osign, najlepiej
zadeklarowa kursor dla tego zapytania i pobra tylko dwa pierwsze wiersze. Informacje
dotyczce kursorw i sposobw ich stosowania przedstawiono w rozdziale 6.

Instrukcje GRANT i REVOKE. Uprawnienia


Wprawdzie instrukcje DDL, takie jak 6 i 1)7, nie mog by bezporednio stosowane w programie PL/SQL, jednak maj one pewien wpyw na poprawno instrukcji SQL.
W celu wykonania instrukcji, takiej jak   lub , na tabeli Oracle jest konieczne
posiadanie pewnych uprawnie. Manipulowanie tymi uprawnieniami nastpuje za pomoc
instrukcji SQL: 6 oraz 1)7.

Rozdzia 4.

SQL w PL/SQL

113

Uprawnienia obiektowe a uprawnienia systemowe


Istniej dwa rne rodzaje uprawnie: obiektowe i systemowe. Uprawnienie obiektowe
pozwala na wykonywanie operacji na danym obiekcie (takim jak tabela). Uprawnienie
systemowe pozwala na wykonanie operacji na caej klasie obiektw.
W tabeli 4.3 opisano dostpne uprawnienia obiektowe. Uprawnienia obiektowe DDL
(,  , ( ) nie mog by zastosowane bezporednio w jzyku PL/SQL
(z wyjtkiem pakietu
), poniewa pozwalaj one na przeprowadzenie operacji
DDL na rozpatrywanym obiekcie.
Tabela 4.3. Uprawnienia obiektowe SQL
Uprawnienie
obiektowe

Opis

Typy obiektw
schematu



Pozwala uytkownikowi, ktremu przyznano uprawnienie,


na wydawanie instrukcji  (takiej jak   )
dotyczcej obiektu.

Tabele, sekwencje



Pozwala uytkownikowi, ktremu przyznano uprawnienie,


na wydawanie instrukcji  dotyczcej obiektu.

Tabele, perspektywy

 

Pozwala uytkownikowi, ktremu przyznano uprawnienie,


na wykonanie skadowanego obiektu PL/SQL (informacje
dotyczce obiektw skadowanych znajduj si w rozdziaach
od 7. do 9.).

Procedury, funkcje, pakiety

 

Pozwala uytkownikowi, ktremu przyznano uprawnienie,


na utworzenie indeksu na tabeli za pomoc polecenia
   .

Tabele



Pozwala uytkownikowi, ktremu przyznano uprawnienie,


na wydawanie instrukcji  w odniesieniu do obiektu.

Tabele, perspektywy

F

Pozwala uytkownikowi, ktremu przyznano uprawnienie,


na utworzenie ograniczenia, ktre odwouje si do tabeli.

Tabele



Pozwala uytkownikowi, ktremu przyznano uprawnienie,


na wydawanie instrukcji  dotyczcej obiektu.

Tabele, perspektywy,
sekwencje, migawki




Pozwala uytkownikowi, ktremu przyznano uprawnienie,


na wydawanie instrukcji
 dotyczcej obiektu.

Tabele, perspektywy

Istnieje wiele uprawnie systemowych, dotycz one prawie kadej moliwej operacji DDL.
Na przykad, uprawnienie systemowe  
 pozwala uytkownikowi, ktremu
przyznano to uprawnienie, na tworzenie tabel. Uprawnienie systemowe 3

pozwala uytkownikowi, ktremu przyznano uprawnienie, na tworzenie tabel w innym
schemacie uytkownika. Publikacja Server SQL Reference dokumentuje wszystkie dostpne
uprawnienia systemowe.

Instrukcje GRANT oraz REVOKE


Instrukcja 6 jest uywana w celu umoliwienia innemu schematowi uzyskania dostpu
do danego uprawnienia, natomiast instrukcja 1)7 suy do blokowania dostpu do uprawnienia, uzyskanego za pomoc instrukcji 6. Obydwie instrukcje mog by stosowane
do zarzdzania uprawnieniami systemowymi i obiektowymi.

114

Oracle8. Programowanie w jzyku PL/SQL

Instrukcja GRANT
Poniej przedstawiono skadni instrukcji 6 dla uprawnie obiektowych:
       L2& 
 M*

gdzie -"  jest nadawanym uprawnieniem, #% jest obiektem, do ktrego jest
przyznawany dostp, a $&% % jest uytkownikiem, ktry otrzymuje uprawnienie.
Przykadowo, jeli $&% % jest poprawnym schematem bazy danych, ponisza instrukcja 6 jest prawidowa:
  #///  78<,9.< *

W razie okrelenia opcji 6)) uytkownik $&% % otrzymuje prawo


przyznawania tego uprawnienia innym uytkownikom. W jednej instrukcji 6 mona
okrela wicej ni jedno uprawnienie obiektowe, przykadowo:
 
"  / -/  78<,9.< *

Poniej przedstawiono skadni instrukcji 6 sucej do przydzielania uprawnie


systemowych:
     L2& 
 M*

gdzie -"  jest uprawnieniem systemowym, a $&% % jest uytkownikiem,
ktry otrzymuje uprawnienie. W razie okrelenia opcji  )) uytkownik
$&% % otrzymuje prawo przyznawania tego uprawnienia innym uytkownikom.
Na przykad:
   "  
  , 78<,9.< *

Podobnie jak w przypadku instrukcji 6 dla uprawnie obiektowych, w jednej instrukcji
6 mona okrela wiksz liczb uprawnie systemowych.
6 jest instrukcj DDL, a wic jest natychmiast uaktywniana i po jej wykonaniu jest
wydawana niejawnie instrukcja potwierdzenia ) .

Instrukcja REVOKE
Poniej przedstawiono skadni instrukcji 1)7, ktra suy do odbierania uprawnie
obiektowych:
     F  L    M*

gdzie -"  jest odbieranym uprawnieniem, #% jest obiektem, dla ktrego
uprawnienie jest odbierane, a $&% % jest uytkownikiem, ktremu uprawnienie jest
odbierane. Przykadowo, poniej przedstawiono poprawny sposb zastosowania instrukcji
1)7:
  #///F  78<,9.< *

W razie odbierania uprawnienia ( i uwzgldnienia klauzuli   ) 


nastpuje usunicie wszystkich wizw integralnoci referencyjnej, utworzonych przez
uytkownika, ktremu odbiera si to uprawnienie.

Rozdzia 4.

SQL w PL/SQL

115

Istnieje moliwo odbierania wielu uprawnie za pomoc jednej instrukcji.


 
" " / -/F  78<,9.< *

Poniej przedstawiono skadni instrukcji 1)7, za pomoc odbiera si uprawnienia


systemowe:
   F  *

gdzie -"  jest odbieranym uprawnieniem systemowym, a $&% % jest uytkownikiem, ktremu jest odbierane dane uprawnienie. Poniej podano przykadowe,
poprawne zastosowanie instrukcji 1)7:
   "  
  F  78<,9.< *

Role
W przypadku duego systemu Oracle, gdzie istnieje wiele rnych kont uytkownikw,
zarzdzanie uprawnieniami moe by skomplikowanym zadaniem. W celu uatwienia
zarzdzania kontami w systemie Oracle stosuje si role. Rola w zasadzie jest zbiorem
uprawnie, zarwno systemowych, jak i obiektowych. Warto przeanalizowa nastpujcy
zestaw instrukcji:
  D %8*
  / -/ D %8*
  #/// D %8*
  %,,/ D %8*

Z powyszego wynika, e roli   przydzielono uprawnienie  na trzech


rnych tabelach. Teraz mona przyzna t rol uytkownikom:
 D %8  78<,9.< *
 D %8  78<,9.<*

W ten sposb uytkownicy:   i   otrzymali uprawnienie 
na trzech tabelach. Taki sposb postpowania moe uatwi zarzdzanie systemem, poniewa powyszym dziaaniem zastpiono sze oddzielnych operacji przyznawania
uprawnienia .
Rola 
 jest rol predefiniowan w systemie Oracle. Jest ona przyznawana automatycznie kademu uytkownikowi. A zatem mona wykonywa ponisz instrukcj:
  %9.. 
*

W ten sposb dane uprawnienie jest przyznawane kademu uytkownikowi systemu Oracle.
W systemie Oracle istniej take inne predefiniowane role. Zawieraj one typowe uprawnienia systemowe. Role te wymieniono w tabeli 4.4. Warto zauway, ze wszystkie wymienione w tej tabeli role s automatycznie przyznawane uytkownikowi 3  , ktry
jest predefiniowanym uytkownikiem systemu Oracle.
Zwykle role ) oraz  ) s przyznawane uytkownikom bazy danych, ktrzy
maj tworzy obiekty schematu, a sama rola ) jest przyznawana uytkownikom,
ktrzy wykonuj zapytania na obiektach schematu. Uytkownicy, ktrym przyznano tylko
rol ), mog wymaga dodatkowych uprawnie na obiektach schematu, do ktrych
musz mie dostp.

116

Oracle8. Programowanie w jzyku PL/SQL

Tabela 4.4. Predefiniowane role systemowe


Nazwa roli

Przyznane uprawnienia

 

 ,   ,     ,   = ,
  ,   ,   ,   2

 

  ,  


  ,  = ,    ,  
  

Wszystkie uprawnienia systemowe (z opcj 


 , wic waciciel roli 
moe je przyznawa z kolei innym uytkownikom), plus 
F    
oraz 
F    


F    

   ,  
  , plus ,
,  na tabelach
systemowych 1 $, 1   oraz 1 0


F    

  

Sterowanie transakcjami
Transakcja jest seri instrukcji SQL, ktrych wykonanie w ramach pewnej jednostki koczy
si powodzeniem lub niepowodzeniem. Transakcje s standardowym elementem pracy
relacyjnej bazy danych i stanowi zabezpieczenie przed utrat spjnoci danych. Klasycznym przykadem powyszego jest transakcja bankowa. Warto rozway nastpujce dwie
instrukcje SQL, ktre przeprowadzaj transfer kwoty transakcji  
  pomidzy
dwoma kontami bankowymi, identyfikowanymi jako      i    .

<,
/-,0/-,R<9,%/<#:.
%<,0<,,-9#8*

<,
/-,0/-,H<9,%/<#:.
%<,0<,,,-.,%#8*

Na potrzeby niniejszego przykadu przyjto, e pierwsza instrukcja   zostaa wykonana z powodzeniem, ale wykonanie drugiej instrukcji zakoczyo si niepowodzeniem
z powodu wystpienia pewnego bdu (przykadowo, uszkodzenie w bazie danych lub
w sieci). W takiej sytuacji dane s niespjne stan konta      zosta zmniejszony, ale stan konta     nie zosta zwikszony. Jest oczywiste, e nie jest
to podana sytuacja, zwaszcza dla waciciela konta     . Przed tak sekwencj
zdarze mona si zabezpieczy dziki poczeniu powyszych dwch instrukcji w jedn
transakcj. W ten sposb albo obydwie transakcje zakocz si powodzeniem, albo obydwie transakcje zakocz si niepowodzeniem. Taki sposb postpowania zabezpiecza
przed utrat spjnoci danych.
Transakcja rozpoczyna si od pierwszej instrukcji SQL, wydanej po poprzedniej transakcji,
lub pierwsz instrukcj SQL po nawizaniu poczenia z baz danych. Transakcja koczy
si instrukcj )  lub )
7.

Instrukcja COMMIT a instrukcja ROLLBACK


Po wydaniu instrukcji )  transakcja przeprowadzana w bazie danych zostanie zakoczona. Wystpi rwnie ponisze zdarzenia:

Rozdzia 4.

SQL w PL/SQL

wyniki pracy wykonane przez transakcj zostan trwale zachowane;

zmiany dokonane przez transakcj bd widoczne w innych sesjach;

wszystkie blokady ustawione przez transakcj zostan zwolnione.

117

Poniej przedstawiono skadni instrukcji ) :


 L2 M

Opcjonalne sowo kluczowe )7 udostpniono w celu zwikszenia zgodnoci ze standardem SQL. Dopki transakcja nie zostanie potwierdzona za pomoc instrukcji ) ,
zmiany dokonane przez t transakcj s widoczne tylko w sesji, w ktrej dana transakcja
jest wykonywana. Tak sytuacj pokazano na rysunku 4.2. Najpierw w sesji A jest wydawana instrukcja  . W sesji B jest wykonywane zapytanie na tabeli 
, jednak
w sesji B nie jest widoczne wykonanie instrukcji   przeprowadzanej w sesji A, poniewa nie zostao one potwierdzone. Nastpnie w sesji A nastpuje wydanie instrukcji
potwierdzenia ) , a druga instrukcja  w sesji B pokae nowo wstawiony wiersz.
Rysunek 4.2.
Dwie sesje

Po wydaniu instrukcji )


7 transakcja przeprowadzana w bazie danych zostaje zakoczona oraz zachodz nastpujce zdarzenia:


wszystkie wyniki pracy wykonanej przez transakcj zostaj wycofane, jak gdyby
transakcja nie bya przeprowadzana;

wszystkie blokady ustawiane przez transakcj zostaj zwolnione.

Poniej przedstawiono skadni instrukcji )


7:
  L2 M

Podobnie jak w instrukcji ) , opcjonalne sowo kluczowe )7 jest dostpne dla zwikszenia zgodnoci ze standardem SQL. Niejawna instrukcja )
7 jest czsto wykonywana w razie wykrycia w programie bdu, ktry uniemoliwia dalsz prac. W razie nagego
zakoczenia sesji (na przykad w razie zerwania poczenia z baz danych) bez zakoczenia

118

Oracle8. Programowanie w jzyku PL/SQL

przeprowadzanej transakcji za pomoc instrukcji )  lub )


7, transakcja jest
automatycznie wycofywana z bazy danych.
Program SQL*Plus automatycznie wydaje instrukcj   przy zakaczaniu pracy
programu. Take uaktywnienie opcji    powoduje wydawanie instrukcji  
po przeprowadzeniu kadej instrukcji SQL. Jednak nie ma to wpywu na sposb zachowania instrukcji SQL zawartych wewntrz bloku PL/SQL, poniewa program SQL*Plus
nie ma kontroli nad tymi instrukcjami przed zakoczeniem dziaania bloku PL/SQL.

Punkty zachowania
Z poprzedniego podrozdziau wynika, e wydanie instrukcji )
7 powoduje wycofanie
caej transakcji. Warto jednak wiedzie, e po zastosowaniu instrukcji 1) tylko
cz transakcji wymaga wycofania. Poniej przedstawiono skadni instrukcji 1):
 
*

gdzie "$ " jest nazw punktu zachowania. Nazwy punktw zachowania podlegaj tym
samym zasadom skadniowym, co identyfikatory SQL (patrz rozdzia 2.). Naley zwrci
uwag, e punkty zachowania nie s deklarowane w sekcji deklaracji, poniewa dla danej
transakcji maj one znaczenie globalne i wykonywanie transakcji moe by kontynuowane
a do zakoczenia bloku. Zatem jeli zdefiniowano punkt zachowania, wykonywanie programu moe by cofnite do danego punktu zachowania. W tym celu wydaje si polecenie
o nastpujcej skadni:
  L2 M  
*

Po wydaniu polecenia )


7) 1) zachodz nastpujce zdarzenia:


kade dziaanie wykonane od punktu zachowania jest wycofywane. Jednak sam


punkt wycofania pozostaje aktywny. W razie potrzeby punkt zachowania moe
by wykorzystany do ponownego wycofania czci transakcji;

blokady i zasoby nabyte dziki instrukcjom SQL od punktu zachowania zostaj


zwolnione;

transakcja nie ulega zakoczeniu, poniewa wykonywanie instrukcji SQL


w dalszym cigu jest zawieszone.

Warto rozway nastpujcy fragment bloku PL/SQL:



 #$%#,)  +2/9:-+)*
 
 *
 #$%#,)  +2/9-9+)*
 
*
 #$%#,)  +2/9%78+)*
 
*
56 :./% <#:%< :#65
 *
 *

Jeeli do instrukcji brakujcych zostanie wprowadzona instrukcja:


   *

Rozdzia 4.

SQL w PL/SQL

119

wtedy trzecia instrukcja   oraz punkt zachowania C zostan wycofane. Jednak dwie
pierwsze instrukcje   bd przetwarzane. Z drugiej strony, jeeli do instrukcji brakujcych zostanie wprowadzona instrukcja:
    *

wtedy druga i trzecia instrukcja   zostanie wycofana i do przetwarzania pozostanie


tylko pierwsza instrukcja  .
Instrukcja 1) jest czsto uywana przed rozpoczciem skomplikowanej sekcji transakcji. Jeeli cz transakcji nie powiedzie si, mona j wycofa, a nastpnie kontynuowa
jej wczeniejsz cz.

Transakcje a bloki
Naley zwrci uwag na pewne rnice midzy transakcjami a blokami PL/SQL. Rozpoczcie wykonywania bloku nie oznacza rozpoczcia wykonywania transakcji. Podobnie
rozpoczcie wykonywania transakcji nie musi wiza si z rozpoczciem wykonywania
bloku. Przykadowo, warto rozway sytuacj, w ktrej z wiersza polece programu
SQL*Plus wydano nastpujce instrukcje:
Dostpne na pycie CD w skrypcie 1trans.sql
 #///
-%"#, %/"-/#%..,"P/ -/"
# %%/ -/" #%-./"%,,.-)
  ++"'('"+, %#.#'('+"O("'("?"GGGGS)*


%,,/
%,,.-0%,,.->'(((*
  2 *
 *

Z powyszego fragmentu kodu wynika, ze wydano instrukcj  , a nastpnie anonimowy blok PL/SQL. W bloku tym znajduje si instrukcja   i nastpnie instrukcja
)
7. Instrukcja )
7 wycofuje nie tylko instrukcj  , ale rwnie wczeniejsz instrukcj  . Zarwno instrukcja  , jak i blok s czci tej samej sesji
bazy danych, a w ten sposb take tej samej transakcji.
W podobny sposb jeden blok moe zawiera w sobie wiele transakcji. Przykadowo:
Dostpne na pycie CD w skrypcie 1block.sql
 
! %.,/ *

>>28<,:,-'-,O(("9/9.:#9%,/#.-,.
>>328<, :./% <#: ,<7-8#$O(9.%/7#$3
F !,,, %'33O((

  #,)  !,,, %)*


! %.,/B0! %.,/H'*

120

Oracle8. Programowanie w jzyku PL/SQL


F! %.,/0O(&
 *
! %.,/B0(*
 F*
 
*
 *

Powyszy blok powoduje wstawianie liczb o wartociach od 1 do 500 do tabeli 


i potwierdza wstawienie tych liczb po kadych 50 wierszach. Zatem podczas wykonania
jednego bloku zostanie przeprowadzonych 10 transakcji.

Podsumowanie
W niniejszym rozdziale oglnie omwiono zagadnienia dotyczce instrukcji SQL, DML
oraz instrukcji sterowania transakcjami, dozwolonymi w szczeglnoci w jzyku PL/SQL.
Podano rwnie informacje zwizane z uprawnieniami i rolami, a take przedstawiono
sposb zabezpieczania danych przed utrat spjnoci za pomoc mechanizmu transakcji.
W nastpnym rozdziale zostan opisane wbudowane funkcje SQL. W rozdziale 6. zostan
omwione kursory, ktre s stosowane dla zapyta wielowierszowych. W celu prawidowego zrozumienia prezentowanych tam zagadnie naley przeanalizowa koncepcje
przedstawione w niniejszym oraz w kolejnym rozdziale.

You might also like