Wykorzystanie wbudowanego w system Oracle języka PL/SQL w znaczący sposób powiększa potencjał programisty systemów bazodanowych. PL/SQL łączy w sobie duże możliwości i elastyczność języka czwartej generacji (4GL) SQL z konstrukcjami proceduralnymi języka trzeciej generacji (3GL). Programy napisane w tym języku umożliwiają obsługę danych zarówno w samym systemie Oracle, jak i w zewnętrznych aplikacjach.
Książka "Oracle8. Programowanie w języku PL/SQL" to wyczerpujące omówienie języka PL/SQL. To doskonała pozycja ułatwiająca naukę tego języka, świetnie też sprawdza się jako podręczne kompendium wiedzy o PL/SQL, pomocne w codziennej pracy. Liczne przykłady uzupełniają informacje zawarte w książce pokazując sprawdzone metody rozwiązywania problemów, napotykanych przez programistów.
W książce omówiono między innymi:
* Podstawy języka PL/SQL: struktura programu, zmienne, typy, wyrażenia i operatory oraz instrukcje sterujące
* Korzystanie z rekordów i tabel
* Korzystanie z SQL z poziomu PL/SQL, funkcje SQL dostępne w PL/SQL
* Tworzenie i używanie kursorów
* Bloki w PL/SQL: podprogramy (procedury i funkcje), pakiety i wyzwalacze
* Metody obsługi błędów w PL/SQL
* Obiekty w PL/SQL, kolekcje
* Testowanie i wykrywanie błędów
* Zagadnienia zaawansowane: dynamiczny PL/SQL, komunikacja między sesjami, kolejkowanie, obsługa zadań, procedury zewnętrzne
* Optymalizacja aplikacji PL/SQL i metody zapewnienia maksymalnej wydajności
Książka jest przeznaczona zarówno dla doświadczonych programistów, jak i tych, którzy jeszcze nie poznali innych języków trzeciej generacji. Przydatna, choć niekonieczna, jest ogólna znajomość systemu Oracle (łączenie się i korzystanie z bazy danych, podstawy języka SQL, itp.).
Poznaj język PL/SQL i wykorzystaj wszystkie możliwości systemu Oracle.
1. IDZ DO
PRZYK£ADOWY ROZDZIA£
SPIS TRE CI Oracle8.
Programowanie
KATALOG KSI¥¯EK w jêzyku PL/SQL
KATALOG ONLINE Autor: Scott Urman
T³umaczenie: Tomasz Pêdziwiatr, Grzegorz Stawikowski,
ZAMÓW DRUKOWANY KATALOG Cezary Welsyng
ISBN: 83-7197-533-3
Tytu³ orygina³u: Oracle8 PL/SQL Programming
TWÓJ KOSZYK Format: B5, stron: 762
DODAJ DO KOSZYKA Wykorzystanie wbudowanego w system Oracle jêzyka PL/SQL w znacz¹cy sposób
powiêksza potencja³ programisty systemów bazodanowych. PL/SQL ³¹czy w sobie du¿e
mo¿liwo ci i elastyczno æ jêzyka czwartej generacji (4GL) SQL z konstrukcjami
CENNIK I INFORMACJE proceduralnymi jêzyka trzeciej generacji (3GL). Programy napisane w tym jêzyku
umo¿liwiaj¹ obs³ugê danych zarówno w samym systemie Oracle, jak i w zewnêtrznych
aplikacjach.
ZAMÓW INFORMACJE
O NOWO CIACH Ksi¹¿ka „Oracle8. Programowanie w jêzyku PL/SQL” to wyczerpuj¹ce omówienie jêzyka
PL/SQL. To doskona³a pozycja u³atwiaj¹ca naukê tego jêzyka, wietnie te¿ sprawdza
ZAMÓW CENNIK siê jako podrêczne kompendium wiedzy o PL/SQL, pomocne w codziennej pracy.
Liczne przyk³ady uzupe³niaj¹ informacje zawarte w ksi¹¿ce pokazuj¹c sprawdzone
metody rozwi¹zywania problemów, napotykanych przez programistów.
CZYTELNIA W ksi¹¿ce omówiono miêdzy innymi:
• Podstawy jêzyka PL/SQL: struktura programu, zmienne, typy, wyra¿enia
FRAGMENTY KSI¥¯EK ONLINE
i operatory oraz instrukcje steruj¹ce
• Korzystanie z rekordów i tabel
• Korzystanie z SQL z poziomu PL/SQL, funkcje SQL dostêpne w PL/SQL
• Tworzenie i u¿ywanie kursorów
• Bloki w PL/SQL: podprogramy (procedury i funkcje), pakiety i wyzwalacze
• Metody obs³ugi b³êdów w PL/SQL
• Obiekty w PL/SQL, kolekcje
• Testowanie i wykrywanie b³êdów
• Zagadnienia zaawansowane: dynamiczny PL/SQL, komunikacja miêdzy sesjami,
kolejkowanie, obs³uga zadañ, procedury zewnêtrzne
• Optymalizacja aplikacji PL/SQL i metody zapewnienia maksymalnej wydajno ci
Wydawnictwo Helion Ksi¹¿ka jest przeznaczona zarówno dla do wiadczonych programistów, jak i tych,
ul. Chopina 6 którzy jeszcze nie poznali innych jêzyków trzeciej generacji. Przydatna, choæ
44-100 Gliwice niekonieczna, jest ogólna znajomo æ systemu Oracle (³¹czenie siê i korzystanie z bazy
tel. (32)230-98-63 danych, podstawy jêzyka SQL, itp.).
e-mail: helion@helion.pl
2. Spis treści
Wstęp ...................................................................................................17
Rozdział 1. Wprowadzenie do PL/SQL......................................................................23
Dlaczego język PL/SQL?..........................................................................................................23
Model klient-serwer............................................................................................................25
Normy .................................................................................................................................26
Właściwości języka PL/SQL ....................................................................................................26
Struktura bloku ...................................................................................................................26
Zmienne i typy danych .......................................................................................................27
Konstrukcje pętlowe ...........................................................................................................28
Konwencje stosowane w niniejszej ksią ce..............................................................................30
Wersje języka PL/SQL oraz bazy danych Oracle...............................................................30
Dokumentacja Oracle .........................................................................................................31
Kod dostępny na płycie CD................................................................................................32
Przykładowe tabele ...................................................................................................................32
Podsumowanie ..........................................................................................................................38
Rozdział 2. Podstawy języka PL/SQL .......................................................................39
Blok PL/SQL.............................................................................................................................39
Podstawowa struktura bloku...............................................................................................42
Jednostki leksykalne .................................................................................................................44
Identyfikatory .....................................................................................................................44
Ograniczniki .......................................................................................................................46
Literały................................................................................................................................48
Komentarze.........................................................................................................................49
Deklaracje zmiennych...............................................................................................................51
Składnia deklaracji..............................................................................................................51
Inicjowanie zmiennych.......................................................................................................52
Typy danych w języku PL/SQL................................................................................................53
Typy skalarne......................................................................................................................53
Typy zło one ......................................................................................................................60
Typy odwołania ..................................................................................................................60
Typy LOB...........................................................................................................................60
Wykorzystanie atrybutu %Type .........................................................................................61
Podtypy definiowane przez u ytkownika...........................................................................62
Konwersja pomiędzy typami danych..................................................................................62
Zakres i widoczność zmiennej............................................................................................64
Wyra enia i operatory...............................................................................................................65
Przypisanie..........................................................................................................................66
Wyra enia ...........................................................................................................................67
3. 6 Oracle8. Programowanie w języku PL/SQL
Struktury sterowania PL/SQL...................................................................................................69
Instrukcja IF-THEN-ELSE.................................................................................................70
Pętle ....................................................................................................................................73
Instrukcje GOTO oraz etykiety ..........................................................................................77
Dyrektywy pragma .............................................................................................................80
Styl programowania w języku PL/SQL ....................................................................................80
Wprowadzanie komentarzy ................................................................................................81
Nazywanie zmiennych........................................................................................................82
Stosowanie du ych liter......................................................................................................82
Odstępy w kodzie programu...............................................................................................82
Ogólne uwagi dotyczące stylu programowania..................................................................83
Podsumowanie ..........................................................................................................................83
Rozdział 3. Rekordy i tabele ....................................................................................85
Rekordy w języku 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 języku PL/SQL..............................................................98
Stosowanie instrukcji DML w języku PL/SQL ........................................................................99
Instrukcja SELECT...........................................................................................................101
Instrukcja INSERT ...........................................................................................................102
Instrukcja UPDATE..........................................................................................................104
Instrukcja DELETE ..........................................................................................................104
Klauzula WHERE.............................................................................................................105
Odwołania do tabel ...........................................................................................................108
Powiązania 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
Wstęp ......................................................................................................................................121
Funkcje znakowe zwracające wartości znakowe ....................................................................122
CHR ..................................................................................................................................122
CONCAT..........................................................................................................................122
4. Spis treści 7
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 zwracające wartości 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 związane z datą .........................................................................................................146
ADD_MONTHS...............................................................................................................146
LAST_DAY......................................................................................................................147
MONTHS_BETWEEN ....................................................................................................147
NEW_TIME .....................................................................................................................148
NEXT_DAY .....................................................................................................................149
ROUND ............................................................................................................................149
SYSDATE ........................................................................................................................150
TRUNC.............................................................................................................................151
5. 8 Oracle8. Programowanie w języku PL/SQL
Funkcje dokonujące 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 działaniu. Drukowanie liczb w postaci tekstowej.................................................174
Podsumowanie ........................................................................................................................180
Rozdział 6. Kursory ...............................................................................................181
Czym jest kursor?....................................................................................................................181
Przetwarzanie kursorów jawnych .....................................................................................182
Przetwarzanie kursorów niejawnych ................................................................................189
Pętle pobierania danych kursora .............................................................................................191
Pętle proste........................................................................................................................191
Pętle WHILE ....................................................................................................................193
Pętle FOR kursora.............................................................................................................194
Wyjątek NO_DATA_FOUND kontra atrybut %NOTFOUND .......................................195
Kursory z klauzulą FOR UPDATE instrukcji SELECT...................................................196
Zmienne kursora .....................................................................................................................199
Deklaracja zmiennej kursora ............................................................................................200
Przydzielenie obszaru pamięci dla zmiennych kursora ....................................................201
Otwieranie zmiennej kursora dla zapytania......................................................................202
6. Spis treści 9
Zamykanie zmiennych kursora.........................................................................................203
Pierwszy przykład zmiennej kursora ................................................................................203
Drugi przykład zmiennej kursora .....................................................................................205
Ograniczenia u ycia zmiennych kursora ..........................................................................206
Podsumowanie ........................................................................................................................207
Rozdział 7. Podprogramy: procedury i funkcje ........................................................209
Tworzenie procedur i funkcji..................................................................................................209
Tworzenie procedury ........................................................................................................210
Tworzenie funkcji.............................................................................................................221
Wyjątki wywoływane wewnątrz podprogramów .............................................................224
Usuwanie procedur i funkcji.............................................................................................226
Poło enie podprogramów .......................................................................................................226
Składowane podprogramy oraz słownik danych ..............................................................226
Podprogramy lokalne........................................................................................................228
Zale ności dotyczące podprogramów.....................................................................................231
Określanie zale ności .......................................................................................................233
Uprawnienia i podprogramy składowane ...............................................................................236
Uprawnienie EXECUTE ..................................................................................................236
Składowane podprogramy i role.......................................................................................237
Podsumowanie ........................................................................................................................239
Rozdział 8. Pakiety ...............................................................................................241
Pakiety.....................................................................................................................................241
Specyfikacja pakietu.........................................................................................................241
Ciało pakietu.....................................................................................................................243
Pakiety i zakres .................................................................................................................245
Przecią enie podprogramów pakietowych .......................................................................246
Inicjalizacja pakietu ..........................................................................................................247
Pakiety i zale ności...........................................................................................................249
Stosowanie składowanych funkcji w instrukcjach SQL .........................................................251
Poziomy czystości ............................................................................................................252
Parametry domyślne .........................................................................................................256
PL/SQL w działaniu — Eksporter schematów PL/SQL.........................................................256
Podsumowanie ........................................................................................................................264
Rozdział 9. Wyzwalacze.........................................................................................265
Tworzenie wyzwalaczy...........................................................................................................265
Komponenty wyzwalacza.................................................................................................267
Wyzwalacze i słownik danych..........................................................................................270
Kolejność uruchamiania wyzwalaczy...............................................................................272
Stosowanie wartości :old oraz :new w wyzwalaczach na poziomie wiersza ...................273
Korzystanie z predykatów wyzwalacza: INSERTING, UPDATING oraz DELETING.....276
Tabele mutujące ......................................................................................................................278
Przykład tabeli mutującej .................................................................................................280
Rozwiązanie problemu błędu tabeli mutującej.................................................................281
PL/SQL w działaniu — wdra anie techniki kaskadowego uaktualniania ..............................283
Program narzędziowy kaskadowego uaktualniania..........................................................285
Działanie pakietu kaskadowego uaktualniania.................................................................288
Podsumowanie ........................................................................................................................292
Rozdział 10. Obsługa błędów ...................................................................................293
Zdefiniowanie wyjątku ...........................................................................................................293
Deklarowanie wyjątków ...................................................................................................295
Wywoływanie wyjątków ..................................................................................................298
Obsługa wyjątków ............................................................................................................299
7. 10 Oracle8. Programowanie w języku PL/SQL
Dyrektywa pragma EXCEPTION_INIT ..........................................................................305
Stosowanie funkcji RAISE_APPLICATION_ERROR ...................................................305
Propagacja wyjątków ..............................................................................................................308
Wyjątki wywołane w sekcji wykonania ...........................................................................308
Wyjątki wywołane w sekcji deklaracji .............................................................................310
Wyjątki wywołane w sekcji wyjątków .............................................................................312
Wytyczne wyjątków................................................................................................................314
Zakres wyjątków...............................................................................................................314
Unikanie nieobsługiwanych wyjątków.............................................................................315
Maskowanie lokalizacji błędu ..........................................................................................315
PL/SQL w działaniu — ogólny program obsługi błędów.......................................................316
Podsumowanie ........................................................................................................................324
Rozdział 11. Obiekty ...............................................................................................325
Wprowadzenie ........................................................................................................................325
Podstawy programowania obiektowego ...........................................................................325
Obiektowo-relacyjne bazy danych ...................................................................................327
Typy obiektów ........................................................................................................................328
Definiowanie typów obiektowych....................................................................................328
Deklarowanie i inicjalizacja obiektów..............................................................................330
Metody..............................................................................................................................332
Zmiana i usuwanie typów.................................................................................................338
Zale ności między obiektami ...........................................................................................340
Obiekty w bazie danych..........................................................................................................340
Poło enie obiektów...........................................................................................................341
Obiekty w instrukcjach DML ...........................................................................................344
Metody MAP i ORDER....................................................................................................349
Podsumowanie ........................................................................................................................351
Rozdział 12. Kolekcje..............................................................................................353
Tabele zagnie d one ...............................................................................................................353
Deklarowanie tabeli zagnie d onej ..................................................................................353
Zagnie d one tabele w bazie danych ...............................................................................356
Tabele zagnie d one 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 zagnie d one ....................................................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
Ró ne mechanizmy języka 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
8. Spis treści 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 wejścia i wyjścia ......................................................................................................402
Sprawdzanie syntaktyki i semantyki ................................................................................402
Wytyczne dla programu wrapper......................................................................................403
Podsumowanie ........................................................................................................................403
Rozdział 14. Testowanie i wykrywanie błędów..........................................................405
Diagnostyka problemu ............................................................................................................405
Wytyczne wykrywania i usuwania błędów ......................................................................405
Pakiet Debug słu ący do wykrywania i usuwania błędów...............................................407
Wstawianie do tabeli testowania.............................................................................................407
Problem 1..........................................................................................................................407
Pakiet DBMS_OUTPUT ........................................................................................................415
Składniki pakietu DBMS_OUTPUT ................................................................................416
Problem 2..........................................................................................................................420
Programy PL/SQL słu ące do wykrywania i usuwania błędów .............................................426
Program Procedure Builder.....................................................................................................426
Problem 3..........................................................................................................................426
Program SQL-Station..............................................................................................................432
Problem 4..........................................................................................................................433
Porównanie programów Procedure Builder i SQL-Station.....................................................437
Metodyka programowania ......................................................................................................438
Programowanie modularne...............................................................................................438
Projektowanie zstępujące..................................................................................................439
Abstrakcja danych ............................................................................................................440
Podsumowanie ........................................................................................................................440
Rozdział 15. Dynamiczny PL/SQL ............................................................................441
Wprowadzenie ........................................................................................................................441
Instrukcje SQL statyczne a instrukcje dynamiczne ..........................................................441
Ogólny opis pakietu DBMS_SQL ....................................................................................442
Wykonywanie instrukcji DML oraz DDL nie będących zapytaniami....................................446
Otwieranie kursora............................................................................................................447
Parsowanie instrukcji........................................................................................................447
Wiązanie ka dej zmiennej wejściowej .............................................................................448
Wykonanie instrukcji........................................................................................................450
Zamykanie kursora ...........................................................................................................450
Przykład ............................................................................................................................451
Wykonywanie instrukcji DDL..........................................................................................452
Wykonywanie zapytań......................................................................................................453
Parsowanie instrukcji........................................................................................................454
Zdefiniowanie zmiennych wyjściowych ..........................................................................454
Pobieranie wierszy............................................................................................................456
Zwracanie wyników do zmiennych PL/SQL....................................................................456
Przykład ............................................................................................................................458
Wykonywanie bloku PL/SQL.................................................................................................461
Parsowanie instrukcji........................................................................................................461
Pobranie wartości ka dej zmiennej wyjściowej ...............................................................462
9. 12 Oracle8. Programowanie w języku PL/SQL
Przykład ............................................................................................................................463
Zastosowanie parametru out_value_size ..........................................................................465
PL/SQL w działaniu — wykonywanie dowolnych procedur składowanych .........................466
Udoskonalenia pakietu DBMS_SQL w wydaniu PL/SQL 8.0 ...............................................472
Parsowanie du ych ciągów znaków instrukcji SQL.........................................................473
Przetwarzanie tablicowe za pomocą pakietu DBMS_SQL ..............................................474
Opisywanie listy instrukcji SELECT................................................................................478
Ró ne procedury .....................................................................................................................481
Pobieranie danych typu LONG ........................................................................................481
Dodatkowe funkcje obsługi błędów .................................................................................482
PL/SQL w działaniu — zapisywanie wartości typu LONG do pliku .....................................484
Uprawnienia a pakiet DBMS_SQL.........................................................................................486
Uprawnienia wymagane dla pakietu DBMS_SQL...........................................................486
Role a pakiet DBMS_SQL ...............................................................................................487
Porównanie pakietu DBMS_SQL z innymi metodami przetwarzania dynamicznego ...........487
Opisywanie listy instrukcji SELECT................................................................................488
Przetwarzanie tablicowe ...................................................................................................488
Operacje dzielenia na części danych typu LONG ............................................................488
Ró nice interfejsów ..........................................................................................................489
Wskazówki i techniki..............................................................................................................489
Ponowne zastosowanie kursorów .....................................................................................489
Zezwolenia........................................................................................................................489
Zawieszenia programu związane z operacjami DDL .......................................................490
Podsumowanie ........................................................................................................................490
Rozdział 16. Komunikacja między sesjami................................................................491
Pakiet DBMS_PIPE ................................................................................................................491
Wysyłanie komunikatu .....................................................................................................495
Odbieranie komunikatu ....................................................................................................496
Tworzenie potoków i zarządzanie nimi............................................................................498
Uprawnienia i bezpieczeństwo .........................................................................................500
Ustanawianie protokołu komunikacji ...............................................................................501
Przykład ............................................................................................................................503
Pakiet DBMS_ALERT ...........................................................................................................509
Wysyłanie ostrze enia ......................................................................................................509
Odbieranie ostrze enia......................................................................................................509
Inne procedury ..................................................................................................................511
Ostrze enia i słownik danych ...........................................................................................512
Porównanie pakietów 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 słownik danych ..................................................................................................533
Przykłady ................................................................................................................................536
Tworzenie kolejek i tabel kolejek.....................................................................................536
Proste wstawianie i odbieranie komunikatów ..................................................................538
10. Spis treści 13
„Czyszczenie” kolejek ......................................................................................................539
Wstawianie i odbieranie komunikatów z uwzględnieniem priorytetów...........................540
Wstawianie i odbieranie komunikatów z wykorzystaniem identyfikatora
korelacji lub identyfikatora komunikatu ....................................................................542
Przeglądanie kolejek.........................................................................................................544
Stosowanie kolejek wyjątków ..........................................................................................546
Usuwanie kolejek..............................................................................................................548
Podsumowanie ........................................................................................................................549
Rozdział 18. Obsługa zadań i plików 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
Przeglądanie zadań w słowniku danych ...........................................................................558
Warunki wykonywania zadań...........................................................................................558
Obsługa plików .......................................................................................................................558
Zabezpieczenia .................................................................................................................559
Wyjątki w pakiecie UTL_FILE ........................................................................................560
Otwieranie i zamykanie plików ........................................................................................561
Zapis do pliku ...................................................................................................................563
Odczyt z pliku...................................................................................................................566
Przykłady ..........................................................................................................................566
Podsumowanie ........................................................................................................................573
Rozdział 19. Serwer WWW Oracle............................................................................575
Środowisko serwera WWW Oracle ........................................................................................575
Agent PL/SQL ..................................................................................................................577
Określanie wartości parametrów w procedurach..............................................................578
Narzędzia 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 zewnętrzne ..........................................................................609
Czym jest procedura zewnętrzna?...........................................................................................609
Wywoływanie procedury zewnętrznej .............................................................................610
Odwzorowywanie parametrów.........................................................................................617
Funkcje i procedury zewnętrzne w pakietach...................................................................624
Połączenie zwrotne z bazą danych..........................................................................................626
Podprogramy usługowe ....................................................................................................626
Wykonywanie instrukcji SQL w procedurze zewnętrznej ...............................................629
Wskazówki, wytyczne i ograniczenia.....................................................................................630
Wykrywanie błędów w procedurach zewnętrznych .........................................................630
Wytyczne ..........................................................................................................................632
Ograniczenia .....................................................................................................................633
Podsumowanie ........................................................................................................................634
11. 14 Oracle8. Programowanie w języku PL/SQL
Rozdział 21. Duże obiekty .......................................................................................635
Czym są du e obiekty? ...........................................................................................................635
Składowanie du ych obiektów .........................................................................................636
Du e obiekty w instrukcjach DML...................................................................................637
Obiekty typu BFILE................................................................................................................639
Katalogi.............................................................................................................................639
Otwieranie i zamykanie plików BFILE............................................................................641
Pliki BFILE w instrukcjach DML ....................................................................................641
Pakiet DBMS_LOB ................................................................................................................643
Podprogramy pakietu DBMS_LOB .................................................................................643
Wyjątki zgłaszane przez podprogramy z pakietu DBMS_LOB.......................................658
Porównanie interfejsów DBMS_LOB i OCI....................................................................658
PL/SQL w działaniu: Kopiowanie danych typu LONG do postaci LOB ...............................659
Podsumowanie ........................................................................................................................661
Rozdział 22. Wydajność i strojenie ..........................................................................663
Obszar wspólny.......................................................................................................................663
Struktura instancji bazy Oracle.........................................................................................663
Jak funkcjonuje obszar wspólny? .....................................................................................667
Rozmiar obszaru wspólnego.............................................................................................669
Unieruchamianie obiektów...............................................................................................670
Strojenie instrukcji SQL..........................................................................................................672
Generowanie planu wykonania.........................................................................................672
Wykorzystywanie planu ...................................................................................................678
Sieć..........................................................................................................................................679
Wykorzystywanie środowiska PL/SQL po stronie klienta...............................................679
Unikanie powtórnej analizy składni .................................................................................679
Przetwarzanie tablicowe ...................................................................................................680
Podsumowanie ........................................................................................................................680
Dodatek A Słowa zastrzeżone w PL/SQL ...............................................................681
Dodatek B Pakiety dostępne w PL/SQL ................................................................683
Tworzenie pakietów................................................................................................................683
Opis pakietów .........................................................................................................................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
12. Spis treści 15
Dodatek C Słownik wybranych elementów PL/SQL ................................................701
Dodatek D Słownik danych ...................................................................................721
Czym jest słownik danych?.....................................................................................................721
Standardy nazewnictwa ....................................................................................................721
Uprawnienia......................................................................................................................722
Perspektywy DBA, All i User w słowniku danych.................................................................722
Zale ności .........................................................................................................................723
Kolekcje............................................................................................................................724
Błędy kompilacji...............................................................................................................724
Katalogi.............................................................................................................................725
Zadania .............................................................................................................................725
Biblioteki ..........................................................................................................................726
Du e obiekty (LOB) .........................................................................................................726
Metody obiektów ..............................................................................................................727
Parametry metod obiektów ...............................................................................................727
Wartości zwracane przez metody obiektów .....................................................................728
Typy obiektowe ................................................................................................................729
Odwołania do obiektów....................................................................................................729
Atrybuty typów obiektowych ...........................................................................................729
Obiekty w schemacie........................................................................................................730
Kod źródłowy ...................................................................................................................730
Tabele ...............................................................................................................................731
Kolumny tabeli .................................................................................................................732
Wyzwalacze......................................................................................................................733
Kolumny wyzwalaczy ......................................................................................................734
Perspektywy......................................................................................................................734
Inne perspektywy słownika danych ........................................................................................735
dbms_alert_info ................................................................................................................735
dict_columns.....................................................................................................................735
Skorowidz ...........................................................................................737
13. Rozdział 4.
SQL w PL/SQL
Strukturalny język zapytań (SQL) określa sposób manipulowania danymi w bazie danych
Oracle. Konstrukcje proceduralne, które przedstawiono w rozdziale 2. i 3., stają się znacznie
bardziej u yteczne w połączeniu z mocą przetwarzania języka SQL, poniewa wtedy
konstrukcje te pozwalają programom PL/SQL na manipulowanie danymi w bazie danych
Oracle. W niniejszym rozdziale zostaną omówione instrukcje SQL, które są dozwolone
w języku PL/SQL i instrukcje sterowania transakcjami, które gwarantują utrzymanie
spójności danych. W rozdziale 5. Czytelnik zapozna się z wbudowanymi funkcjami SQL.
Instrukcje SQL
Instrukcje SQL mo na podzielić na sześć kategorii, które wymieniono poni ej. W tabeli
4.1 znajduje się kilka przykładowych instrukcji. Szczegółowy opis wszystkich instrukcji
SQL znajduje się w publikacji Server SQL Reference.
Tabela 4.1. Kategorie instrukcji SQL
Kategoria Przykładowe instrukcje SQL
Instrukcje języka manipulowania danymi DML 5'.'%6, +05'46, 72', &'.'6', 5'6 64#05#%6+10,
(Data Manipulation Language) ':2.#+0 2.#0
Instrukcje języka definicji danych DDL &412, %4'#6', #.6'4, )4#06, 4'81-'
(Data Definition Language)
Instrukcje sterowania transakcją %1//+6, 41..$#%-, 5#8'21+06
Instrukcje sterowania sesji #.6'4 5'55+10, 5'6 41.'
Instrukcje sterowania systemu #.6'4 5;56'/
Wbudowane polecenia SQL %100'%6, &'%.#4' %74514, #..1%#6'1
instrukcje języka manipulowania danymi DML (Data Manipulation Language)
słu ą do zmieniania danych w tabelach lub danych zapytań w tabeli bazy danych,
ale nie umo liwiają zmiany struktury tabeli lub innych obiektów;
1
Wbudowane polecenie SQL #..1%#6' jest dostępne w wydaniu Oracle 7.2 i wy szym.
14. 98 Oracle8. Programowanie w języku PL/SQL
instrukcje języka definicji danych DDL (Data Definition Language) słu ą
do tworzenia, usuwania lub zmieniania struktury obiektu schematu. Polecenia,
które zmieniają uprawnienia do obiektów schematu, są równie instrukcjami DDL;
instrukcje sterowania transakcji gwarantują zachowanie spójności danych dzięki
zorganizowaniu instrukcji SQL w logiczne transakcje, których wykonywanie
jako jednostki kończy się powodzeniem lub niepowodzeniem;
instrukcje sterowania sesji słu ą do zmieniania ustawień dla pojedynczego
połączenia z bazą danych, np. do aktywacji śledzenia sesji SQL;
instrukcje sterowania systemu słu ą do zmieniania ustawień dla całej bazy danych,
np. do aktywowania lub dezaktywowania procesu archiwizacji;
wbudowane polecenia SQL są wykorzystywane w programach prekompilatora
Oracle.
Wykorzystanie instrukcji SQL w języku PL/SQL
Jedynymi instrukcjami SQL, które są dozwolone w programie PL/SQL, są instrukcje DML
oraz instrukcje sterowania transakcji. W szczególności instrukcje DDL są niedozwolone.
Tak e instrukcja ':2.#+0 2.#0, mimo e jest klasyfikowana jako instrukcja DML, jest
niedozwolona. Aby to wyjaśnić, konieczna jest znajomość zało eń projektowych przy-
jętych dla języka PL/SQL.
Ogólnie język programowania mo e wiązać zmienne na dwa sposoby: przez wiązanie
wczesne lub wiązanie późne. Wiązanie zmiennej jest procesem identyfikowania lokacji
pamięci skojarzonej z identyfikatorem programu. W języku PL/SQL wiązanie uwzględ-
nia równie sprawdzenie istnienia zezwolenia na uzyskanie dostępu do odwoływanego
obiektu schematu w bazie danych. W przypadku języka, w którym stosuje się wiązanie
wczesne, wiązanie zmiennej następuje podczas etapu kompilacji, natomiast w przypad-
ku języka, w którym stosuje się wiązanie późne, proces wiązania zmiennej jest odkładany a
do czasu uruchomienia programu. Uwzględnienie procesu wiązania wczesnego oznacza, e
etap kompilacji będzie trwać dłu ej (poniewa musi być wykonane wiązanie zmiennych),
ale sam program będzie wykonywany szybciej, poniewa wiązanie będzie ju zakończone.
Wiązanie późne skraca czas kompilacji, ale wydłu a czas wykonywania programu.
Język PL/SQL celowo zaprojektowano w taki sposób, aby zastosować wiązanie wczesne.
Decyzję tę podjęto w celu zapewnienia jak najszybszego wykonywania bloku, poniewa
wszystkie obiekty bazy danych są sprawdzane przez kompilator. Jest to sensowne rozwią-
zanie, poniewa bloki PL/SQL mogą być składowane w bazie danych za pomocą procedur,
funkcji, pakietów i wyzwalaczy. Obiekty te są składowane w skompilowanej formie,
a zatem w razie potrzeby mogą być bezpośrednio ładowane z bazy danych do pamięci
i uruchamiane. Więcej informacji na temat obiektów składowanych znajduje się w roz-
działach 7., 8. oraz 9. Konsekwencją podjęcia takiej decyzji projektowej jest zakaz stoso-
wania instrukcji DDL. Instrukcje DDL modyfikują obiekt bazy danych, w więc zachodzi
konieczność ponownego sprawdzania zezwoleń. Sprawdzanie zezwoleń wymagałoby po-
nownego wiązania identyfikatorów, a ten proces jest przeprowadzany podczas kompilacji.
W tym punkcie warto rozwa yć następujący, hipotetyczny blok PL/SQL:
15. Rozdział 4. SQL w PL/SQL 99
&'%.#4'
%4'#6' 6#$.' VGORAVCDNG
PWOAXCNWG 07/$'4
EJCTAXCNWG %*#4
+05'46 +061 VGORAVCDNG
PWOAXCNWG EJCTAXCNWG
8#.7'5
*GNNQ
'0
W celu kompilacji tego bloku identyfikator VGORAVCDNG wymaga dowiązania. Podczas tego
procesu następuje sprawdzenie faktu istnienia tabeli. Jednak tabela nie mo e istnieć przed
uruchomieniem bloku. Z powy szego wynika, e omawiany blok nie mo e zostać skom-
pilowany, a zatem nie ma sposobu na uruchomienie go.
Instrukcje sterowania transakcji są jedynymi instrukcjami SQL, które nie mają mo liwości
modyfikowania obiektów schematu lub uprawnień do obiektów schematu i w ten sposób
są jedynymi poprawnymi instrukcjami SQL, stosowanymi w języku PL/SQL.
Stosowanie instrukcji DDL
Istnieje alternatywne rozwiązanie problemu przedstawionego w poprzednim pod-
rozdziale. Od wydania PL/SQL 2.1 jest dostępny wbudowany pakiet $/5A53..
Jest to pakiet, który umo liwia dynamiczne tworzenie instrukcji SQL podczas 1 tworzona
a do czasu uruchomienia programu, a więc kompilator PL/SQL nie musi wiązać identyfi-
katorów w instrukcji, co pozwala na kompilowanie bloku. Pakiet $/5A53. jest szczegółowo
opisany w rozdziale 15. Przykładowo, do wykonania instrukcji %4'#6' 6#$.' z poprzed-
niego bloku mo na u yć pakietu $/5A53.. Jednak nawet wtedy kompilacja instrukcji
+05'46 nie powiedzie się, poniewa tabela nie istnieje ć przed uruchomieniem bloku.
Rozwiązaniem tego problemu jest zastosowanie pakietu $/5A53. równie do wykony-
wania instrukcji +05'46.
Stosowanie instrukcji DML
w języku PL/SQL
Dozwolonymi instrukcjami DML w języku PL/SQL są instrukcje: 5'.'%6, +05'46, 72#6'
oraz '.'6'. Instrukcje te działają w następujący sposób: instrukcja 5'.'%6 zwraca te
wiersze z tabeli bazy danych, które odpowiadają kryteriom podanym w jej klauzuli 9*'4',
instrukcja +05'46 dodaje wiersze do tabeli bazy danych, instrukcja 72#6' modyfikuje te
wiersze w tabeli bazy danych, które odpowiadają klauzuli 9*'4', natomiast instrukcja '.'6'
usuwa wiersze identyfikowane przez klauzulę 9*'4'. Poza klauzulą 9*'4' powy sze instruk-
cje mogą uwzględniać tak e inne klauzule. Klauzule te opisano w kolejnych podrozdziałach
niniejszego rozdziału.
Podczas wykonywania instrukcji SQL w programie SQL*Plus wyniki tego wykonania
są wyświetlane na ekranie. Przykładowy sposób takiego wyświetlania przedstawiono na
rysunku 4.1. W przypadku wykonywania instrukcji 72#6', +05'46 lub '.'6' SQL*Plus
zwraca liczbę przetwarzanych wierszy. W razie wykonywania instrukcji 5'.'%6 wiersze,
które odpowiadają zapytaniu, są wyświetlane na ekranie.
16. 100 Oracle8. Programowanie w języku PL/SQL
Rysunek 4.1.
Wyniki
wykonania
instrukcji SQL
w programie
SQL*Plus
Nale y zwrócić uwagę na sposób zastosowania instrukcji 72#6'. Wyniki wykonania tej
instrukcji pokazano na rysunku 4.1.
72#6' %.#55'5
5'6 PWOAETGFKVU
9*'4' FGRCTVOGPV *+5
#0 EQWTUG
Wszystkie wartości, które są wykorzystane w celu zmiany zawartości tabeli ENCUUGU, są
ustalone — są znane podczas tworzenia instrukcji. Język PL/SQL usuwa to ogranicze-
nie za pomocą zmiennych. Stosowanie zmiennych jest dozwolone wszędzie tam, gdzie
w instrukcji SQL jest dozwolone stosowanie wyra eń. Jeśli zmienne są u ywane w opi-
sywany sposób, są nazywane zmiennymi dowiązanymi. Przykładowo, w poprzedniej in-
strukcji 72#6' mo na zastąpić wartość ustaloną liczby zaliczeń (PWOAETGFKVU) zmienną
dowiązaną:
Dostępne na płycie CD w skrypcie bindvar.sql
'%.#4'
XA0WO%TGFKVU ENCUUGUPWOAETGFKVU 6;2'
$')+0
19. Rozdział 4. SQL w PL/SQL 101
Nie wszystkie elementy w instrukcji SQL mogą być zastępowane zmiennymi — zastępować
mo na tylko wyra enia. W szczególności muszą być znane nazwy tabel i kolumn. Jest
to wymagane ze względu na wiązanie wczesne — nazwy obiektów Oracle muszą być
znane w czasie kompilacji. Z definicji wartość zmiennej nie jest znana a do czasu uru-
chomienia programu. W celu przezwycię enia tego ograniczenia mo na równie wyko-
rzystywać pakiet $/5A53..
Instrukcja SELECT
Instrukcja SELECT pobiera dane z bazy danych do zmiennych PL/SQL. Poni ej przedsta-
wiono składnię instrukcji SELECT:
W poni szej tabeli opisano wszystkie elementy.
Tabela 4.2. Klauzule wyboru instrukcji SELECT
Klauzula wyboru Opis
GNGOGPVANKUV[AY[DQTW Kolumna (lub wyra enie) do wybrania. Ka dy element listy wyboru jest oddzielony
przecinkiem i mo e być opcjonalnie identyfikowany przez alias (zamiennik).
Cały zbiór elementów listy w instrukcji 5'.'%6 nazywa się listą wyboru.
Znak
20. w składni jest skrótem zastępującym cały wiersz. W ten sposób są zwracane
poszczególne pola w tabeli w kolejności, w jakiej zdefiniowano pola.
OKGPPC Zmienna PL/SQL, do której będzie przekazany element listy wyboru. Ka da zmienna
powinna być kompatybilna ze swoim skojarzonym elementem listy wyboru.
Dlatego elementy listy oraz zmienne wyjściowe powinny istnieć w tej samej liczbie.
TGMQTFA2.53. Mo e być stosowany zamiast listy zmiennych. Rekord powinien zawierać pola,
które odpowiadają elementom z listy wyboru, ale równie pozwalają na łatwiejszą
manipulację zwracanymi danymi. Rekordy łączą powiązane pola w jednej jednostce
składniowej. W ten sposób mo na manipulować tymi polami zarówno jako grupą,
jak równie indywidualnie. Zagadnienia dotyczące rekordów opisano w dalszej
części niniejszego rozdziału. Je eli listą wyboru jest znak
21. , wtedy ten rekord mo e
być zdefiniowany jako QFYQNCPKGAVCDGNK 4196;2'.
QFYQNCPKGAVCDGNK Identyfikuje tabelę, z której mają być pobrane dane. Mo e być synonimem lub tabelą
w odległej bazie danych, określonej przez powiązanie z bazą danych. Więcej informacji
na temat odwołań tabel znajduje się w dalszej części niniejszego rozdziału.
MNCWWNCAYJGTG Kryterium dla tego zapytania. Klauzula ta identyfikuje wiersz, który będzie zwrócony
przez zapytanie. Kryterium składa się z warunków logicznych (boole’owskich)
łączonych operatorami logicznymi. Zagadnienia związane z kryteriami wyboru opisano
bardziej szczegółowo w dalszej części niniejszego rozdziału.
22. 102 Oracle8. Programowanie w języku PL/SQL
Ogólnie więcej klauzul jest dostępnych dla instrukcji 5'.'%6. Przykładowo, zaliczają się
do nich klauzule 14'4' $; oraz )4172 $;. Szczegółowo omówiono je w rozdziale 6.
Więcej informacji na ich temat znajduje się w publikacji Server SQL Reference.
Instrukcja 5'.'%6 według podanej powy ej składni powinna zwracać najwy ej jeden wiersz.
Klauzula 9*'4' jest sprawdzana dla ka dego wiersza w tabeli. Je eli odpowiada ona więcej
ni jednemu wierszowi, PLSQL zwraca następujący komunikat o błędzie:
14# 5KPINGTQY SWGT[ TGVWTPU OQTG VJCP QPG TQY
CR[VCPKG Q LGFGP YKGTU YTCEC YKGEGL PK LGFGP YKGTU
W takim przypadku do pobrania ka dego wiersza osobno konieczne jest zastosowanie
kursora. Więcej informacji na ten temat znajduje się w rozdziale 6.
W poni szym przykładzie przedstawiono sposób zastosowania dwóch ró nych instrukcji
5'.'%6:
Dostępne na płycie CD w skrypcie select.sql
'%.#4'
XA5VWFGPV4GEQTF UVWFGPVU 4196;2'
XAGRCTVOGPV ENCUUGUFGRCTVOGPV 6;2'
XA%QWTUG ENCUUGUEQWTUG 6;2'
$')+0
2QDKGT LGFGP TGMQTF VCDGNK UVWFGPVU K CEJQYCL Y TGMQTFKG
XA5VWFGPV4GEQTF 0CNG[ YTQEKE WYCIG G MNCWWNC 9*'4'
QFRQYKCFC V[NMQ LGFPGOW YKGTUQYK VCDGNK 0CNG[ TQYPKG YTQEKE
WYCIG G CR[VCPKG YTCEC YU[UVMKG RQNC Y VCDGNK UVWFGPVU
RQPKGYC UVQUQYCP[ LGUV PCM
24. +061 XA5VWFGPV4GEQTF
(41/ UVWFGPVU
9*'4' KF
2QDKGT FYC RQNC VCDGNK ENCUUGU K CEJQYCL LG Y OKGPP[EJ
XAGRCTVOGPV QTC XA%QWTUG PQYW CVGO MNCWWNC 9*'4' QFRQYKCFC
V[NMQ LGFPGOW YKGTUQYK VCDGNK
5'.'%6 FGRCTVOGPV EQWTUG
+061 XAGRCTVOGPV XA%QWTUG
(41/ ENCUUGU
9*'4' TQQOAKF
'0
Instrukcja INSERT
Składnię instrukcji +05'46 przedstawiono poni ej. Nale y zwrócić uwagę, e bezpośrednio
w instrukcji nie występuje klauzula WHERE (chocia mo e ona występować w podza-
pytaniu).
Klauzula QFYQNCPKGAVCDGNK odwołuje się do tabeli Oracle, PCYCAMQNWOP[ odwołuje się
do kolumny w tej tabeli, a Y[TCGPKG jest wyra eniem SQL lub PL/SQL, co zdefiniowano
w poprzednim rozdziale. Odwołania do tabel omówiono bardziej szczegółowo w dalszej
25. Rozdział 4. SQL w PL/SQL 103
części niniejszego rozdziału. Je eli instrukcja +05'46 zawiera KPUVTWMELCAUGNGEV, wtedy
elementy listy instrukcji UGNGEV powinny odpowiadać kolumnom, do których mają być
wstawiane dane.
Prawidłowe zastosowanie kilku instrukcji +05'46 przedstawiono w poni szym przykładzie:
Dostępne na płycie CD w skrypcie insert.sql
'%.#4'
XA5VWFGPV+ UVWFGPVUKF 6;2'
$')+0
2QDKGT PQY[ KFGPV[HKMCVQT + UVWFGPVC
5'.'%6 UVWFGPVAUGSWGPEG0':68#.
+061 XA5VWFGPV+
(41/ FWCN
QFCL YKGTU FQ VCDGNK UVWFGPVU
+05'46 +061 UVWFGPVU
KF HKTUVAPCOG NCUVAPCOG
8#.7'5
XA5VWFGPV+ 6KOQVJ[ 6CNNGT
QFCL FTWIK YKGTU CNG W[L PWOGTW UGMYGPELK DGRQUTGFPKQ Y
KPUVTWMELK +05'46
+05'46 +061 UVWFGPVU
KF HKTUVAPCOG NCUVAPCOG
8#.7'5
UVWFGPVAUGSWGPEG0':68#. 2CVTKEM 2QNN
'0
W następnym przykładzie przedstawiono nieprawidłowy sposób wykonania polecenia
+05'46. Elementy listy instrukcji 5'.'%6 podzapytania nie odpowiadają kolumnom, które
mają być wstawiane. Taka instrukcja powoduje zwrócenie błędu Oracle ORA-913: too
many values.
+05'46 +061 TQQOU
5'.'%6
26. (41/ ENCUUGU
Kolejny przykład przedstawia prawidłowo wydaną instrukcję +05'46. Przez wstawienie
kopii ka dego wiersza następuje podwojenie wielkości tabeli ENCUUGU.
+05'46 +061 ENCUUGU
5'.'%6
27. (41/ ENCUUGU
Wersja Oracle8 z opcją obiektów dostarcza dodatkową klauzulę dla instrukcji +05'46 —
klauzuli 4'( +061. W razie zastosowania tej klauzuli z tabelami obiektów jest zwracane
odwołanie do wstawianego obiektu. Więcej informacji na ten temat znajduje się w roz-
dziale 11.
28. 104 Oracle8. Programowanie w języku PL/SQL
Instrukcja UPDATE
Poni ej przedstawiono składnię instrukcji 72#6':
Klauzula QFYQNCPKGAVCDGNK odwołuje się do modyfikowanej tabeli, PCYCAMQNWOP[ jest
nazwą kolumny, której wartość ma być zmieniona, a Y[TCGPKG jest wyra eniem SQL,
co zdefiniowano w rozdziale 2. Je eli instrukcja 72#6' zawiera KPUVTWMELCA5'.'%6,
elementy listy wyboru powinny odpowiadać kolumnom w klauzuli 5'6.
W poni szym przykładzie pokazano zastosowanie instrukcji 72#6':
Dostępne na płycie CD w skrypcie update.sql
'%.#4'
XA/CLQT UVWFGPVUOCLQT 6;2'
XA%TGFKV+PETGCUG 07/$'4
$')+0
6C KPUVTWMELC 72#6' FQFC FQ RQNC EWTTGPVAETGFKVU
FNC YU[UVMKEJ UVWFGPVQY MVQT[ UVWFKWLC *KUVQTKG
XA/CLQT *KUVQT[
72#6' UVWFGPVU
5'6 EWTTGPVAETGFKVU EWTTGPVAETGFKVU
XA%TGFKV+PETGCUG
9*'4' OCLQT XA/CLQT
'0
Instrukcja DELETE
Instrukcja '.'6' usuwa wiersze z tabeli bazy danych. Klauzula 9*'4' wskazuje, które
wiersze mają być usunięte. Poni ej podana jest składnia instrukcji '.'6':