Oracle8. Programowanie w języku PL/SQL

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    Favorites, Groups & Events

    Oracle8. Programowanie w języku PL/SQL - Presentation Transcript

    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', &'.'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 
    17. 2T[RKU YCTVQUE OKGPPGL XA0WO%TGFKVU
    18.  XA0WO%TGFKVU   72&#6' %.#55'5 5'6 PWOAETGFKVU  XA0WO%TGFKVU 9*'4' FGRCTVOGPV  *+5 #0& EQWTUG   '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' XA&GRCTVOGPV 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
    23.  9 VGP URQUQD NCFQYCP[ TGMQTF  LGUV FGHKPKQYCP[ LCMQ UVWFGPVU 4196;2' 5'.'%6
    24. +061 XA5VWFGPV4GEQTF (41/ UVWFGPVU 9*'4' KF    2QDKGT FYC RQNC VCDGNK ENCUUGU K CEJQYCL LG Y OKGPP[EJ  XA&GRCTVOGPV QTC XA%QWTUG <PQYW CVGO MNCWWNC 9*'4' QFRQYKCFC  V[NMQ LGFPGOW YKGTUQYK VCDGNK 5'.'%6 FGRCTVOGPV EQWTUG +061 XA&GRCTVOGPV 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':
    29. Rozdział 4. SQL w PL/SQL 105 Klauzula QFYQNCPKGAVCDGNK odwołuje się do tabeli z bazy danych Oracle, a MNCWWNCAYJGTG definiuje zbiór wierszy, które mają być usunięte. Specjalna składnia %744'06 1( MWTUQT jest u ywana wraz z definicją kursora i jest omówiona w rozdziale 6. Odwołania do tabeli oraz klauzula 9*'4' są omawiane szczegółowo w kolejnej części tego rozdziału, w pod- rozdziale „Klauzula WHERE”. W poni szym przykładzie przedstawiono sposób stosowania kilku ró nych instrukcji &'.'6': Dostępne na płycie CD w skrypcie delete.sql &'%.#4' XA5VWFGPV%WVQHH 07/$'4 $')+0 XA5VWFGPV%WVQHH    7UWP FCPG FQV[ECEG MNCU Y MVQT[EJ PKG OC Y[UVCTECLCEGL NKED[  CTGLGUVTQYCP[EJ UVWFGPVQY &'.'6' (41/ ENCUUGU 9*'4' EWTTGPVAUVWFGPVU  XA5VWFGPV%WVQHH  7UWP FCPG FQV[ECEG MCFGIQ UVWFGPVC UVWFKWLCEGIQ 'MQPQOKG MVÎT[  PKG RQUKCFC LGUEG CFP[EJ CNKEGP &'.'6' (41/ UVWFGPVU 9*'4' EWTTGPVAETGFKVU   #0& OCLQT  'EQPQOKEU  '0& Klauzula WHERE Wraz z instrukcjami 5'.'%6, 72&#6' oraz &'.'6' stosuje się klauzulę 9*'4', będącą inte- gralną częścią wykonywanych przez te instrukcje operacji. Klauzula ta definiuje, które instrukcje tworzą zestaw aktywny — zestaw wierszy zwracanych przez zapytanie (5'.'%6) lub na których są wykonywane instrukcje 72&#6' oraz &'.'6'. Klauzula 9*'4' składa się z warunków połączonych operatorami logicznymi #0&, 14 oraz 016. Warunki zwykle przyjmują formę porównań, tak jak w poni szym przykładzie zasto- sowania instrukcji &'.'6': &'%.#4' XA&GRCTVOGPV %*#4   $')+0 XA&GRCTVOGPV  %5   7UWP YU[UVMKG MNCU[ Y[FKCNW +PHQTOCV[MC &'.'6' (41/ ENCUUGU 9*'4' FGRCTVOGPV  XA&GRCTVOGPV '0& Powy szy, przykładowy blok usuwa wszystkie te wiersze z tabeli ENCUUGU, dla których warunek został oceniony na wartość 647' (dla których kolumna FGRCTVOGPV = %5 . Przy tego typu porównaniach nale y zwracać uwagę na właściwe stosowanie nazw zmiennych oraz sposób porównywania znaków.
    30. 106 Oracle8. Programowanie w języku PL/SQL Nazwy zmiennych Na potrzeby kolejnego przykładu przyjęto, e w poprzednim bloku programu zmieniono nazwę zmiennej z XA&GRCTVOGPV na &GRCTVOGPV: &'%.#4' &GRCTVOGPV %*#4   $')+0 &GRCTVOGPV  %5   7UWP YU[UVMKG MNCU[ Y[FKCNW +PHQTOCV[MC &'.'6' (41/ ENCUUGU 9*'4' FGRCTVOGPV  &GRCTVOGPV '0& Ta prosta zmiana radykalnie wpływa na otrzymane wyniki wykonania tej instrukcji — tak zmodyfikowany blok usunie wszystkie wiersze tabeli ENCUUGU, a nie tylko te, dla których zachodzi równość FGRCTVOGPV  %5 . Wynika to ze sposobu parsowania identyfikatorów w instrukcji SQL. Kiedy mechanizm PL/SQL napotyka na warunek taki jak: Y[TCGPKG  Y[TCGPKG najpierw następuje sprawdzenie identyfikatorów Y[TCGPKG oraz Y[TCGPKG w celu usta- lenia, czy odpowiadają one kolumnom tabeli, na których jest wykonywana dana operacja. Następnie identyfikatory te są sprawdzane, czy są zmiennymi w bloku PL/SQL. Język PL/SQL nie rozró nia małych i du ych liter, zatem w poprzednim bloku obydwa identy- fikatory FGRCTVOGPV oraz &GRCTVOGPV są skojarzone z kolumną w tabeli ENCUUGU, a nie ze zmienną. Wynikiem sprawdzenia tego warunku dla ka dego wiersza tabeli będzie wartość 647' i dlatego wszystkie wiersze zostaną usunięte. Je eli blok posiada etykietę, mo na w dalszym ciągu u yć tej samej nazwy dla zmiennej jak dla kolumny tabeli — dzięki nadanej etykiecie do odwołania do zmiennej. Przedsta- wiony poni ej blok daje po ądany efekt, a mianowicie usuwa tylko te wiersze, dla których FGRCTVOGPV  %5 : NA&GNGVG$NQEM &'%.#4' &GRCTVOGPV %*#4   $')+0 &GRCTVOGPV  %5   7UWP YU[UVMKG MNCU[ Y[FKCNW +PHQTOCV[MC &'.'6' (41/ ENCUUGU 9*'4' FGRCTVOGPV  NA&GNGVG$NQEM&GRCTVOGPV '0& Mimo e ten sposób działania prowadzi do uzyskania po ądanego wyniku, jednak stoso- wanie tej samej nazwy dla zmiennej PL/SQL i dla kolumny tabeli nie jest cechą dobrego stylu programowania. Te i inne wytyczne dotyczące stylu programowania w języku PL/SQL omówiono w końcowej części rozdziału 2. Porównania znaków W poprzednim przykładzie znajduje się fragment kodu słu ący do porównywania wartości dwóch znaków. W systemie Oracle mogą być zastosowane dwa ró ne rodzaje porównań: z dopełnieniem odstępu (blank-padded) lub bez dopełnienia odstępu (non-blank-padded).
    31. Rozdział 4. SQL w PL/SQL 107 Te dwa rodzaje porównań ró nią się w sposobie porównywania ciągów znaków o ró nych długościach. Przyjęto, e są porównywane dwa ciągi znaków: EKCIPCMQY oraz EKCIPCMQY. Do porównania z dopełnieniem odstępu stosuje się następujący algorytm. 1. Je eli ciągi znaków EKCIPCMQY oraz EKCIPCMQY są ró nej długości, krótszy ciąg nale y dopełnić znakami odstępu (spacjami), tak aby obydwa miały tą samą długość. 2. Następnie porównuje się ka dy ciąg znaków, znak po znaku, zaczynając od lewej strony. Przykładowo, w ciągu znaków EKCIPCMQY znakiem jest PCM, a w ciągu znaków EKCIPCMQY znakiem jest PCM. 3. Je eli ASCII(PCM) < ASCII(PCM), to EKCIPCMQY < EKCIPCMQY. Je eli ASCII(PCM) > ASCII(PCM), to EKCIPCMQY > EKCIPCMQY. Je eli ASCII(PCM) = ASCII(PCM), to odpowiednio w ciągach znaków EKCIPCMQY oraz EKCIPCMQY przechodzi się do następnego znaku. 4. Je eli mo liwe jest osiągnięcie końców ciągów znaków EKCIPCMQY oraz EKCIPCMQY, wtedy te ciągi są sobie równe. Przy zastosowaniu algorytmu porównania z dopełnieniem odstępu wszystkie poni sze warunki zwrócą wartość 647': CDE  CDE CDE  CDE  0CNG[ YTQEKE WYCIG PC MQPEQYG PCMK QFUVGRW  Y RKGTYU[O EKCIW PCMQY CD  CDE CDEF CDEE Algorytm porównania bez dopełnienia odstępu jest nieco inny. 1. Nale y porównać ka dy ciąg znaków, znak po znaku, zaczynając od lewej strony. Przykładowo, w ciągu znaków EKCIPCMQY znakiem jest PCM, a w ciągu znaków EKCIPCMQY znakiem jest PCM. 2. Je eli ASCII(PCM) < ASCII(PCM), to EKCIPCMQY < EKCIPCMQY. Je eli ASCII(PCM) > ASCII(PCM), to EKCIPCMQY > EKCIPCMQY. Je eli ASCII(PCM) = ASCII(PCM), to nale y przejść do następnego znaku odpowiednio w ciągach znaków EKCIPCMQY oraz EKCIPCMQY. 3. Je eli ciąg znaków EKCIPCMQY kończy się przed ciągiem znaków EKCIPCMQY, wtedy EKCIPCMQY < EKCIPCMQY. Je eli ciąg znaków EKCIPCMQY kończy się przed ciągiem znaków EKCIPCMQY, wtedy EKCIPCMQY > EKCIPCMQY. Przy zastosowaniu algorytmu porównania bez dopełnienia odstępu poni sze warunki zwrócą wartość 647': CDE  CDE CD  CDE CDEF CDEE Jednak poni sze porównanie bez dopełnienia odstępu zwróci wartość (#.5', poniewa ciągi znaków są ró nej długości. Jest to podstawowa ró nica pomiędzy powy szymi dwoma metodami porównań. CDE  CDE  0CNG[ YTQEKE WYCIG PC MQPEQYG PCMK QFUVGRW  Y RKGTYU[O EKCIW PCMQY
    32. 108 Oracle8. Programowanie w języku PL/SQL Po zdefiniowaniu tych dwóch ró nych metod porównań warto się zastanowić, kiedy nale y stosować ka dą z nich. Język PL/SQL wykorzystuje metody porównania z dopełnieniem odstępu tylko wtedy, gdy obydwa porównywane ciągi znaków są stałej długości. Je eli dane ciągi znaków są ró nej długości, stosuje się metodę porównywania bez dopełniania odstępu. Typ danych %*#4 określa ciąg znaków o stałej długości, a typ danych 8#4%*#4 określa ciąg znaków o zmiennej długości. Stałe znakowe (objęte znakami apostrofu) są zawsze uwa ane za ciągi znaków o stałej długości. Je eli dana instrukcja nie jest wykonywana na poprawnych wierszach, nale y sprawdzić ty- py danych u yte w klauzuli 9*'4'. Wykonanie poni szego bloku nie spowoduje usunięcia jakichkolwiek wierszy, poniewa zmienna XA&GRCTVOGPV jest typu 8#4%*#4, a nie typu %*#4: &'%.#4' XA&GRCTVOGPV 8#4%*#4   $')+0 XA&GRCTVOGPV  %5   7UWP YU[UVMKG MNCU[ Y[FKCNW +PHQTOCV[MC &'.'6' (41/ ENCUUGU 9*'4' FGRCTVOGPV  XA&GRCTVOGPV '0& Kolumna FGRCTVOGPV tabeli ENCUUGU ma zdefiniowany typ danych %*#4. Wszystkie klasy informatyki (computer science) posiadają wartości %5 dla kolumny FGRCTVOGPV — nale y zwrócić uwagę na końcowy znak odstępu. Zmienna XA&GRCTVOGPV = %5 nie ma końcowego znaku odstępu i zdefiniowano dla niej typ danych o zmiennej długości, a zatem instrukcja &'.'6' nie będzie miała adnego wpływu na wiersze. Aby klauzula 9*'4' dała po ądany efekt, dla zmiennych w bloku PL/SQL nale y zdefi- niować ten sam typ danych, co dla porównywanych kolumn bazy danych. Taki efekt gwarantuje zastosowanie atrybutu 6;2'. Odwołania do tabel Wszystkie operacje DML odwołują się do tabeli. Poni ej przedstawiono przykład takiego odwołania: =UEJGOCV?VCDNG="RQYKCCPKGDC[FCP[EJ? gdzie UEJGOCV identyfikuje właściciela tabeli, a RQYKCCPKGDC[FCP[EJ identyfikuje tabelę w odległej bazie danych. W celu nawiązania połączenia z bazą danych konieczne jest podanie nazwy u ytkownika i hasła dla odpowiedniego schematu u ytkownika. Późniejsze instrukcje SQL, wydawane podczas sesji, będą domyślnie odwoływać się do tego schematu. Je eli odwołanie do tabeli jest niesklasyfikowane, jak w poni szym przykładzie: 72&#6' UVWFGPVU 5'6 OCLQT  /WUKE 9*'4' KF   wtedy ta nazwa tabeli (w tym przykładzie UVWFGPVU) musi być nazwą tabeli w schemacie domyślnym. Je eli tak nie jest, wystąpi błąd: 14# VCDNG QT XKGY FQGU PQV GZKUV VCDGNC NWD RGTURGMV[YC PKG KUVPKGLG
    33. Rozdział 4. SQL w PL/SQL 109 2.5 KFGPVKHKGT OWUV DG FGENCTGF KFGPV[HKMCVQT OWUK D[E CFGMNCTQYCP[ Schemat domyślny jest schematem, z którym u ytkownik jest połączony przed wyko- nywaniem jakichkolwiek instrukcji. Je eli dana tabela znajduje się w innym schemacie, mo e być kwalifikowana przez nazwę schematu, jak w kolejnym przykładzie: 72&#6' GZCORNGUVWFGPVU 5'6 OCLQT  /WUKE 9*'4' KF   Instrukcja 72&#6' w powy szym przykładzie będzie wykonana, je eli zostanie nawiązane połączenie ze schematem tabeli GZCORNG lub z innym schematem, dla którego przyznano uprawnienie 72&#6' na tabeli UVWFGPVU. Powiązania bazy danych Je eli w systemie operacyjnym zainstalowano program SQL*Net, mo na wykorzystywać powiązania bazy danych. Powiązanie bazy danych jest odwołaniem do odległej bazy danych. Odległa baza danych mo e pracować w zupełnie innym systemie operacyjnym ni lokalna baza danych. Poni ej przedstawiono instrukcję DDL, która tworzy powiąza- nie bazy danych: %4'#6' &#6#$#5' .+0- PCYCARQYKCCPKC %100'%6 61 PCYCW[VMQYPKMC +&'06+(+'& $; JCUNQ 75+0) EKCIPCMQYAUSN Nazwa powiązania bazy danych PCYCARQYKCCPKC podlega tym samym regułom składnio- wym, co identyfikator bazy danych. Schemat w odległej bazie danych jest identyfikowany przez nazwę u ytkownika PCYCW[VMQYPKMC oraz hasło JCUNQ, a EKCIPCMQYAUSN jest po- prawnym ciągiem znaków połączenia dla odległej bazy danych. Zakładając, e utworzono odpowiednie schematy i e jest zainstalowany program SQL*Net wersja 2., poni szy, przykładowy fragment kodu tworzy powiązanie bazy danych: %4'#6' &#6#$#5' .+0- GZCORNGADCEMWR %100'%6 61 GZCORNG +&'06+(+'& $; GZCORNG 75+0) DCEMWRAFCVCDCUG  Więcej informacji dotyczących sposobów instalowania i konfigurowania programu SQL*Net znajduje się w publikacji SQL*Net User’s Guide and Reference. Kontynuując powy szy przykład, za pomocą utworzonego powiązania mo na zdalnie modyfikować tabelę UVWFGPVU. W tym celu wpisuje się poni szy fragment kodu: 72&#6' UVWFGPVU"GZCORNGADCEMWR 5'6 OCLQT  /WUKE 9*'4' KF   Jeśli powiązanie bazy danych stanowi część transakcji, wtedy ta transakcja jest nazywana transakcją rozproszoną, poniewa jej rezultatem jest zmodyfikowanie więcej ni jednej bazy danych. Więcej informacji dotyczących transakcji rozproszonych i sposobów za- rządzania nimi znajduje się w publikacji Server SQL Reference.
    34. 110 Oracle8. Programowanie w języku PL/SQL Synonimy Odwołania do tabel mogą być skomplikowane, szczególnie kiedy obejmują operacje związane ze schematem u ytkownika i (lub) powiązaniem bazy danych. Aby ułatwić obsługę skomplikowanych odwołań, system Oracle pozwala na tworzenie ich synonimów. Synonim w zasadzie zmienia nazwę odwołania do tabeli, podobnie jak alias dla elementu listy wyboru instrukcji 5'.'%6. Synonim jest obiektem słownika danych i jest tworzony przez instrukcję DDL %4'#6' 5;010;/: %4'#6' 5;010;/ PCYCAU[PQPKOW (14 QFYQNCPKG W celu utworzenia synonimu nale y za pomocą powy szego polecenia wstawić w miejsce PCYCAU[PQPKOW nazwę synonimu, a w miejsce QFYQNCPKG obiekt schematu, do którego ma nastąpić odwołanie. Obiektem tym mo e być tabela, jak w poni szym przykładzie, ale mo e to być równie procedura, sekwencja lub inny obiekt bazy danych. %4'#6' 5;010;/ GZCORNGAUVWFGPVU (14 UVWFGPVU"GZCORNGADCEMWR Kontynuując powy szy przykład, za pomocą utworzonego synonimu mo na zapisać roz- proszoną instrukcję 72&#6': 72&#6' GZCORNGAUVWFGPVU 5'6 OCLQT  /WUKE 9*'4' KF   Utworzenie synonimu nie powoduje przyznania żadnych uprawnień na odwoływanym obiekcie — po prostu umożliwia wykorzystywanie jego alternatywnej nazwy. Jeżeli obiekt wymaga odwołania z innego schematu, dostęp do tego obiektu powinien być przyznany albo jawnie, albo przez rolę (za pomocą instrukcji )4#06). Pseudokolumny Pseudokolumny są dodatkowymi obiektami, które mogą być wywoływane tylko z poziomu instrukcji SQL. Pod względem składniowym pseudokolumny są traktowane jak kolumny w tabeli. Jednak faktycznie nie istnieją w ten sam sposób jak kolumny. Zamiast tego są one określane jako część wykonania instrukcji SQL. Pseudokolumny CURRVAL oraz NEXTVAL Pseudokolumny %7448#. oraz 0':68#. są u ywane wraz z sekwencjami. Sekwencją jest obiekt Oracle, który jest u ywany do generowania unikatowych liczb. Sekwencja jest tworzona za pomocą polecenia DDL %4'#6' 5'37'0%'. Po utworzeniu sekwencji mo na uzyskać do niej dostęp. W tym celu wydaje się polecenie: UGMYGPELC%7448#. oraz UGMYGPELC0':68#.
    35. Rozdział 4. SQL w PL/SQL 111 gdzie UGMYGPELC jest nazwą sekwencji. Pseudokolumna %7448#. zwraca bie ącą wartość sekwencji, a pseudokolumna 0':68#. inkrementuje sekwencję i zwraca nową wartość. Obydwie pseudokolumny %7448#. oraz 0':68#. zwracają wartości typu 07/$'4. Wartości sekwencji mogą być u ywane w liście wyboru zapytania, w klauzuli 8#.7'5 instrukcji +05'46 oraz w klauzuli 5'6 instrukcji 72&#6'. Jednak nie mogą być one zasto- sowane w klauzuli 9*'4' lub w instrukcji proceduralnej PL/SQL. Poni ej podano przykłady poprawnego wykorzystania pseudokolumn %7448#. oraz 0':68#.: %4'#6' 5'37'0%' UVWFGPVAUGSWGPEG 56#46 9+6*   9 VGL KPUVTWMELK  QUVCPKG Y[MQT[UVCPG LCMQ YCTVQUE KFGPV[HKMCVQTC +& +05'46 +061 UVWFGPVU KF HKTUVAPCOG NCUVAPCOG 8#.7'5 UVWFGPVAUGSWGPEG0':68#. 5EQVV  5OKVJ   9 VGL KPUVTWMELK  QUVCPKG Y[MQT[UVCPG LCMQ YCTVQUE KFGPV[HKMCVQTC +& +05'46 +061 UVWFGPVU KF HKTUVAPCOG NCUVAPCOG 8#.7'5 UVWFGPVAUGSWGPEG0':68#. /CTICTGV  /CUQP  5'.'%6 UVWFGPVAUGSWGPEG0':68#. 8CNWG (41/ FWCN  0CLRKGTY KPMTGOGPVWLG NKEDG UGMYGPELK 8CNWG   5'.'%6 UVWFGPVAUGSWGPEG%7448#. 8CNWG (41/ FWCN  <YTCEC DKGCEC YCTVQUE 8CNWG   Pseudokolumna LEVEL Pseudokolumna .'8'. jest wykorzystywana tylko wewnątrz instrukcji 5'.'%6, która umo - liwia poruszanie się po drzewie hierarchii, obejmującym daną tabelę. Podczas tego procesu są stosowane klauzule 56#46 9+6* oraz %100'%6 $;. Pseudokolumna .'8'. zwraca bie ący poziom drzewa jako wartość typu 07/$'4. Więcej informacji na ten temat znajduje się w publikacji Server SQL Reference. Pseudokolumna ROWID Pseudokolumna 419+& jest wykorzystywana w liście wyboru zapytania. Zwraca ona iden- tyfikator danego wiersza. Formatem pseudokolumny jest 18-znakowy ciąg znaków, co opisano w rozdziale 2. Pseudokolumna 419+& zwraca wartość typu 419+&. W poni szym przykładzie zapytanie zwraca wszystkie identyfikatory wierszy w tabeli TQQOU (pokoje): 5'.'%6 419+& (41/ TQQOU 419+&   
    36. 112 Oracle8. Programowanie w języku PL/SQL    Identyfikator 419+& w wersji Oracle8 różni się od identyfikatora 419+& w wersji Oracle7. Mimo to format zewnętrzny dla obydwóch wersji jest w dalszym ciągu 18-znakowym ciągiem znaków. Więcej informacji na ten temat znajduje się w rozdziale 2. Pseudokolumna ROWNUM Pseudokolumna 41907/ zwraca bie ący numer wiersza w zapytaniu. Umo liwia to ograni- czenie całkowitej liczby wierszy. Pseudokolumna 41907/ jest wykorzystywana głównie w klauzuli 9*'4' zapytań oraz w klauzuli 5'6 instrukcji 72&#6'. Pseudokolumna 41907/ zwraca wartość typu 07/$'4. Wykonanie poni szego zapytania spowoduje zwrócenie tylko dwóch pierwszych wierszy z tabeli UVWFGPVU: 5'.'%6
    37. (41/ UVWFGPVU 9*'4' 41907/   Pierwszy wiersz posiada 41907/ , drugi — 41907/ , itd. Wartość 41907/ jest przypisywana wierszowi przed wykonaniem operacji sortowania (za pomocą klauzuli 14&'4 $;). W rezultacie nie można zastosować tej pseudokolumny w celu pobrania wierszy o najniższych wartościach ROWNUM dla określonej kolejności wyszukiwania. Warto rozważyć przykładową, poniższą instrukcję: 5'.'%6 HKTUVAPCOG NCUVAPCOG (41/ UVWFGPVU 9*'4' 41907/   14&'4 $; HKTUVAPCOG Wprawdzie powyższa instrukcja zwraca dwa wiersze z tabeli UVWFGPVU (studenci), posor- towane według kolumny HKTUVAPCOG (imię), jednak niekoniecznie te wiersze są dwoma pierwszymi wierszami według kolejności w całym sortowaniu. Aby to osiągnąć, najlepiej zadeklarować kursor dla tego zapytania i pobrać tylko dwa pierwsze wiersze. Informacje dotyczące kursorów i sposobów ich stosowania przedstawiono w rozdziale 6. Instrukcje GRANT i REVOKE. Uprawnienia Wprawdzie instrukcje DDL, takie jak )4#06 i 4'81-', nie mogą być bezpośrednio stoso- wane w programie PL/SQL, jednak mają one pewien wpływ na poprawność instrukcji SQL. W celu wykonania instrukcji, takiej jak +05'46 lub &'.'6', na tabeli Oracle jest konieczne posiadanie pewnych uprawnień. Manipulowanie tymi uprawnieniami następuje za pomocą instrukcji SQL: )4#06 oraz 4'81-'.
    38. Rozdział 4. SQL w PL/SQL 113 Uprawnienia obiektowe a uprawnienia systemowe Istnieją dwa ró ne rodzaje uprawnień: obiektowe i systemowe. Uprawnienie obiektowe pozwala na wykonywanie operacji na danym obiekcie (takim jak tabela). Uprawnienie systemowe pozwala na wykonanie operacji na całej klasie obiektów. W tabeli 4.3 opisano dostępne uprawnienia obiektowe. Uprawnienia obiektowe DDL (#.6'4, +0&':, 4'('4'0%'5) nie mogą być zastosowane bezpośrednio w języku PL/SQL (z wyjątkiem pakietu &$/5A53.), poniewa pozwalają one na przeprowadzenie operacji DDL na rozpatrywanym obiekcie. Tabela 4.3. Uprawnienia obiektowe SQL Uprawnienie Opis Typy obiektów obiektowe schematu #.6'4 Pozwala u ytkownikowi, któremu przyznano uprawnienie, Tabele, sekwencje na wydawanie instrukcji #.6'4 (takiej jak #.6'4 6#$.') dotyczącej obiektu. &'.'6' Pozwala u ytkownikowi, któremu przyznano uprawnienie, Tabele, perspektywy na wydawanie instrukcji &'.'6' dotyczącej obiektu. ':'%76' Pozwala u ytkownikowi, któremu przyznano uprawnienie, Procedury, funkcje, pakiety na wykonanie składowanego obiektu PL/SQL (informacje dotyczące obiektów składowanych znajdują się w rozdziałach od 7. do 9.). +0&': Pozwala u ytkownikowi, któremu przyznano uprawnienie, Tabele na utworzenie indeksu na tabeli za pomocą polecenia %4'#6' +0&':. +05'46 Pozwala u ytkownikowi, któremu przyznano uprawnienie, Tabele, perspektywy na wydawanie instrukcji +05'46 w odniesieniu do obiektu. 4'('4'0%'5 Pozwala u ytkownikowi, któremu przyznano uprawnienie, Tabele na utworzenie ograniczenia, które odwołuje się do tabeli. 5'.'%6 Pozwala u ytkownikowi, któremu przyznano uprawnienie, Tabele, perspektywy, na wydawanie instrukcji 5'.'%6 dotyczącej obiektu. sekwencje, migawki 72&#6' Pozwala u ytkownikowi, któremu przyznano uprawnienie, Tabele, perspektywy na wydawanie instrukcji 72&#6' dotyczącej obiektu. Istnieje wiele uprawnień systemowych, dotyczą one prawie ka dej mo liwej operacji DDL. Na przykład, uprawnienie systemowe %4'#6' 6#$.' pozwala u ytkownikowi, któremu przyznano to uprawnienie, na tworzenie tabel. Uprawnienie systemowe %4'#6' #0; 6#$.' pozwala u ytkownikowi, któremu przyznano uprawnienie, na tworzenie tabel w innym schemacie u ytkownika. Publikacja Server SQL Reference dokumentuje wszystkie dostępne uprawnienia systemowe. Instrukcje GRANT oraz REVOKE Instrukcja )4#06 jest u ywana w celu umo liwienia innemu schematowi uzyskania dostępu do danego uprawnienia, natomiast instrukcja 4'81-' słu y do blokowania dostępu do upraw- nienia, uzyskanego za pomocą instrukcji )4#06. Obydwie instrukcje mogą być stosowane do zarządzania uprawnieniami systemowymi i obiektowymi.
    39. 114 Oracle8. Programowanie w języku PL/SQL Instrukcja GRANT Poni ej przedstawiono składnię instrukcji )4#06 dla uprawnień obiektowych: )4#06 WRTCYPKGPKG 10 QDKGMV 61 W[VMQYPKM =9+6* )4#06 126+10? gdzie WRTCYPKGPKG jest nadawanym uprawnieniem, QDKGMV jest obiektem, do którego jest przyznawany dostęp, a W[VMQYPKM jest u ytkownikiem, który otrzymuje uprawnienie. Przykładowo, jeśli W[VMQYPKM# jest poprawnym schematem bazy danych, poni sza instruk- cja )4#06 jest prawidłowa: )4#06 5'.'%6 10 ENCUUGU 61 W[VMQYPKM# W razie określenia opcji 9+6* )4#06 126+10 u ytkownik W[VMQYPKM# otrzymuje prawo przyznawania tego uprawnienia innym u ytkownikom. W jednej instrukcji )4#06 mo na określać więcej ni jedno uprawnienie obiektowe, przykładowo: )4#06 72&#6' &'.'6' 10 UVWFGPVU 61 W[VMQYPKM# Poni ej przedstawiono składnię instrukcji )4#06 słu ącej do przydzielania uprawnień systemowych: )4#06 WRTCYPKGPKG 61 W[VMQYPKM =9+6* #&/+0 126+10? gdzie WRTCYPKGPKG jest uprawnieniem systemowym, a W[VMQYPKM jest u ytkownikiem, który otrzymuje uprawnienie. W razie określenia opcji 9+6* #&/+0 126+10 u ytkownik W[VMQYPKM otrzymuje prawo przyznawania tego uprawnienia innym u ytkownikom. Na przykład: )4#06 %4'#6' 6#$.' #.6'4 #0; 241%'&74' VQ W[VMQYPKM# Podobnie jak w przypadku instrukcji )4#06 dla uprawnień obiektowych, w jednej instrukcji )4#06 mo na określać większą liczbę uprawnień systemowych. )4#06 jest instrukcją DDL, a więc jest natychmiast uaktywniana i po jej wykonaniu jest wydawana niejawnie instrukcja potwierdzenia %1//+6. Instrukcja REVOKE Poni ej przedstawiono składnię instrukcji 4'81-', która słu y do odbierania uprawnień obiektowych: 4'81-' WRTCYPKGPKG 10 QDKGMV (41/ W[VMQYPKM =%#5%#&' %10564#+065? gdzie WRTCYPKGPKG jest odbieranym uprawnieniem, QDKGMV jest obiektem, dla którego uprawnienie jest odbierane, a W[VMQYPKM jest u ytkownikiem, któremu uprawnienie jest odbierane. Przykładowo, poni ej przedstawiono poprawny sposób zastosowania instrukcji 4'81-': 4'81-' 5'.'%6 10 ENCUUGU (41/ W[VMQYPKM# W razie odbierania uprawnienia 4'('4'0%'5 i uwzględnienia klauzuli %#5%#&' %10564#+065 następuje usunięcie wszystkich więzów integralności referencyjnej, utworzonych przez u ytkownika, któremu odbiera się to uprawnienie.
    40. Rozdział 4. SQL w PL/SQL 115 Istnieje mo liwość odbierania wielu uprawnień za pomocą jednej instrukcji. 4'81-' 72&#6' &'.'6' +05'46 10 UVWFGPVU (41/ W[VMQYPKM# Poni ej przedstawiono składnię instrukcji 4'81-', za pomocą odbiera się uprawnienia systemowe: 4'81-' WRTCYPKGPKG (41/ W[VMQYPKM gdzie WRTCYPKGPKG jest odbieranym uprawnieniem systemowym, a W[VMQYPKM jest u yt- kownikiem, któremu jest odbierane dane uprawnienie. Poni ej podano przykładowe, poprawne zastosowanie instrukcji 4'81-': 4'81-' #.6'4 6#$.' ':'%76' #0; 241%'&74' (41/ W[VMQYPKM# Role W przypadku du ego systemu Oracle, gdzie istnieje wiele ró nych kont u ytkowników, zarządzanie uprawnieniami mo e być skomplikowanym zadaniem. W celu ułatwienia zarządzania kontami w systemie Oracle stosuje się role. Rola w zasadzie jest zbiorem uprawnień, zarówno systemowych, jak i obiektowych. Warto przeanalizować następujący zestaw instrukcji: %4'#6' 41.' VCDNGASWGT[ )4#06 5'.'%6 10 UVWFGPVU 61 VCDNGASWGT[ )4#06 5'.'%6 10 ENCUUGU 61 VCDNGASWGT[ )4#06 5'.'%6 10 TQQOU 61 VCDNGASWGT[ Z powy szego wynika, e roli VCDNGASWGT[ przydzielono uprawnienie 5'.'%6 na trzech ró nych tabelach. Teraz mo na przyznać tę rolę u ytkownikom: )4#06 VCDNGASWGT[ 61 W[VMQYPKM# )4#06 VCDNGASWGT[ 61 W[VMQYPKM$ W ten sposób u ytkownicy: W[VMQYPKM# i W[VMQYPKM$ otrzymali uprawnienie 5'.'%6 na trzech tabelach. Taki sposób postępowania mo e ułatwić zarządzanie systemem, po- niewa powy szym działaniem zastąpiono sześć oddzielnych operacji przyznawania uprawnienia 5'.'%6. Rola 27$.+% jest rolą predefiniowaną w systemie Oracle. Jest ona przyznawana automa- tycznie ka demu u ytkownikowi. A zatem mo na wykonywać poni szą instrukcję: )4#06 WRTCYPKGPKG 61 27$.+% W ten sposób dane uprawnienie jest przyznawane ka demu u ytkownikowi systemu Oracle. W systemie Oracle istnieją tak e inne predefiniowane role. Zawierają one typowe upraw- nienia systemowe. Role te wymieniono w tabeli 4.4. Warto zauwa yć, ze wszystkie wy- mienione w tej tabeli role są automatycznie przyznawane u ytkownikowi 5;56'/, który jest predefiniowanym u ytkownikiem systemu Oracle. Zwykle role %100'%6 oraz 4'5174%' są przyznawane u ytkownikom bazy danych, którzy mają tworzyć obiekty schematu, a sama rola %100'%6 jest przyznawana u ytkownikom, którzy wykonują zapytania na obiektach schematu. U ytkownicy, którym przyznano tylko rolę %100'%6, mogą wymagać dodatkowych uprawnień na obiektach schematu, do których muszą mieć dostęp.
    41. 116 Oracle8. Programowanie w języku PL/SQL Tabela 4.4. Predefiniowane role systemowe Nazwa roli Przyznane uprawnienia %100'%6 #.6'4 5'55+10, %4'#6' %.756'4, %4'#6' &#6#$#5' .+0-, %4'#6' 5'37'0%', %4'#6' 5'55+10, %4'#6' 5;010;/, %4'#6' 6#$.', %4'#6' 8+'9 4'5174%' %4'#6' %.756'4, %4'#6' 241%'&74', %4'#6' 5'37'0%', %4'#6' 6#$.', %4'#6' 241%'&74' &$# Wszystkie uprawnienia systemowe (z opcją #&/+0 126+10, więc właściciel roli &$# mo e je przyznawać z kolei innym u ytkownikom), plus ':2A(7..A&#6#$#5' oraz +/2A(7..A&#6#$#5' ':2A(7..A&#6#$#5' 5'.'%6 #0; 6#$.', $#%-72 #0; 6#$.', plus +05'46, 72&#6', &'.'6' na tabelach systemowych U[UKPEGZR, U[UKPEXKF oraz U[UKPEHKN +/2A(7..A&#6#$#5' $'%1/' 75'4 Sterowanie transakcjami Transakcja jest serią instrukcji SQL, których wykonanie w ramach pewnej jednostki kończy się powodzeniem lub niepowodzeniem. Transakcje są standardowym elementem pracy relacyjnej bazy danych i stanowią zabezpieczenie przed utratą spójności danych. Klasycz- nym przykładem powy szego jest transakcja bankowa. Warto rozwa yć następujące dwie instrukcje SQL, które przeprowadzają transfer kwoty transakcji MYQVCAVTCPUCMELK pomiędzy dwoma kontami bankowymi, identyfikowanymi jako MQPVQAPCFCYE[ i MQPVQAQFDKQTE[. 72&#6' MQPVC 5'6 UCNFQ  UCNFQ MYQVCAVTCPUCMELK PTAMQPVC  MQPVQAPCFCYE[ 72&#6' MQPVC 5'6 UCNFQ  UCNFQ MYQVCAVTCPUCMELK PTAMQPVC  MQPVQAQFDKQTE[ Na potrzeby niniejszego przykładu przyjęto, e pierwsza instrukcja 72&#6' została wyko- nana z powodzeniem, ale wykonanie drugiej instrukcji zakończyło się niepowodzeniem z powodu wystąpienia pewnego błędu (przykładowo, uszkodzenie w bazie danych lub w sieci). W takiej sytuacji dane są niespójne — stan konta MQPVQAPCFCYE[ został zmniej- szony, ale stan konta MQPVQAQFDKQTE[ nie został zwiększony. Jest oczywiste, e nie jest to po ądana sytuacja, zwłaszcza dla właściciela konta MQPVQAPCFCYE[. Przed taką sekwencją zdarzeń mo na się zabezpieczyć dzięki połączeniu powy szych dwóch instrukcji w jedną transakcję. W ten sposób albo obydwie transakcje zakończą się powodzeniem, albo oby- dwie transakcje zakończą się niepowodzeniem. Taki sposób postępowania zabezpiecza przed utratą spójności danych. Transakcja rozpoczyna się od pierwszej instrukcji SQL, wydanej po poprzedniej transakcji, lub pierwszą instrukcją SQL po nawiązaniu połączenia z bazą danych. Transakcja kończy się instrukcją %1//+6 lub 41..$#%-. Instrukcja COMMIT a instrukcja ROLLBACK Po wydaniu instrukcji %1//+6 transakcja przeprowadzana w bazie danych zostanie zakoń- czona. Wystąpią równie poni sze zdarzenia:
    42. Rozdział 4. SQL w PL/SQL 117 wyniki pracy wykonane przez transakcję zostaną trwale zachowane; zmiany dokonane przez transakcję będą widoczne w innych sesjach; wszystkie blokady ustawione przez transakcję zostaną zwolnione. Poni ej przedstawiono składnię instrukcji %1//+6: %1//+6 =914-? Opcjonalne słowo kluczowe 914- udostępniono w celu zwiększenia zgodności ze stan- dardem SQL. Dopóki transakcja nie zostanie potwierdzona za pomocą instrukcji %1//+6, zmiany dokonane przez tę transakcję są widoczne tylko w sesji, w której dana transakcja jest wykonywana. Taką sytuację pokazano na rysunku 4.2. Najpierw w sesji A jest wyda- wana instrukcja +05'46. W sesji B jest wykonywane zapytanie na tabeli TQQOU, jednak w sesji B nie jest widoczne wykonanie instrukcji +05'46 przeprowadzanej w sesji A, po- niewa nie zostało one potwierdzone. Następnie w sesji A następuje wydanie instrukcji potwierdzenia %1//+6, a druga instrukcja 5'.'%6 w sesji B poka e nowo wstawiony wiersz. Rysunek 4.2. Dwie sesje Po wydaniu instrukcji 41..$#%- transakcja przeprowadzana w bazie danych zostaje za- kończona oraz zachodzą następujące zdarzenia: wszystkie wyniki pracy wykonanej przez transakcję zostają wycofane, jak gdyby transakcja nie była przeprowadzana; wszystkie blokady ustawiane przez transakcję zostają zwolnione. Poni ej przedstawiono składnię instrukcji 41..$#%-: 41..$#%- =914-? Podobnie jak w instrukcji %1//+6, opcjonalne słowo kluczowe 914- jest dostępne dla zwięk- szenia zgodności ze standardem SQL. Niejawna instrukcja 41..$#%- jest często wykonywa- na w razie wykrycia w programie błędu, który uniemo liwia dalszą pracę. W razie nagłego zakończenia sesji (na przykład w razie zerwania połączenia z bazą danych) bez zakończenia
    43. 118 Oracle8. Programowanie w języku PL/SQL przeprowadzanej transakcji za pomocą instrukcji %1//+6 lub 41..$#%-, transakcja jest automatycznie wycofywana z bazy danych. Program SQL*Plus automatycznie wydaje instrukcję %1//+6 przy zakańczaniu pracy programu. Także uaktywnienie opcji CWVQEQOOKV powoduje wydawanie instrukcji %1//+6 po przeprowadzeniu każdej instrukcji SQL. Jednak nie ma to wpływu na sposób zacho- wania instrukcji SQL zawartych wewnątrz bloku PL/SQL, ponieważ program SQL*Plus nie ma kontroli nad tymi instrukcjami przed zakończeniem działania bloku PL/SQL. Punkty zachowania Z poprzedniego podrozdziału wynika, e wydanie instrukcji 41..$#%- powoduje wycofanie całej transakcji. Warto jednak wiedzieć, e po zastosowaniu instrukcji 5#8'21+06 tylko część transakcji wymaga wycofania. Poni ej przedstawiono składnię instrukcji 5#8'21+06: 5#8'21+06 PCYC gdzie PCYC jest nazwą punktu zachowania. Nazwy punktów zachowania podlegają tym samym zasadom składniowym, co identyfikatory SQL (patrz rozdział 2.). Nale y zwrócić uwagę, e punkty zachowania nie są deklarowane w sekcji deklaracji, poniewa dla danej transakcji mają one znaczenie globalne i wykonywanie transakcji mo e być kontynuowane a do zakończenia bloku. Zatem jeśli zdefiniowano punkt zachowania, wykonywanie pro- gramu mo e być cofnięte do danego punktu zachowania. W tym celu wydaje się polecenie o następującej składni: 41..$#%-=914-? 61 5#8'21+06 PCYC Po wydaniu polecenia 41..$#%- 61 5#8'21+06 zachodzą następujące zdarzenia: ka de działanie wykonane od punktu zachowania jest wycofywane. Jednak sam punkt wycofania pozostaje aktywny. W razie potrzeby punkt zachowania mo e być wykorzystany do ponownego wycofania części transakcji; blokady i zasoby nabyte dzięki instrukcjom SQL od punktu zachowania zostają zwolnione; transakcja nie ulega zakończeniu, poniewa wykonywanie instrukcji SQL w dalszym ciągu jest zawieszone. Warto rozwa yć następujący fragment bloku PL/SQL: $')+0 +05'46 +061 VGORAVCDNG EJCTAEQN 8#.7'5 9UVCY LGFGP  5#8'21+06 # +05'46 +061 VGORAVCDNG EJCTAEQN 8#.7'5 9UVCY FYC  5#8'21+06 $ +05'46 +061 VGORAVCDNG EJCTAEQN 8#.7'5 9UVCY VT[  5#8'21+06 % 
    44. 6WVCL KPUVTWMELG DTCMWLCEG
    45.  %1//+6 '0& Je eli do instrukcji brakujących zostanie wprowadzona instrukcja: 41..$#%- 61 $
    46. Rozdział 4. SQL w PL/SQL 119 wtedy trzecia instrukcja +05'46 oraz punkt zachowania C zostaną wycofane. Jednak dwie pierwsze instrukcje +05'46 będą przetwarzane. Z drugiej strony, je eli do instrukcji bra- kujących zostanie wprowadzona instrukcja: 41..$#%- 61 # wtedy druga i trzecia instrukcja +05'46 zostanie wycofana i do przetwarzania pozostanie tylko pierwsza instrukcja +05'46. Instrukcja 5#8'21+06 jest często u ywana przed rozpoczęciem skomplikowanej sekcji trans- akcji. Je eli część transakcji nie powiedzie się, mo na ją wycofać, a następnie kontynuować jej wcześniejszą część. Transakcje a bloki Nale y zwrócić uwagę na pewne ró nice między transakcjami a blokami PL/SQL. Roz- poczęcie wykonywania bloku nie oznacza rozpoczęcia wykonywania transakcji. Podobnie rozpoczęcie wykonywania transakcji nie musi wiązać się z rozpoczęciem wykonywania bloku. Przykładowo, warto rozwa yć sytuację, w której z wiersza poleceń programu SQL*Plus wydano następujące instrukcje: Dostępne na płycie CD w skrypcie 1trans.sql +05'46 +061 ENCUUGU FGRCTVOGPV EQWTUG FGUETKRVKQP OCZAUVWFGPVU EWTTGPVAUVWFGPVU PWOAETGFKVU TQQOAKF 8#.7'5 %5   %QORWVGT 5EKGPEG        $')+0 72&#6' TQQOU 5'6 TQQOAKF  TQQOAKF   41..$#%- 914- '0& Z powy szego fragmentu kodu wynika, ze wydano instrukcję +05'46, a następnie ano- nimowy blok PL/SQL. W bloku tym znajduje się instrukcja 72&#6' i następnie instrukcja 41..$#%-. Instrukcja 41..$#%- wycofuje nie tylko instrukcję 72&#6', ale równie wcze- śniejszą instrukcję +05'46. Zarówno instrukcja +05'46, jak i blok są częścią tej samej sesji bazy danych, a w ten sposób tak e tej samej transakcji. W podobny sposób jeden blok mo e zawierać w sobie wiele transakcji. Przykładowo: Dostępne na płycie CD w skrypcie 1block.sql &'%.#4' XA0WO+VGTCVKQPU 07/$'4 $')+0  9[MQPCL RGVNG QF  FQ  YUVCYKCLCE VG YCTVQUEK FQ VCDGNK  VGORAVCDNG 9[MQPWL KPUVTWMELG %1//+6 RQ MCF[EJ  YKGTUCEJ (14 XA.QQR%QWPVGT +0  .112 +05'46 +061 VGORAVCDNG PWOAEQN 8#.7'5 XA.QQR%QWPVGT  XA0WO+VGTCVKQPU  XA0WO+VGTCVKQPU 
    47. 120 Oracle8. Programowanie w języku PL/SQL +( XA0WO+VGTCVKQPU   6*'0 %1//+6 XA0WO+VGTCVKQPU   '0& +( '0& .112 '0& Powy szy blok powoduje wstawianie liczb o wartościach od 1 do 500 do tabeli VGORAVCDNG i potwierdza wstawienie tych liczb po ka dych 50 wierszach. Zatem podczas wykonania jednego bloku zostanie przeprowadzonych 10 transakcji. Podsumowanie W niniejszym rozdziale ogólnie omówiono zagadnienia dotyczące instrukcji SQL, DML oraz instrukcji sterowania transakcjami, dozwolonymi w szczególności w języku PL/SQL. Podano równie informacje związane z uprawnieniami i rolami, a tak e przedstawiono sposób zabezpieczania danych przed utratą spójności za pomocą mechanizmu transakcji. W następnym rozdziale zostaną opisane wbudowane funkcje SQL. W rozdziale 6. zostaną omówione kursory, które są stosowane dla zapytań wielowierszowych. W celu prawi- dłowego zrozumienia prezentowanych tam zagadnień nale y przeanalizować koncepcje przedstawione w niniejszym oraz w kolejnym rozdziale.

    + Wydawnictwo HelionWydawnictwo Helion, 4 months ago

    custom

    182 views, 0 favs, 0 embeds more stats

    Wykorzystanie wbudowanego w system Oracle języka P more

    More info about this document

    © All Rights Reserved

    Go to text version

    • Total Views 182
      • 182 on SlideShare
      • 0 from embeds
    • Comments 0
    • Favorites 0
    • Downloads 0
    Most viewed embeds

    more

    All embeds

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories