Robert Chwastek. Bazy danych



Podobne dokumenty
PL/SQL. Funkcje wbudowane

SQL (ang. Structured Query Language)

Paweł Rajba

PODSTAWY BAZ DANYCH 13. PL/SQL

Szkolenie Oracle SQL podstawy. Terminy lutego 2010 First Minute! 1100zł!

Oracle PL/SQL. Paweł Rajba.

PL/SQL. Zaawansowane tematy PL/SQL. Piotr Medoń

Zaawansowane bazy danych i hurtownie danych semestr I

SQL 4 Structured Query Lenguage

Przestrzenne bazy danych Podstawy języka SQL

Technologie baz danych WYKŁAD 7: Wyjątki

Procedury składowane. Funkcje vs. procedury Funkcja. Procedura. zazwyczaj ma parametry tylko typu IN; można wywoływać z poziomu

DECLARE <nazwa_zmiennej> typ [(<rozmiar> )] [ NOT NULL ] [ { := DEFAULT } <wartość> ];

Język PL/SQL Procedury i funkcje składowane

Wyzwalacz - procedura wyzwalana, składowana fizycznie w bazie, uruchamiana automatycznie po nastąpieniu określonego w definicji zdarzenia

Ref. 7 - Język SQL - polecenia DDL i DML

kończy wysyłanie danych do pliku tworzy strukturę tabeli wyświetla opis struktury tabeli zmiana nazwy tabeli usuwanie tabeli

KOLEKCJE - to typy masowe,zawierające pewną liczbę jednorodnych elementów

Wykład 5 funkcje i procedury pamiętane widoki (perspektywy) wyzwalacze

UPDATE Studenci SET Rok = Rok + 1 WHERE Rodzaj_studiow =' INŻ_ST'; UPDATE Studenci SET Rok = Rok 1 WHERE Nr_albumu IN ( '111345','100678');

PL/SQL. Zaawansowane tematy PL/SQL

Podstawy języka SQL. SQL Structured Query Languagestrukturalny

Systemy GIS Tworzenie zapytań w bazach danych

I. Język manipulowania danymi - DML (Data Manipulation Language). Polecenia INSERT, UPDATE, DELETE

Bloki anonimowe w PL/SQL

Bazy danych. Dr inż. Paweł Kasprowski

strukturalny język zapytań używany do tworzenia i modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych

ORACLE (Wykład 1) aragorn.pb.bialystok.pl/~aonisko. Typy rozproszonych baz danych. Systemy klient-serwer. Klient-serwer: Przykład

Język PL/SQL. Rozdział 5. Pakiety podprogramów. Dynamiczny SQL

Widok Connections po utworzeniu połączenia. Obszar roboczy

SQL w języku PL/SQL. 2) Instrukcje języka definicji danych DDL DROP, CREATE, ALTER, GRANT, REVOKE

Materiały. Technologie baz danych. Plan wykładu Kursory. Wykład 5: Kursory jawne. Podprogramy. Kursory jawne. Kursory niejawne

Język SQL, zajęcia nr 1

Perspektywy Stosowanie perspektyw, tworzenie perspektyw prostych i złożonych, perspektywy modyfikowalne i niemodyfikowalne, perspektywy wbudowane.

Bazy danych. Bazy danych. Podstawy języka SQL. Dr inż. Paweł Kasprowski.

Bazy danych. Plan wykładu. Diagramy ER. Podstawy modeli relacyjnych. Podstawy modeli relacyjnych. Podstawy modeli relacyjnych

Oracle PL/SQL. Paweł Rajba.

Wykład 8. SQL praca z tabelami 5

3 Przygotowali: mgr inż. Barbara Łukawska, mgr inż. Maciej Lasota

Język SQL. Rozdział 3. Funkcje wierszowe

Wykład 2. SQL 1 Structured Query Lenguage

Hurtownia Świętego Mikołaja projekt bazy danych

Funkcje. Rozdział 3a Funkcje wierszowe. Funkcje znakowe (1) Funkcje wierszowe

Plan wykładu Projekt fizyczny bazy danych Wprowadzenie PL/SQL PL/SQL Cechy PL/SQL

Aspekty aktywne baz danych

Bazy danych wykład dwunasty PL/SQL, c.d. Konrad Zdanowski ( Uniwersytet Kardynała Stefana Bazy danych Wyszyńskiego, wykładwarszawa)

Pakiety podprogramów Dynamiczny SQL

Plan bazy: Kod zakładający bazę danych: DROP TABLE noclegi CASCADE; CREATE TABLE noclegi( id_noclegu SERIAL NOT NULL,

Procedury i funkcje składowane

Wykład 5. SQL praca z tabelami 2

Instrukcje SQL można podzielić na pięć kategorii, które zostały przedstawione w poniższej tabeli.

1 Projekt fizyczny 1. 3 Perspektywy słownika danych Źródła 12

Oracle11g: Wprowadzenie do SQL

Relacyjne bazy danych. Podstawy SQL

Kursory i wyjątki. (c) Instytut Informatyki Politechniki Poznańskiej 1

Blaski i cienie wyzwalaczy w relacyjnych bazach danych. Mgr inż. Andrzej Ptasznik

Procedury wyzwalane. (c) Instytut Informatyki Politechniki Poznańskiej 1

15. Funkcje i procedury składowane PL/SQL

Plan wykładu PL/SQL. PL/SQL - historia TWORZENIE APLIKACJI BAZODANOWYCH

PL/SQL. Część 1 Bloki PL/SQL. Piotr Medoń

Październik Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska. Systemy baz danych - wykład III. dr inż.

Język SQL. Rozdział 10. Perspektywy Stosowanie perspektyw, tworzenie perspektyw prostych i złożonych, perspektywy modyfikowalne i niemodyfikowalne.

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

Tworzenie widoku CREATE OR REPLACE VIEW [nazwa_widoku] AS SELECT [nazwy_kolumn] FROM [nazwa_tablicy];

Pakiety są logicznymi zbiorami obiektów takich jak podprogramy, typy, zmienne, kursory, wyjątki.

Wykład IV Modelowanie danych, projektowanie systemu informatycznego Modelowanie konceptualne implementacyjne Modelowanie pojęciowe na encjach

SQL DDL DML TECHNOLOGIE BAZ DANYCH. Wykład 5: Język DDL i DML. Małgorzata Krętowska

w PL/SQL bloki nazwane to: funkcje, procedury, pakiety, wyzwalacze

Wykład 4. SQL praca z tabelami 1

1. ELEMENTY JĘZYKA PL/SQL

Deklarowanie kursora

PL/SQL. Część 1 Oracle SQL. Piotr Medoń

CREATE DATABASE ksiegarnia_internetowa DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Plan ćwiczenia. Rozdział 16 Uwierzytelnianie i autoryzacja w bazie danych. Użytkownicy i schematy (1) Użytkownicy i schematy (2) baza danych: ZESP99

DECLARE VARIABLE zmienna1 typ danych; BEGIN

BAZA DANYCH SIECI HOTELI

Relacyjne bazy danych. Podstawy SQL

Literatura: SQL Ćwiczenia praktyczne Autor: Marcin Lis Wydawnictwo: Helion. Autor: Joanna Karwowska

Kolekcje Zbiory obiektów, rodzaje: tablica o zmiennym rozmiarze (ang. varray) (1) (2) (3) (4) (5) Rozszerzenie obiektowe w SZBD Oracle

Język SQL. Rozdział 9. Język definiowania danych DDL, cześć 1. Tworzenie relacji, typy danych, wartości domyślne atrybutów, słownik bazy danych.

Wykład V. Indeksy. Struktura indeksu składa się z rekordów o dwóch polach

Wprowadzenie do języka PL/SQL. Język PL/SQL Wprowadzenie. Struktura blokowa programu. Przykładowy program w PL/SQL. Zmienne rekordowe.

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

Bazy danych 10. SQL Widoki

Używany kiedy pełna treść instrukcji SQL jest nieznana przed uruchomieniem programu.

Deklarowanie kursora. CURSOR nazwa [ ( param1 typ1 [,param2 typ2]... ) ] [RETURN typ zwracany] IS zapytanie SQL;

Bloki anonimowe w PL/SQL

PL/SQL. Lidia Małkiewicz i Cezary Skubała

SELECT * FROM tabela WHERE warunek wybiera dane spełniające podany warunek

Programowanie MSQL. show databases; - pokazanie jakie bazy danych są dostępne na koncie

Baza danych inside. Biologiczne Aplikacje Baz Danych

050 SQL ELEMENTY ZAAWANSOWANE. Prof. dr hab. Marek Wisła

Indeksy. Indeks typu B drzewo

BAZY DANYCH wprowadzenie do języka SQL. Opracował: dr inż. Piotr Suchomski

Wprowadzenie do BD Operacje na bazie i tabelach Co poza zapytaniami? Algebra relacji. Bazy Danych i Systemy informacyjne Wykład 2.

SQL - DDL. 1 Tabele systemowe. 2 Typy danych

Wprowadzenie do projektowania i wykorzystania baz danych Relacje

P o d s t a w y j ę z y k a S Q L

Transkrypt:

Robert Chwastek Bazy danych

!" # $ % &"' w Krakowie. ( # ) * Copyright (c) Robert Chwastek, Kraków 1996. 2

+ #, 1. E...5 1.1. DEFINICJA BAZY DANYCH...5 1.2. S...6 1.3. TRANSAKCJE...6 1.4. J...7 2. TYPY DANYCH...8 2.1. SPIS TYPÓW DANYCH...8 2.2. TYP NUMERYCZNY...8 2.3. KONWERSJE TYPÓW...10 2.4. W...10 3. MODEL RELACYJNY...12 3.1. STRUKTURY DANYCH W MODELU RELACYJNYM...12 3.2. R SQL...13 3.3. S SQL...14 3.3.1. Definicje podstawowe...14 3.3.2. Rozkaz CREATE TABLE...15 3.3.3. Rozkaz DROP...16 3.3.4. Rozkaz INSERT...17 3.3.5. Rozkaz DELETE...18 3.3.6. Rozkaz CREATE SEQUENCE...19 3.3.7. Rozkaz SELECT...21 3.3.8. Rozkaz UPDATE...22 3.3.9. Rozkaz RENAME...23 3.3.10. Rozkaz ALTER TABLE...24 3.3.11. Rozkaz CREATE INDEX...25 3.3.12. Rozkaz CREATE VIEW...27 3.3.13. Rozkaz COMMIT...28 3.3.14. Rozkaz ROLLBACK...28 3.3.15. Rozkaz SAVEPOINT...28 3.3.16. Rozkaz SET TRANSACTION...29 3.4. OPERACJE RELACYJNE...30 3.4.1. Selekcja...30 3.4.2. Projekcja...31 3.4.3. Produkt...32 3.4.4....32 3.4.5....33 3.4.6. Grupowanie...34 3.4.7....35 3.5. PODZAPYTANIA...35 3.6. WIDOKI (PERSPEKTYWY)...37 3.7. TRANSAKCJE...38 3.8. NORMALIZACJA RELACJI...38 3.8.1. Cele normalizacji...38 3.8.2. Pierwsz...39 3.8.3. Definicje pomocnicze...40 3.8.4....44 3.8.5....46 3.8.6. Czwarta pos...47 3.8.7....48 3.8.8. Podsumowanie...48 4. IA...50 4.1. OPERATORY...50 4.1.1. Operatory arytmetyczne...50 4.1.2. Operatory znakowe...50 4.1.3. Operatory porównania...51 4.1.4. Operatory logiczne...52 4.1.5.!...53 3

4.2. W... 53 4.3. WARUNKI... 55 5. STANDARDOWE FUNKC... 57 5.1. FUNKCJE NUMERYCZNE... 57 5.2. FUNKCJE ZNAKOWE... 57 5.3. FUNKCJE GRUPOWE... 59 5.4. FUNKCJE KONWERSJI... 60 5.5. FUNKCJE OPERACJI NA DATACH... 61 5.6. INNE FUNKCJE... 63 5.7. FORMATY ZAPISU DANYCH... 64 5.7.1. Formaty numeryczne... 64 5.7.2. Formaty dat... 64 6. PROGRAMOWANIE PROCEDURALNE - PL/SQL... 66 6.1. WPROWADZENIE... 66 6.2. STRUKTURA BLOKU... 67 6.3. PROCEDURY I FUNKCJE... 67 6.4. KURSORY... 68 6.5. REKORDY... 70 6.6. O... 71 6.6.1. Informacje podstawowe... 71 6.6.2. "! #$... 73 6.6.3. %!&... 73 6.6.4. "! #$ '!... 74 6.7. R PL/SQL... 75 6.7.1. Rozkaz OPEN... 75 6.7.2. Rozkaz CLOSE... 76 6.7.3. Rozkaz FETCH... 76 6.7.4. Rozkaz SELECT... INTO... 77 6.7.5. Rozkaz IF... 77 6.7.6. Rozkaz LOOP... 78 6.7.7. Rozkaz EXIT... 80 6.7.8. Rozkaz GOTO... 80 7. LITERATURA... 81 4

1. 1.1. Definicja bazy danych W pewnym uproszczeniu przez - danych, a przez system bazy danych " - ) * # *. - ) / ) - - - # 0 # - #1* 2 # ) -/ rozumiany jako: #/ " #/ " # -3-4 # ) -/ -3 *. 0 1 - ) # * ( jest opis semantyki (znaczenia) danych, przechowywanych w bazie. System bazy danych ) # 01* ( - #/ modelu danych. Przez model danych rozumiemy - - / ) # # #* 5- / ) # # rzeczywistego, istotnych z punktu widzenia danego zastosowania tworzy schemat bazy danych. Baza danych jest modelem logicznie spójnym ) # celowi. W - ) 0 1 / #* 5 - ## # )* + ) - - aplikacjami* * & - - -/ * - ) # tym celu aplikacje. 6) / ) ) -, 3 ) # * - * 0#1 -* ) - ) * Schemat jest opisem struktury (formatu) przechowywanych danych oraz wzajemnych 7 * 5

1.2. danych (SZBD) jest to zestaw programów ) - * + - jest oprogramowaniem ogólnego przeznaczenia. System bazy danych - - )* 1.3. Transakcje $ - #/ 0#/ #1* $ * - ) / - )* ( # - przypadku niepowodzenia którejkolwiek z nich wycofuje instrukcje uprzednio wykonane.. # -, 6

1.4. 8 - ) / ), 0 9 " 91 ) definiowanie struktury danych przechowywanych w bazie, czyli tworzenie schematu implementacyjnego 0 6 9 " 691 ) - * 0 : 9 " :91 ) transakcjami (np. zatwierdzanie lub wycofywanie) 7 0; 91 ) - - zgodnych z podanymi warunkami 7

2. Typy danych 2.1. Spis typów danych Typ char(size) character varchar(size) date long long varchar raw(size) long raw rowid number Opis : # ) * ) / <==* ( # #/ > Synonim do char W aktualnej wersji ORACLE a jest to synonim do char, konieczne jest * ( ) - #? * Poprawne daty z zakresu 1 stycznia 4712 p.n.e. do 31 grudnia 4712 n.e. # @ "6A"BB *, CD>"8%"EFG : # ) H==!= * 6) / - * synonim do long : - #* + * I <==* (# * : - #*. # * (# szesnastkowej. J #/ *. * ) -/ - przechowywana, ale obliczana na podstawie informacji o fizycznym ) * (#/ ) -/ ROWIDTOCHAR. $ * 8 # / >*D K 10-129 do 9.99 * 10 124 * 6) - )* 2.2. Typ numeryczny $ ) - * ) / trzech sposobów: number number (precyzja) number (precyzja, skala) 8

. # - ) / >!E* + # - ) / -84 do 127. W momencie definiowania kolumny numerycznej dobrym zwyczajem jest ) # # - * 8# #/ -* 8# #/ * 8# #/ - 4 * 0>D "<1 * : ) ) * A ) - / - ) 4, -0L =1 - * 9- ) ) / * + -# M - >D - )/ * 9.87E-2 oznacza 9.87 * 10-2. N - ) AI%:9MG -* 6) * - - -, 9

Specyfikacja Typ Precyzja Skala number number 38 null number(*) number 38 null number(*, s) number 38 s number(p) number p 0 number(p,s) number p s decimal number 38 0 decimal(*) number 38 0 decimal(*, s) number 38 s decimal(p) number p 0 decimal(p, s) number p s integer number 38 0 smallint number 38 0 float number 38 null float(*) number 38 null float(b) number b null real number 63 binary (18 decimal) null double precision number 38 null 2.3. Konwersje typów ( - ) * / - - ) * / - / *.) - ) AI%:9M, Z typu Do typu char number date char - TO_NUMBER TO_DATE number TO_CHAR - TO_DATE date TO_CHAR ) - 2.4.. - / # ) - - * (#/ 0J991 # D - ) J99 ) #/ 0J991* 2 O9 / # 0 1 - # # # * O9, 10

O90:A66 D1 #/ :A66 #/ - D # :A66 #/ J99* (#/ #/ J99* * - # #, >DDD J99 J99 J99 <DDD >=DD ) 0>DDD P <DDD1Q< R >=DD* 8 ) )/ # N+ J99 N+ A$ J99* 8# ) # # *.) J99 - # ) -/ # ) J99* AI%:9M * $ :A66 R J99 +M9M:$ ) * 8 AI%:9M -* 11

3. Model relacyjny 5 - podstawowych elementów: relacyjnych struktur danych ) bazy danych # - # # 3.1. Struktury danych w modelu relacyjnym. - - nu 7 - - #* ( bazach danych relacja przedstawiana jest w postaci tabeli. Relacja jest zbiorem krotek ) #* S) - * S) - - * S) 0-1 #, 01-0 1 #/ 01 #/ - 0 1 # - 0 1. -,! " # $% & '()*)+)*,-'. /" & 01)-2))(,-' 3 4 ++2)2()()*+! '))2)2)2(*2! 5 & 112(2()2((* 6%!" /" &78 - # - * ( ) 12

- # )* - # - * ( # - - jedna jak i druga terminologia. $- ) /, zbiór encji wraz z atrybutami - 7 - - - 0-1 S) - - * ( - / " zabezpieczenie przed tym powtórzeniem jest realizowane poprzez pola kluczowe. Wiersze ) " - * ( - - " ) ) #/ #* ( - - ) /, J) - * S / / - 0) #/1* 3 - - tabeli. $ - - " - # )* J ) - * Unikaj powtarzania informacji w bazie danych (normalizacja). 3.2. QL.) - +;9 * A - # # * Rozkaz Typ Opis ALTER TABLE DDL - - - #/ CREATE INDEX DDL Tworzy indeks dla tabeli CREATE SEQUENCE DDL $ - ) - " * + ) )/ unikalnych identyfikatorów w tabelach CREATE TABLE DDL $ - przestrzeni dla danych 13

CREATE VIEW DDL - # - - innych widoków DELETE DML J - ) - DROP obiekt DDL J - - - INSERT DML Dodaje nowy wiersz (lub wiersze) do tabeli lub widoku RENAME DDL 5 - - - SELECT DML Wykonuje zapytanie. Wybiera wiersze i kolumny z jednej lub kilku tabel UPDATE DML Zmienia dane w tabeli COMMIT DML S7 ROLLBACK DML ( - punktu. SAVEPOINT DML Zaznacza punkt, do którego mozliwe jest wykonanie rozkazu ROLLBACK SET TRANSACTION DDL 5 " 0 odczytu). 3.3.! 3.3.1. Definicje podstawowe N 01 " # - # * I) - ) 0* CTG - CUG1* + 3 - ## napisanych w ten sposób aplikacji. + " ) +;9* + +;9 ORACLE a przedstawia tabela: access add all alter and any as asc audit between by char check cluster column comment compress connect create current date dba decimal default delete desc distinct drop else exclusive exists file float for from grant graphic group having identified if immediate in increment index install initial insert integer intersect into is level like lock long maxextents minus mode modify noaudit nocompress not nowait null number of offline on online option or order pctfree prior privileges public raw 14

rename resource revoke row rowid rownum rows select session set share size smallint start successful synonym sysdate table then to trigger uid union unique update user validate values varchar vargraphic view whenever where with 9- " -/ - * 9- * ( AI%:9M - ) / - * 2 - - >D ) )/ - CG - CMG*., 7E2 = 7 * 10 2 25e-03 = 25 * 10-3 AI%:9M - ) 7/ CSG - C6G* 9 CSG ) - -/ ) >D<L 0> S1 C6G ) - ) )/ >DLE=VH 0> 61*., 256K = 256 * 1024 1M = 1 * 1048576 I +;9 7 # 3.3.2. Rozkaz CREATE TABLE I :IM%$M $%9M ) - 0-1 ), # - # - - # - - I :IM%$M $%9M, CREATE TABLE [user.]table ( {column_element table_constraint} [, {column_element table_constraint} ]... ) [ PCTFREE n ] [ PCTUSED n ] [ INITTRANS n ] [ MAXTRANS n ] [ TABLESPACE tablespace ] [ STORAGE storage ] [ CLUSTER cluster (column [, column]...) ] [ AS query ] Parametry: " # - # # - - * $- ) ) / - 0%1 15

- " - -/ * ( - ) / W " # * $- / 0 1 - W " # / - - " # - ) #/ - " # - " # 0 # -/ # - 1 ) / - query - jest poprawnym zapytaniem takim samym jak zdefiniowane w rozkazie +M9M:$* 8# ) / " # * 6) ) - * 9- -/ sama jak liczba kolumn w zapytaniu.., CREATE TABLE pracownicy( nr_pracownika NUMBER NOT NULL PRIMARY KEY, imie CHAR(15) NOT NULL CHECK (imie = UPPER(imie)), nazwisko CHAR(25) NOT NULL CHECK (nazwisko = UPPER(nazwisko)), nr_wydzialu NUMBER (3) NOT NULL ); 3.3.3. Rozkaz DROP I ) - ) * A /, DROP object_type [user.]object.) ) ) poszczególnych typów obiektów: DROP CLUSTER [user.]cluster [INCLUDING TABLES] - kasowanie * ( N:9JN& $%9M+ - * 8# N:9JN& $%9M+ -/ ) - * 8 - - -* DROP [PUBLIC] DATABASE LINK link " * 8# - / ) 0%1* DROP INDEX [user.]index - kasowanie indeksu. DROP [PUBLIC] ROLLBACK SEGMENT segment - kasowanie segmentu 0-1* 6) / ) * S ) / tylko administrator bazy danych. 16

DROP SEQUENCE [user.]sequence - kasowanie sekwencji. DROP [PUBLIC] SYNONYM [user.]synonym - usuwanie synonimu. Synonim - ) / 0%1*. ) / # * DROP TABLE [user.]table " - * ( - # - )* ( - * DROP TABLESPACE tablespace [INCLUDING CONTENTS] - usuwanie - * I ) -/ 0%1* ( przypadku podania klauzuli INCLUDING CONTENTS obszar danych zostanie * 8# N:9JN& :A$M$+ - * DROP VIEW [user.]view " *. - * 3.3.4. Rozkaz INSERT I - - - ) * %- / - ) -/ # - 0%1 - / - * +, INSERT INTO [user.]table [ (column [, column]...) ] { VALUES (value [, value]...) query } Parametry: " # - - " - " - -? " #/ # * (#/ ) -/ )* 8# #/ J99 -/ # * X " +M9M:$ #/ # # # * 5 ) / AIMI 2AI 2AI UPDATE. Opis: I N+MI$ ) O%9JM+ * # 0-1 #* S # # J99 0 -/ A$ J991* 8# ) +M9M:$ O%9JM+ ) # 0 1*. 17

- # 0 - # 1* 5 ) / ) - * ( # *. -/ #/ - * Y # ) *., INSERT INTO pracownicy VALUES (50, JAN, KOWALSKI, 3); INSERT INTO ksiazki (tytul, autor, miejsce) SELECT 'Pan Tadeusz', autor_nr, miejsce_nr FROM autorzy, miejsca WHERE nazwisko = 'Mickiewicz' AND miejsce = 'lewa polka' ; 3.3.5. Rozkaz DELETE I M9M$M ) - * +, DELETE [FROM] [user.]table [alias] [WHERE condition] Parametry: " ) - " - - ) / " - ) M9M$M " / ) /* ( ) / - / * S - ) - - - # $IJM - 2%9+M* Opis: : 7 - *., Skasowanie wszystkich wierszy w tabeli pracownicy: DELETE FROM pracownicy ; + ) numerem 2: DELETE FROM ksiazki WHERE autor = 2 ; 18

3.3.6. Rozkaz CREATE SEQUENCE $ - 0 1 ) ) / - * + -/ ) - * przynajmniej uprawnienia RESOURCE w conajmniej jednej przestrzeni tabel. +, CREATE SEQUENCE [user.]sequence [INCREMENT BY n] [START WITH n] [MAXVALUE n NOMAXVALUE] [MINVALUE n NOMINVALUE] [CYCLE NOCYCLE] [CACHE n NOCACHE] [ORDER NOORDER] Parametry: " ) X " -/ -/ -- )* N:IM6M$ B " # ) -* 8# - - - " * # #/ >* ) - ) D* +$%I$ (N$' " - -/ * # # 6NO%9JM 6%ZO%9JM * J #/ MZ$O%9* 6NO%9JM " # #/ ) / * # > #/ ">D<V P >*. A6NO%9JM ) - / # * 6%ZO%9JM " # # ) / * (# # "> >D<V " > * ( A6%ZO%9JM ) - / # * :B:9M A:B:9M " # # A:B:9M ) ) 7 * ( ) - -* ( :B:9M # # 0 1 - # 0 1 cykl generacji numerów. 19

:%:'M A:%:'M " :%:'M " -# -* S A:%:'M ) #/* # :%:'M <D* (#/ :%:'M -/ ) MAXVALUE - MINVALUE. AIMI AAIMI " AIMI ) - - * S AAIMI #/* S #/ ) ) #/ 01 * 5 ) do generacji kluczy pierwotnych. Opis: + -/ ) - - - )* %- / # ) ) / +M9M:$ * + ) / * ) - -/ ) - ) - )* 8 ) ) ) ) * ) ) / - ) ) 0 ) )1*, MZ$O%9 :JIIO%9*. MZ$O%9 ) # * +, sequence.nextval X *. :JIIO%9 # * %- ) - ) :JIIO%9 # ) MZ$O%9 * +, sequence.currval X *. MZ$O%9 :JIIO%9 -/ ), +M9M:$ +M9M:$ 0 1 # # N+MI$ ) +M$ J.%$M. MZ$O%9 :JIIO%9 ) )/, podzapytaniach # N+$N:$ z klauzulami ORDER BY, GROUP BY i HAVING w rozkazie SELECT z operatorem ustawienia (UNION, INTERSECT, MINUS) 20

., CREATE SEQUENCE eseq INCREMENT BY 10 ; INSERT INTO pracownicy VALUES (eseq.nextval, Jan, Kowalski, 3) ; 3.3.7. Rozkaz SELECT I +M9M:$ ) # - - * 6) -/ ) - - 0 1 - * %- / # - - -/ # / +M9M:$ - - -/ - (DBA). +, SELECT [ALL DISTINCT] {* table.* expr [c_alias] } [, { table.* expr [c_alias] } ]... FROM [user.]table [t_alias] [, [user.]table [t_alias]]... [ WHERE condition ] [ CONNECT BY condition [START WITH condition] ] [ GROUP BY expr [. Expr]... [HAVING condition] ] [ {UNION INTERSECT MINUS} SELECT...] [ ORDER BY {expr position} [ASC DESC] [, {expr position} [ASC DESC]] ]... [ FOR UPDATE OF column [, column]... [NOWAIT] ] Parametry: %99 " # ) +M9M:$ / * N+$N:$ " # ) / * # # ) +M9M:$ - * K " ) - / pokazane. - *K " ) - / [ " ) # W " 0 1 ) ) # * ( ) - * % -/ ) miejscu zapytania. \*]- " # - ) /* 8# ) # ) 0 SELECT). 21

W " # / - - * # ) * ( - / * " / - * ( # * " - ) SELECT, a nie na nazwie. %+: M+: " # ) -/ # - 01* " ) - 2IA6* A(%N$ " # ) AI%:9M / ) / ) #/ - - )* Opis: J) - ) - # -, # - -/ ) +M9M:$ AI%:9M - 7 # - /*. +M9M:$ # *., SELECT imie, nazwisko FROM pracownicy ; SELECT tytul, autorzy.imie, autorzy.nazwisko, miejsca.miejsce FROM ksiazki, autorzy, miejsca WHERE ksiazki.autor = autorzy.autor_nr AND ksiazki.miejsce = miejsca.miejsce_nr ; 3.3.8. Rozkaz UPDATE I J.%$M ) - * ( - # - 0%1-7 J.%$M - * +, UPDATE [user.]table [alias] SET column = expr [, column = expr]... [ WHERE condition ] 22

lub UPDATE [user.]table [alias] SET (column [, column]...) = (query) [, column [, column]...) = (query) ]... [ WHERE condition ] Parametry: " # - * - " - * " ) - rozkazu. " - * - # * [ " ) " # X " +M9M:$ - AIMI B 2AI J.%$M - * " * ( / #/ $IJM - 2%9+M* ( - # Opis: S +M$ # # -/ * S ('MIM # / ) / # # * 8# ('MIM - * I J.%$M ) ('MIM - # )7 CRG # # * 8# +M$ / ) * S) #/ # # * 8# 0 +M$? R X1 J99* 5 ) / - * 8 - ) J.%$M*., UPDATE pracownicy ; 3.3.9. Rozkaz RENAME I IM%6M - - * 5 ) / # - - * 23

+, RENAME old TO new Parametry: old - aktualna nazwa tabeli, widoku lub synonimu " ) - - Opis: ( - - * 5 ) / * 5 ) -/, :IM%$M $%9M IA. $%9M IM%6M -, CREATE TABLE temporary (new_column_name) AS SELECT old_column_name FROM table ; DROP TABLE table ; RENAME temporary TO table ;., RENAME wydzialy TO jednostki ; 3.3.10. Rozkaz ALTER TABLE I ) - * (, dodaje kolumny i warunki modyfikuje definicje kolumn jak typy i warunki usuwa warunki - ) %:SJ. - * %- / - -/ # - / %9$MI - - -/ 0%1* +, ALTER TABLE [user.]table [ADD ( {column_element table_constraint} [, {column_element table_constraint}]...) ] [MODIFY (column_element [,column_element]...)] [DROP CONSTRAINT constraint]... [PCTFREE integer] [PCTUSED integer] [INITTRANS integer] [MAXTRANS integer] [STORAGE storage] [BACKUP] Parametry: \*]- " # - - /* 8# ) # ) * 24

%Q6AN2B W " - - # # # * % - W " # - * IA. " - * %:SJ. " #/ 0 1 ) -G - wykonywania rozkazu ALTER TABLE. Opis: 8# ) % - #/ ) - J99* ( ) A$ J99 wierszy. S 6AN2B ) / ) -, rozmiar typ danych NOT NULL 5 - ) lko wtedy, gdy wszystkie # J99* 6) ) A$ J99 # * 8# jest rozmiar kolumny zadeklarowanej jako NOT NULL i w klauzuli MODIFY nie poda A$ J99 A$ J99* ( - - 0+M9M:$ K 2IA6 ***1 ) / # - *., ALTER TABLE pracownicy ADD (placa NUMBER(7, 2)) ; ALTER TABLE pracownicy MODIFY (placa NUMBER(9, 2)) ; 3.3.11. Rozkaz CREATE INDEX I - - * N -# - * N ) # * N ) / # - ) NMZ danej tabeli lub administrator (DBA). +, CREATE [UNIQUE] INDEX index ON {table(column [ASC DESC][, column [ASC DESC]]...) 25

CLUSTER cluster} [INITTRANS n] [MAXTRANS n] [TABLESPACE tablespace] [STORAGE storage] [PCTFREE n] [NOSORT] Parametry: JN;JM " ) - # * ( AI%:9MG # JN;JM - - ) / * " * -/ ) - - )* - " - * column - nazwa kolumny w tabeli. %+: M+: " AI%:9M - # < * :9J+$MI " # A+AI$ " AI%:9MG ) - ) indeksu. Opis: N, * ) / ) # ) #/ # - * ) -/ ) >H * Jeden element # * ( ) -/ ) - #/ * #/ )* 8# % : # ) do wyszukiwania konkatenacji kolumn A, B, C, kolumn A i B lub tylko kolumny A. Nie - ) : - pojedynczej kolumny B lub C. 6) # - - * ) / ) - ) #/ ) #/ *., CREATE INDEX i_prac_imie ON pracownicy (imie) ; 26

3.3.12. Rozkaz CREATE VIEW I ) - - - - * J/ ) # - ) co najmniej uprawnienia SELECT lub administrator. +, CREATE VIEW [user.]view [(alias [, alias]...)] AS query [ WITH CHECK OPTION [CONSTRAINT constraint] ] Parametry: " # view - nazwa tworzonego widoku X " - - * 5 ) -/ +M9M:$ AIMI B ani FOR UPDATE. (N$' :'M:S A.$NA " ) # - * S (N$' :'M:S A.$NA ) -/ ) - * :A+$I%N$ " (N$' :'M:S A.$NA* Opis: Widok jest logicznym oknem dla jednej lub kilku tabel. W ##, widok nie przechowuje danych - jest on przeznaczony do pokazywania danych zawartych w innych tabelach. ) -/ ) +;9 ) ) - ) ) ) / gdy zapytanie na którym bazuje widok zawiera: klauzule GROUP BY, CONNECT BY lub START WITH N+$N:$ - ) # 6) tóry posiada pseudokolumny - ) J.%$M - )* ( ), - - # - - - )# " ) -/ ) - - ) - * 27

" ) / ) zmiany nazwy kolumny bez zmiany rzeczywistych danych zapisanych w tabeli. #*., CREATE VIEW bibl AS SELECT ksiazki.tytul, autorzy.imie, autorzy.nazwisko, miejsca.miejsce FROM ksiazki, autorzy, miejsca WHERE ksiazki.autor = autorzy.autor_nr AND ksiazki.miejsce = miejsca.miejsce_nr WITH CHECK OPTION CONSTRAINT chkopt ; 3.3.13. Rozkaz COMMIT +, COMMIT [WORK] Opis: I :A66N$ :A66N$ (AIS a 7 bazie danych. 3.3.14. Rozkaz ROLLBACK +, ROLLBACK [ WORK ] [TO [ SAVEPOINT ] savepoint ] Parametry: (AIS " - # %+N +%OM.AN$ " IA99%:S savepoint - nazwa punktu zaznaczonego podczas wykonywania aktualnej transakcji. Opis: I IA99%:S ) 0 klauzuli TO) lub poczatku transakcji (bez klauzuli TO).., ROLLBACK ; ROLLBACK TO SAVEPOINT SP5 ; 3.3.15. Rozkaz SAVEPOINT +, SAVEPOINT savepoint 28

Parametry: savepoint - nazwa punktu w aktualnej transakcji zaznaczanego przez wykonywany rozkaz Opis: I +%OM.AN$ ) IA99%:S * -/ * + - # - ) / *., UPDATE pracownicy SET placa_podstawowa = 2000 WHERE nazwisko = Kowalski ; SAVEPOINT Kow_plac; UPDATE pracownicy SET placa_podstawowa = 1500 WHERE nazwisko = Nowak ; SAVEPOINT Now_plac; SELECT SUM(placa_podstawowa) FROM pracownicy; ROLLBACK TO SAVEPOINT Kow_plac; UPDATE pracownicy SET placa_podstawowa = 1300 WHERE nazwisko = Nowak ; COMMIT; 3.3.16. Rozkaz SET TRANSACTION +, SET TRANSACTION { READ ONLY } Parametry: IM% A9B " / Opis: I ) - / 7* ) ) N+MI$ J.%$M - M9M$M* I +M$ $I%+%:$NA / -* 29

3.4. Operacje relacyjne A - - * (), " ) - 01 # warunki; " ) - - 0 1 " ) 01 # # 7 * 3.4.1. Selekcja Operacja ) - 01 # * A ) podzbiorem poziomym.! " # $% & '()*)+)*,-'. /" & 01)-2))(,-' 3 4 ++2)2()()*+! '))2)2)2(*2! 5 4 112(2()2((* ( +;9 ) +M9M:$ ('MIM*., SELECT * FROM osoby; spowoduje wybranie wszystkich krotek (wierszy) z relacji (tabeli) ludzie. ( - C(G C+AG 0# 1 ) /, SELECT * FROM osoby ; ( -/ )*. - -/ - # 0# " +$ - # " +A1 ) / AI / -, SELECT * FROM osoby ; 30

)7 # * 3.4.2. Projekcja. ) - # - - +M9M:$ * A ) podzbiorem pionowym.! " # $% & '()*)+)*,-'. /" & 01)-2))(,-' 3 4 ++2)2()()*+! '))2)2)2(*2! 5 4 112(2()2((* &9 : '()*)+)*,-' 01)-2))(,-' & 4 ++2)2()()*+! '))2)2)2(*2 4 112(2()2((*. ) / +M9M:$,!" #$%%& ' A -/ +M9M:$* N /. - # ) /, SELECT Pesel, Nazwisko FROM osoby 31

; Bazy danych Robert Chwastek 3.4.3. Produkt. 0 71 -* A ) - - ) ) ) * ( # ) *. 7 * / ;2 ;( / / / 5 7 0-1 ) +M9M:$*. ) /, SELECT * FROM R1, R2; Operacja znajd 7 ) -/ ) - - #* 3.4.4. A - # * ( - * 32

/ 69 2 / % 2! 2 ( ( 3<== ( * 2 / / % %! A ) / SELECT. SELECT imie, nazwisko, tytul FROM autorzy, ksiazki WHERE autorzy.nazwisko = Mickiewicz and autorzy.nr = ksiazki.autor ; 3.4.5. A # -* ( +;9 ) / 0-1 ) - * 3.4.5.1. Unia J - - 0-7 " #1* ( # #/ - - 0 1 *. ) - # 0 1, SELECT imie, nazwisko FROM pracownicy UNION SELECT imie, nazwisko FROM wlasciciele ; 3.4.5.2. Przekrój Prze 3/ - - * *.- # #/ - - bazowych..) 0* 1 # * 33

SELECT nazwisko FROM pracownicy INTERSECT SELECT nazwisko FROM wlasciciele ; 3.4.5.3. Operacj - ) *. - # niej zatrudnieni: SELECT imie, nazwisko FROM wlasciciele MINUS SELECT imie, nazwisko FROM pracownicy ; 3.4.6. Grupowanie S &IAJ. B '%ON& +M9M:$ / -/ ) - / 0 1 * A * 7 - - 0 1* Klauzu &IAJ. B ) * +-, SELECT stanowisko, avg(placa_podstawowa) FROM pracownicy GROUP BY stanowisko ; N ) #/ a grupy. ('MIM, SELECT stanowisko, avg(placa_podstawowa) FROM pracownicy WHERE stanowisko!= KIEROWCA GROUP BY stanowisko ; ) -/ )) ) * ( ) ) stanowiska: SELECT wydzial, stanowisko, avg(placa_podstawowa) FROM pracownicy GROUP BY nr_wydzialu, stanowisko ; S '%ON& # # * : # / )! DDD ) /, SELECT stanowisko, max(placa_podstawowa) FROM pracownicy 34

GROUP BY stanowisko HAVING max(placa_podstawowa) > 3000 ; 3.4.7.!"!#$ S +M9M:$ #, 1. SELECT i WHERE 2. GROUP BY 3. HAVING 4. ORDER BY 3.5. Podzapytania 5 +;9 -/ )) * ) -/ ) * *. ) / dwa rodzaje: podzapytania proste (nazywane po prostu podzapytaniem) - podzapytanie jest wykonywane przed 4 " ) * # ) ('MIM +M9M:$* 8# ) - #/ #/ ) )/ -# ('MIM -, SELECT nazwisko FROM pracownicy WHERE placa_podstawowa = (SELECT min(placa_podstawowa) FROM pracownicy) ;.) - * 8# - # ) N * - ) )/, SELECT nazwisko, nr_wydzialu FROM pracownicy WHERE placa_podstawowa IN (SELECT min(placa_podstawowa) FROM pracownicy GROUP BY nr_wydzialu) ; 35

9- # -/ operatora IN. ( / ) ) %B %99* A %B / ) * A %99 ) * + %B %99 ) # *. ) / ) '%ON&*.) # # - )!D, SELECT nr_wydzialu, avg(placa_podstawowa) FROM pracownicy GROUP BY nr_wydzialu HAVING avg(placa_podstawowa) > (SELECT avg(placa_podstawowa) FROM pracownicy WHERE nr_wydzialu = 30) ; 5 -/ )) #/ *. ) 7 ) /, ) / AIMI B 0) / 14 )) # - )) - ) * Podzapytanie skorelowane jest zapytaniem zagnie)) dla % *. #/ ) * ) -- ) #, SELECT imie, nazwisko, placa_podstawowa, nr_wydzialu FROM pracownicy pracownik WHERE placa_podstawowa > (SELECT avg(placa_podstawowa) FROM pracownicy WHERE nr_wydzialu = pracownik.nr_wydzialu) ; ( 7 7 - * 8# ) - 0 ^@1* 36

3.6. Widoki (perspektywy) ( - - - * * ) * ( * ( - - 0-1* (, - - 7 )# 5 #/ - ) /, proste ) ( +M9M:$ ) danych zawartych w widoku. Widok - 7 +;9 ) * ( ) - ) / * : ) #/ ) # - ) # 0 wszystkich systemach). ) # :IM%$M ONM(*.) - - 0- ) # 1, CREATE VIEW personalia AS SELECT imie, nazwisko FROM pracownicy ; $ ) - opisie rozkau CREATE VIEW: CREATE VIEW bibl AS SELECT ksiazki.tytul, autorzy.imie, autorzy.nazwisko, miejsca.miejsce FROM ksiazki, autorzy, miejsca WHERE ksiazki.autor = autorzy.autor_nr AND ksiazki.miejsce = miejsca.miejsce_nr ; 37

3.7. Transakcje $, :A66N$ IA99%:S*. ) - *. - * A J.%$M " - - * 5 ) -/ - - )* 8# - - - - ^@ - ^)@* I :A66N$ ) racji.. ) - )* ( J.%$M ) / :A66N$ * A - )* I IA99%:S # :A66N$* 8 ) 7 - rozkazu COMMIT lub ROLLBACK. Rozkaz SAVEPOINT pozwala na zaznaczenie i nazwanie pewnego punktu * ( - IA99%:S $A ) # 0* 1* ( IA99%:S $A # 7 )* ( IA99%:S - COMMIT powoduje skasowanie wszystkich uprzednio zaznaczonych punktów. 8 - - ) 7/ :A66N$ - IA99%:S* 8# - 7 - - / /* 6) / - - skrypt. 3.8. Normalizacja relacji 3.8.1. Cele normalizacji - )* 8 ) / ) 0 1 * 8# - 0* 1 3 0 / -/ - - 1* N ) ) # - 0* 1* (3 - * I ) / -, 38

nazwa przedmiotu, imie, nazwisko, (%)*%. - / /, +,- *!" ".%" ul. Królewska 30/3 Kraków) 8 -, # ) - S - 4 ) / redundancja danych; 0* 1 #/ #4 ) ) /4 ) / ) - * J # - * 8 ) / -,., /%" 0-" %" % (%% " 0,%%12" ulica, nr_domu, nr_mieszkania 5 "(%)*% S) ^5@ ^.@ - ^W@* $ # ) ), # ) * # 4 0* 1 # ^5@* 5-4 ) - / -/ ) - 4 - * 8 - # * - - - - * 3.8.2. I # # - * # # - #*. / - - ) - / * (#/ - ) # - - - 39

*. postaci normalnej ilustruje rysunek: >% $ >% # % $% % / % # 7 $%7 #"78 ))2 )2). - )1+ % *) )11 %#?4 1) ))( )() &"* )') $< 2) ))* )2). - )1+ % +) )') $< 21 >% $ >% # % $% % / % # 7 $%7 #"78 ))2 )2). - )1+ % *) ))2 )2). - )11 %#?4 1) ))( )() &"* )') $< 2) ))* )2). - )1+ % +) ))* )2). - )') $< 21 3.8.3. Definicje pomocnicze %- / postaci normalnej. Przed omówieniem procesu normalizacji konieczne jest jednak /, 40

Uniwersalny schemat relacji R = {A 1, A 2,..., A n _ - - * &' R = {A 1, A 2,..., A n } nazywamy zbiór atrybutów S R, który jednoznacznie identyfikuje wszystkie krotki relacji o schemacie R. Inaczej ) I / 1 i t 2 ) t 1 [S] = t 2 [S]. Kluczem S I - * ) nie istnieje K S - - I* S )* Klucz nazywamy kluczem prostym ) - - jest zbiorem jednoelementowym; w przeciwnym wypadku mamy do czynienia z %* # ) )/ nazywamy kluczami potencjalnymi* 8 0-1 # potencjalnych nazywamy ( 0 1 0 1* ^5@ - 0 N #1* ) )/ ) ) ) / #* Atrybut relacji nazywamy podstawowym ) ) relacji. Atrybut relacji nazywamy wtórnym ) ) ) * Atrybut B relacji R jest ' % - % 0 # ) ) % identyfikuje B i oznacza A 1 # # - % ) #/ - - * 5 )#/ - % # )# - #* N ) - % 0* ) ) %1 - % * ( - )# ^5@ ) /, 41

$>% #% $%% / % #7 $%7 #"78 Atrybut B jest ' % zbioru atrybutów X w schemacie R, ) Z Y i nie istnieje podzbiór X Z ) ZG Y. ) / ) )# )# * Zbiór atrybutów Y jest ' % zbioru atrybutów X w I ) Z Y i istnieje podzbiór X Z ) ZG Y. Z B 5 - - - *.- atrybutów Z jest ' % - - Z # - - 5 ) - - B - - B ) - - Z - - Z ) B - - B ) 5*. ^5@ - ^ @ ^% @ ) - ^ @ ) - ^N @ ) - ^ @ - ^ @ ^% @ ) ^N @* I# ) )/ ) ^N @ ) ^ @ 0 -/ 1 ^% @ 0) ) / * 6 ) - - B # ) - - Z I ) I dla dowolnej pary krotek t 1 i t 2 ) 1 [X] = t 2 [X], istnieje taka para krotek s 1 i s 2 ) s 1 [X] = s 2 [X] = t 1 [X] = t 2 [X] oraz s 1 [Y] = t 1 [Y] i s 1 [R-X-Y] = t 2 [R-X-Y] oraz s 2 [Y] = t 2 [Y] i s 2 [R-X-Y] = t 1 [R-X-Y]. 42

6 ) 1 i t 2 ) # - - Z - 0 1 [x] = t 2 [X]), # - - B sposób krotki s 1 i s 2 ) ) *. / ) ^S @ ^%@ ^6@ ) @8 :@ ^+ @ ^@ ^8@ ^8@ ^% @ ^ @ ^$ @ ) / -,!% $% 6%" 6%" 6%" 6%" $% $% $% $% $% $% /. /... 3% 3% 3 3 /" /" & 3< 3< ">% ">% ">% A# - Z R 01 B R 01 ) I-X-Y = 0(1*., t 1 R 0S % 8 :1 t 2 = (Kowalski, Magda, Systemy operacyjne) odpowiada para krotek s 1 = (Kowalski, Agnieszka, Systemy operacyjne) s 2 R 0S 6 8 :1 ) / ) ) ) # )# - - 0 wypadku jednoelementowego zbioru atrybutów (Dziecko) od jednoelementowego - - 0(11* 5 # )# ), - # ) zbioru atrybutów X 43

# ZBRI Z # ) B * 5 )# % funkcjonalnymi. I R 0% 1, A 2,..., A n 1-0 1 0I 1, R 2,..., R m 1 ) ) schemat R i z tego zbioru stanowi podzbiór zbioru atrybutów (A 1,..., A n ) i @ @ 6 ) I R 0% 1,..., A n 1 )#/ 0, KI\I 1,..., R n ]1 ) dekompozycja relacji r (o schemacie R) na relacje r 1,..., r n ) ) / 1,..., r m. 6) / ) # )#/ )# R <* 6 ) )#/ KI\I 1,..., R m ] )# atrybutów schematu R od klucza wtedy i tylko wtedy, gdy w dowolnej sekwencji 7 ) - I* 3.8.4. ) I ) ) - 0* ) 1 ) * 6) )/ ) ^5@ ) - ^N @ ^ @ ^% @ ^ #@ ) " 0^ @ ^N #@1* ( ) / - - ) * ( ^5@ ) /, ^ @ ^5 @ ^:#@ -, %>% $ >% # % $% % ))2 )2). / % - ))( )() &"* ))* )2). - 44

>% % $ >% ))2 ))2 ))( ))* ))* # 7 )1+ )11 )') )1+ )') #"78 *) 1) 2) +) 21 <7 # 7 )1+ )11 )') $%7 % %#?4 $< 8 / ) ^ @ ^:#@ - ^N #/@ ^5 @ ) ) 0^ @ ^N #@1* ) )/ ) - # kluczami prostymi.. relacji Zamówienia do drugiej postaci normalnej otrzymujemy )#, Dostawca na zamówieniu 45

$>% #% $%% / % Zamówione dostawy $>% #7 #"78 :# #7 $%7 3.8.5. $ # ) - ) ) ) * %- / - )# ) / )#/ *., / < / < ( )#/ - ^ @ ^% @ - ^ 46

@ ^ @* ( ^ @, ^5@ ^@ -, >% $ >% # % ))2 )2) ))( )() ))* )2) % # % )2) $% %. / % - )() &"* )*)!21 3.8.6. # I - Z B 5 - I ) Z Y Z = R i podzbiór Y jest nietrywialnie # ) Z* Dana relacja R jest w czwartej postaci normalnej wtedy i tylko wtedy, gdy jest w # )#/ - B Z - )#/ - Z* ` )/ ) - ^.@ # )# funkcjonalnej jest w trzeciej postaci normalnej, ale nie jest w czwartej postaci normalnej, ) - ^@ ^(@ ) - ^@ * ) )#/ atrybutami. 8 # )#/ * + ) # )#/ ) / - / )# * 47

( ^.@ ) /, ^@ ^(@ - / # )#/, $% 6%" 6%" $% $% $% /.. 3% 3 /" & $% 6%" 6%" $% $% & 3< ">% 3.8.7. I wtedy i tylko wtedy, )# KI\I 1,..., R m ] )#/ )# - klucza. ) # ) - - - ) - / 0 -/ 1 - ) / - - ) * ( ) / - ) * 3.8.8. Podsumowanie. ) # # - * 48

. - / - * J 7 - - * 6 - / )#/ - ) / - #/ * 49

4. " ( ) * 4.1. Operatory + +;9 * 4.1.1. Operatory arytmetyczne A nego. Jednak -/ ) %$M* + -, Operator Opis ( ) 5 #/ SELECT (X+Y)/(Y+Z)... 7* ( * +, - Operatory jednoargumentowe zachowania i zmiany znaku.... WHERE NR = -1... WHERE -PLACA < 0 *, / 6) SELECT 2*X+1... WHERE X > Y/2 +, - Dodawanie, odejmowanie SELECT 2*X+1... WHERE X > Y-Z 4.1.2. Operatory znakowe 8 nkatenacji. I - * ) / ) :'%I -/ ) ) <== * A ) - operatora konkatenacji. Operator Opis S SELECT Nazwa: ENAME... 50

4.1.3. Operatory porównania A ) )7* ( #/ 0$IJM - 2%9+M1* Operator Opis ( ) 5 #/... NOT (A=1 OR B=1) 7 = + )... WHERE PLACA = 1000 równe!=, ^=, <> + )... WHERE PLACA!= 1000 ) > ( )... WHERE PLACA > 1000 < 6 )... WHERE PLACA < 1000 >= ( - )... WHERE PLACA >= 1000 <= 6 - )... WHERE PLACA <= 1000 IN Równy dowolnemu elementowi.... WHERE ZAWOD IN Synonim do = ANY ( URZEDNIK, INFORMATYK ) NOT IN I) ) * ( 2%9+M # dowolny element zbioru jest równy NULL Synonim do!= ALL ANY. #/ ) # - * 6 -/ jednym z operatorów: =,!=, >, <, ar br* 5 $IJM # przynajmniej jeden z elementów * ALL. #/ ) # - * 6 -/ jednym z operatorów: =,!=, >, <, ar br* 5 $IJM # ) warunek. [NOT] BETWEEN... WHERE PLACA IN (SELECT PLACA FROM PRAC WHERE WYDZIAL=30)... WHERE PLACA NOT IN (SELECT PLACA FROM PRAC WHERE WYDZIAL=30)... WHERE PLACA = ANY (SELECT PLACA FROM PRAC WHERE WYDZIAL =30)... WHERE (PLACA, PREMIA) >= ALL ((14900, 300), (3000, 0)) \] - [... WHERE A BETWEEN 1 AND 9 mniejszy lub równy y. 51

x AND y [NOT] EXISTS [NOT] LIKE IS [NOT] NULL 5 $IJM # \] zwraca przynajmniej jeden wiersz. \] * 9 CcG ) 0D - 1 jest równy NULL. Litera _ * [Nie] jest równe NULL.... WHERE EXISTS (SELECT PLACA FROM PRAC WHERE WYDZIAL = 30)... WHERE STAN LIKE T%... WHERE ZAWOD IS NULL A A$ N 2%9+M 0 ('MIM ) ) 1 # / NULL. Np. rozkaz: SELECT TRUE FROM prac WHERE wydzial NOT IN (5, 15, NULL) ; ) ) wydzial NOT IN (5, 15, NULL) wydzial!= 5 AND wydzial!= 15 AND wydzial!= NULL ( # J99 #/ J99* ) - #/ J99* 4.1.4. Operatory logiczne A ) - 7 # 0 # - - 1* Operator Opis ( ) 5 #/ SELECT... WHERE x = y AND (a = b 7 OR p = q) NOT 5 ) "... WHERE NOT (zawod IS NULL) gicznego WHERE NOT (A=1) AND Logiczne i. Wynik jest równy... WHERE A = 1 AND B = 2 $IJM # # - $IJM OR Logiczne lub. Wynike jest równy... WHERE A = 1 OR B = 3 $IJM #/ 52

jednego operandu jest równa TRUE.) - % AI ) #, AND true false null true true false null false false false false null null false null OR true false null true true true true false true false null null true null null 4.1.5. Operatory zbiorowe 7 - #* Operator Opis UNION J -* `... SELECT... - UNION SELECT... * INTERSECT :#/ -*. tylko raz MINUS A- ) -* ( - * M tylko raz... SELECT... INTERSECT SELECT...... SELECT... MINUS SELECT... 4.2. " () - # - * ( - ) -/ #* ( # ) operandów. ) ), numeryczny: 2 * 2 znakowy: TO_CHAR(TRUNC(SYSDATE + 7)) 53

() ) -/ ) ) ) # *, SET Nazwisko = LOWER(Nazwisko) N / )7, - #/ +, [table.] { column ROWID } text number sequence.currval sequence.nextval NULL ROWNUM LEVEL SYSDATE UID USER., pracownicy.nazwisko %,)*3 10 SYSDATE +, : { n variable } [ :ind_variable ]., :nazwisko_pracownika:nazwisko_pracownika_indykator 4(%%5 +, function_name( [DISTINCT ALL] expr [, expr]... )., LENGTH( Kowalski ) ROUND(1234.567*82) - )7 +, (expr) +expr, -expr, PRIOR expr expr * expr, expr / expr expr + expr, expr - expr, expr expr., ( Kowalski: Nauczyciel ) LENGTH( Nowak ) * 57 SQRT(144) + 72 )7 +, (expr [, expr],...) 54

., ( Kowalski, Nowak, Burzynski ) (10, 20, 40) (LENGTH( Kowalski ) * 5, -SQRT(144) + 77, 59) () ), # +M9M:$ jako warunek w klauzulach WHERE i HAVING w klauzulach CONNECT BY, START WITH, ORDER BY klauzuli VALUE w rozkazie INSERT w klauzuli SET rozkazu UPDATE 4.3. Warunki ( - )7 * ( - # $IJM - 2%9+M* ( / ), ) - <expr> <comparison operator> <expr> <expr> <comparison operator> <query> <expr-list> <equal-or-not> <expr-list> <expr-list> <equal-or-not> <query> porównanie z dowolnym lub ze wszystkimi elementami listy lub zapytania <expr> <comparison> { ANY ALL } ( <expr> [, <expr]...) <expr> <comparison> { ANY ALL } <query> <expr-list> <equal-or-not> { ANY ALL } ( <expr-list> [, <expr_list>]...) <expr-list> <equal-or-not> { ANY ALL } <query> )# - <expr> [NOT] IN ( <expr> [, <expr>]... ) <expr> [NOT] IN <query> <expr-list> [NOT] IN ( <expr-list> [, <expr-list>]... ) <expr-list> [NOT] IN <query> )# # <expr> [NOT] BETWEEN <expr> AND <expr> #/ J99 <expr> IS [NOT] NULL 55

EXISTS <query> kombinacja innych warunków (podana zgodnie z priorytetami) ( <condition> ) NOT <condition> <condition> AND <conditin> <condition> OR <condition>., Nazwisko = Kowalski pracownicy.wydzial = Wydzialy.Wydzial Data_urodzenia > 01-JAN-67 Zawod IN ( Dyrektor, Urzednik, Informatyk ) Placa BETWEEN 500 AND 1500 56

5. #! 5.1. Funkcje numeryczne Przeznaczenie ABS(n) 5 #/ - - ABS(-15) Wynik: 15 CEIL(n) 5 - - CEIL(15.7) Wynik: 16 FLOOR(n) 5 - - FLOOR(15.7) Wynik: 15 MOD(m, n) 5 - MOD(7, 5) Wynik: 2 POWER(m, n) 5 - * 9- -/ 4 -* POWER(2, 3) Wynik: 8 ROUND(n[, m]) SIGN(n) 5 - * 8 D* 9- ) -/ - 0 odpowiedniej liczby cyfr przed przecinkiem) 5 D # D "> # D > # od 0 SQRT(n) Zwraca pierwiastek kwadratowy liczby n. 8# ad - TRUNC(m[, n]) 5 - * 8# D* 8# - * ROUND(16.167, 1) Wynik: 16.2 ROUND(16, 167, -1) Wynik: 20 SIGN(-15) Wynik: -1 SQRT(25) Wynik: 5 TRUNC(15.79, 1) Wynik: 15.7 TRUNC(15.79, -1) Wynik: 10 5.2. Funkcje znakowe Przeznaczenie CHR(n) Zwraca znak o podanym kodzie CHR(65) Wynik: A 57

INITCAP(string) LOWER(string) LPAD(string1, n [, string2]) LTRIM(string [, zbiór]) REPLACE(string, search [, replace]) RPAD(string1, n [, string2]) RTRIM(string [, zbiór]) SOUNDEX(string) SUBSTR(string, m [, n]) 5 ) ) * Zamienia wszystkie litery w podanym * 5 > # <* 8# < * 8# # > zwracane jest n pierwszych znaków z tekstu string1. Usuwa litery z tekstu string od lewej ) ) -* 8# - pusty. 5 ) replace. 5 > # <* 8# < * 8# # > zwracane jest n pierwszych znaków z tekstu string1. 5 > -* 8# - 5 >* 2 +AJMZ ) -/ ) ) - wymawianych tak samo. 5 # * 8# 58 INITCAP( PAN JAN NOWAK ) Wynik: Pan Jan Nowak LOWER( PAN JAN NOWAK ) Wynik: pan jan nowak LPAD( Ala ma, kota*, 17) Wynik: kota*kota*ala ma LTRIM( xxxxxxostatn G C[G1 Wynik: ^Z[[A @ REPLACE( Jack & Jue, J, Bl ) Wynik: Black & Blue RPAD( Ala ma, 17, kota* ) Wynik: Ala ma kota*kota* RTRIM( Ostatnie [[Z[[[G C[G1 Wynik: ^A [[Z@ SELECT nazwisko FROM bibl WHERE SOUNDEX (nazwisko) = SOUNDEX ('Mickiewicz'); SUBSTR( ABCDE,2, 3) Wynik:

TRANSLATE( string, from, to) UPPER(string) ASCII(string) INSTR(string1, string2 [, n [, m]]) LENGTH(string) *. 1. 5 wszystkich znaków from na znak to. 5 ) * BCD TRANSLATE( HELLO! THERE!,!, - ) Wynik: HELLO- THERE- UPPER( Jan Nowak ) Wynik: JAN NOWAK ASCII( A ) Wynik: 65 INSTR( MISSISSIPPI, S, 5, 2) Wynik: 7 Zwraca kod ASCII pierwszej litery w 5 " < > # * 8) #/ >* 8# #/ >* 5 #/ * LENGTH( Nowak ) Wynik: 5 5.3. Funkcje grupowe 2 #* # * S &IAJ. B +M9M:$ ) / * S N+$N:$ - # 0 pomijane). Klauzula ALL powoduje wybranie wszystkich wierszy wynikowych do - * ( # J99 :AJ$0K1* () - -/ :'%I J6MI - %$M* Przeznaczenie AVG( [DISTINCT ALL] num) 5 #/ # # SELECT AVG(placa) Srednia FROM pracownicy COUNT( [DISTINCT ALL] expr) 5 - których expr nie jest równe SELECT COUNT(nazwisko) Liczba FROM pracownicy COUNT(*) NULL 5 - - 59 SELECT COUNT(*) Wszystko FROM pracownicy

MAX( [DISTINCT ALL] expr) MIN( [DISTINCT ALL] expr) STDDEV( [DISTINCT ALL] num) SUM( [DISTINCT ALL] num) VARIANCE( [DISTINCT ALL] num) NULL 5 #/ ) 5 #/ ) Zwraca odchylenie # # J99* 5 # * 5 # # NULL SELECT MAX(Placa) Max FROM pracownicy SELECT MIN(Placa) Min FROM pracownicy SELECT STDDEV(Placa) Odchylenie FROM pracownicy SELECT SUM(Placa) Koszty osobowe FROM pracownicy SELECT VARIANCE(Placa) Wariancja FROM pracownicy 5.4. Funkcje konwersji 2 ) # #/ * A, typtotyp. Pierwszy typ jest typem, z którego wykonywana jest konwersja, drugi jest typem wynikowym. Przeznaczenie ( znaków na ROWID CHARTOROWID (string) CONVERT(string [,dest_char_set [,source_char_set ] ]) HEXTORAW (string) ROWTOHEX(raw) ( ) implementacjami zestawu znaków. Zestawem # J+V%+:NN* S #/ - ) #/ I%(. #/ cyfry szesnastkowe liczbie. 60 SELECT nazwisko FROM pracownicy WHERE ROWID = CHARTOROWID ( 0000000F.0003.0002 ) SELECT CONVERT ( New WORD, US7ASCII, WE8HP ) Conversion FROM DUAL INSERT INTO GRAPHICS (RAW_COLUMN) SELECT HEXTORAW ( 7D ) FROM DUAL SELECT RAWTOHEX (RAW_COLUMN) Graphics FROM GRAPHICS ROWIDTOCHAR. SELECT ROWID FROM

TO_CHAR(n [, fmt]) (konwersja numeryczna) TO_CHAR(d [, fmt]) (konwersja daty) TO_DATE(string [, fmt]) wiersza na tekst. Wynik #/ 18 znaków. S #/ ) * 8# #/ - / * S ) *. * J) # -/ podanego tekstu. Do ) - #/ # DD-MON-YY TO_NUMBER (string). - - GRAPHICS WHERE ROWIDTOCHAR(ROWID) LIKE %F38% SELECT TO_CHAR(17145, $099,999 ) Char FROM DUAL SELECT TO_CHAR(HIREDATE, Month DD, YYYY ) New date format FROM EMP WHERE ENAME = SMITH INSERT INTO BONUS (BONUS_DATE) SELECT TO_DATE ( January 15, 1989, Month dd, YYYY ) FROM DUAL UPDATE EMP SET SAL = SAL + TO_NUMBER( SUBSTR( $100 raise', 2, 3)) WHERE ENAME = 'BLAKE 5.5. Funkcje operacji na datach Przeznaczenie 5 - * 9- ) -/ ujemna ADD_MONTHS (date, n) LAST_DAY(date) 5-61 SELECT ADD_MONTHS (HIREDATE, 12) Next year FROM EMP WHERE ENAME = SMITH SELECT LAST_DAY (SYSDATE) Last

MONTHS_BETWEE N (date1, date2) NEW_TIME(date, a, b) NEXT_DAY(date, string) ROUND(date [, fmt]) SYSDATE podanej dacie. FROM DUAL 5 - > <* ( ) -/ - * :#/ # 31 dni. 5 - # *. - ) -/ z: AST, ADT - Atlantic Standard or Daylight Time BST, BDT - Bering Standard or Daylight Time CST, CDT - Central Standard or Daylight Time EST, EDT - Eastern Standard or Daylight Time GMT - Greenwich Mean Time HST, HDT- Alaska-Hawaii Standard or Daylight Time MST, MDT - Mountain Standard or Daylight Time NST - Newfoundland Standard Time PST, PDT - Pacific Standard or Daylight Time YST, YDT - Yukon Standard or Daylight Time 5 tygodnia podanego w string, 3 ) *. -/ * 5 * # - ) 7* 5 * Nie wymaga podania argumentów. SELECT MONTHS_BETWEEN ( 02-feb-86, 01-jan-86 )) Months FROM DUAL SELECT TO_CHAR( NEW_TIME(TO_DATE( 17:47, hh24:mi ), PST, GMT ), hh24:mi ) GREENWICH TIME FROM DUAL SELECT NEXT_DAY( 17-MAR-89, TUESDAY ) NEXT DAY FROM DUAL SELECT ROUND ( TO_DATE( 27-OCT-88 ), YEAR ) FIRST OF THE YEAR FROM DUAL SELECT SYSDATE FROM DUAL 62

TRUNC(date [, fmt]) 5 - jednostki podanej w fmt. # 7 * usuwana jest informacja o czasie. SELECT TRUNC( TO_DATE( 28-OCT-88, YEAR ) First Of The Year FROM DUAL ( IAJ $IJ: ) )/ - -, CC, SCC wiek SYYY, YYYY, YEAR, 0 ) >*DV1 SYEAR, YYY, YY, Y Q 0 >H" 1 MONTH, MON, MM 0 >H1 WW 7 W 7 DDD, DD, J 7 DAY, DY, D - ) HH, HH12, HH24 godzina MI minuta 5.6. Inne funkcje Przeznaczenie 5 #* ( ) konwertowane do typu ) wykonaniem porównania. GREATEST(expr [, expr]...) LEAST(expr [, expr]...) NVL (expr1, expr2) 5 #* ( ) konwertowane do typu ) wykonaniem porównania. 8# [> J99 zwraca expr2, w przeciwnym wypadku zwraca expr1. SELECT GREATEST ( Harry, Harriot, Harold ) GREATEST FROM DUAL SELECT LEAST ( Harry, Harriot, Harold ) LEAST FROM DUAL SELECT ENAME NVL(TO_CHAR(COMM), NOT APPLICABLE ) COMMISION FROM EMP WHERE DEPTNO = 30 63

UID Zwraca unikalny identyfikator ) * 64 SELECT USER, UID FROM DUAL USER 5 ) SELECT USER, UID FROM DUAL 5.7. Formaty zapisu danych 2 ), - # 4 ) # * 2 ) $AW:'%I $AW%$M* 5.7.1. Formaty numeryczne 2 ) $AW:'%I # #/ * J) - * 8 #/ ) #/ CKG*.) - ) / numerycznego: Element Opis 9 9999 9- CFG # #/ # 0 0999. $ $9999. #/ CTG B B9999 (# 0 1 MI 9999MI (# C"C # PR 9999PR (# #/ CaG >, (przecinek) 9,999 (#. (kropka) 99.99 (# V 999V99 6) #/ >D n - po V E 9.999EEEE (# - 0 / M1 DATE DATE Dla dat przechowywanych w postaci numerycznej. (# C66QQBBG 5.7.2. Formaty dat 2 ) $AW:'%I # * 6 -/ ) ) $AW%$M # * Format standardowy, to DD-MON-YY.

Elementy formatu dat przedstawia tabela: Element Opis SCC lub CC (4 C+G C"C YYYY lub SYYYY : C+G - YYY, YY lub Y Ostatnie 3, 2 lub 1 cyfra roku Y,YYY Rok z przecinkiem na podanej pozycji SYEAR lub YEAR Rok przeliterowany. S powoduje poprzedzenie daty przed C"C BC lub AD 5 :Q% 0 Q 1 B.C. lub A.D Znak BC/AD z kropkami Q S 0> <! - L1 MM 6 0D>"><1 MONTH F MON $ WW $7 0>"=<1 07 i trwa 7 dni) W $7 0>"=1 07 V 1 DDD 7 0>"!HH1 DD 7 0>"!>1 D 7 0>"V1 DAY F DY Trzyliterowy skrót nazwy dnia AM lub PM (3 A.M. lub P.M. (3 HH lub HH12 Godzina (1-12) HH24 Godzina (1-24) MI Minuta (0-59) SS Sekunda (0-59) SSSS + 0D"EH!FF1 /., Znaki przestankowe umieszczane w wyniku... : # ) )/, 26 " ^2 6@ Q liczb zerami; $' " # - * L TH dla liczby 4; +. " ) +.$' - $'+. " +. $'* 65

6. Programowanie proceduralne - PL/SQL 6.1. Wprowadzenie I +;9 - # # - * A +;9.9Q+;9* PL/SQL pozwala wykorz/ +;9* ( 0%9$MI :IM%$M IM%6M1 niektóre rozkazy kontroli danych jak CONNECT, GRANT i REVOKE. S.9Q+;9 +;9 z 7 * 6) +;9 +;9 0* 1 * S).9Q+;9 7 #* PL/SQL pozwala na definiowa * 5 ) 7-7 3 * 8 -/ )* S) * $ +;9G* 5 *, premia NUMBER(7, 2); (#/ ^,R@ *, podatek := cena * stopa; ) #/ # ) +M9M:$ - 2M$:' #, SELECT placa INTO placa_aktualna FROM pracownicy WHERE nazwisko = Nowak ;.9Q+;9 pola. N ) #/ * - ) :A+$%$ # *, stopa_premii CONSTANT NUMBER(3, 2) := 0.10; ( - -* 8 0 1* 6) ) c$b.m * * 5 / - 0 ) )/ ) - 1, tytul books.tytul%type 6) ) - * ( ) )/ cia($b.m* 66

(.9Q+;9 ) / 7, R UR a b br ar* 6 / ), 0 1* 6.2. Struktura bloku S.9Q+;9 - *, DECLARE deklaracje BEGIN rozkazy wykonywalne EXCEPTION - END; S) - ) / - * - -/ ))* (.9Q+;9-0* - 1* ) - * 6) / ) - * A- - ) * 5 - # - / * - - * N - - - - 0-1* N - / - ) - 7 - * - - ) ) - * - - )) ) - - * 6.3. Procedury i funkcje PL/SQL w wersji 2.0 pozwala na definiowanie funkcji i procedur. +, PROCEDURE name [ (parameter [, parameter]... ) ] IS [local declarations] BEGIN executable statements [EXCEPTION exception handlers] END [name]; +, var_name [IN OUT IN OUT] datatype [{ := DEFAULT } value] 67

A# ) / 7 * ) * N$0=1*. # " *.IA:MJIM 7 - # * *. - - * : N+ 7 M 0 ) / 1* :#/ 0 N+ M&N1 - * ( ) M:9%IM* :#/ 0 M&N MZ:M.$NA - M1.9Q+;9* ( # / * -, PROCEDURE zwieksz (prac_id INTEGER, kwota REAL) IS placa_aktualna REAL; BEGIN UPDATE pracownicy SET placa_podstawowa = placa_podstawowa + kwota WHERE prac_id = id_pracownika; END zwieksz; 5 - #* ) IM$JI* FUNCTION name [ (argument [, argument]... ) ] RETURN datatype IS [local declarations] BEGIN executable statements [EXCEPTION exception handlers] END [name]; ( / IM$JI* I IM$JI 7 * ( / IM$JI -/ )* ( ) / * 8# 7 IM$JI.9Q+;9 * ( IM$JI ) / ) )* 6.4. Kursory W celu wykonania rozkazu SQL system tworzy pewien obszar roboczy nazywany * ( *.9Q+;9 / 7 / *.9Q+;9 ) dwóch typów kursorów: 68

" ) ) - / 7 / 0# 2AI14 ".9Q+;9 operacji. 8# ) - ) * S # -.9Q+;9 * +-, DECLARE 6(%7%" FROM pracownicy (89:::'... BEGIN... + * ) / A.M sposób: OPEN prac_kursor; ( ) 2M$:'* S) 2M$:' * I 2M$:' ) -/ ) -, FETCH prac_kursor INTO prac_nazw, prac_wydz;. 7 -* :9A+M *, CLOSE prac_kursor; S) - # * - CcG -# * 5 -, ca$2aj " $IJM # 2M$:' 7 powodu braku wierszy c2aj " $IJM # 2M$:' 7 %ROWCOUNT - liczba wierszy w kursorze (po otwarciu kursora) cn+a.m " $IJM # - ) - rsora: LOOP FETCH prac_kursor INTO prac_nazw, prac_wydz; IF prac_kursor%rowcount > 10 THEN ;;,5<:... EXIT WHEN prac_kursor%notfound;... END LOOP; 69

6.5. Rekordy (.9Q+;9 ) - * S) * I ) # # - *.9Q+;9 / wierszom w tabeli, widoku lub kursorze, nie pozwala jednak na definiowanie typów poszczególnych pól. #/ * 8# - ) - %ROWTYPE: DECLARE CURSOR prac_kursor IS SELECT nazwisko, wydzial, data_zatrudnienia FROM pracownicy; prac_rek prac_kursor%rowtype... FETCH prac_kursor INTO prac_rek; Rekor ) -/ ) - -, nazwa_rekordu nazwa_tabeli%rowtype; I, DECLARE prac_rek pracownicy%rowtype;... BEGIN... END; ), nazwa_rekordu.nazwa_pola; %- / 0 ) # W1 ) /, suma := suma + prac_rek.placa; 6) # - #* ) / ) # # - *. # ) / C,RG -, %=(%!4(!>! 5' J), prac_rek.nazwisko := UPPER(prac_rek.nazwisko);. # ) e jest na dwa sposoby: # 0 - / - - 4 70

# +M9M:$ *** N$A - 2M$:' *** N$A J), DECLARE prac_rek1 pracownicy%rowtype; prac_rek2 pracownicy%rowtype; BEGIN SELECT nazwisko, imie, wydzial, placa_podstawowa INTO prac_rek1 FROM pracownicy WHERE wydzial = 30; prac_rek2 := prac_rek1;... END;.9Q+;9 2AI * +, DECLARE CURSOR prac_kursor IS SELECT nazwisko, imie, wydzial, placa_podstawowa FROM pracownicy; BEGIN FOR pracownik IN prac_kursor LOOP suma := suma + pracownik.placa_podstawowa;... END LOOP; Niejawnie deklarowanym rekordem jest tu zmienna o nazwie pracownik. Zmienna ta jest - nazwa_kursora%rowtype. 6.6. $% 6.6.1. Informacje podstawowe ) * (# ) /, - - # * ) ) - ) / - * ( - ^. @ 7 * ( 0:PP 8?.9Q+;91 # - -* 8 - - / - / * ( -* ( 0 1 )*. -/, ^A @ ^? - @* (.9Q+;9 ) ) / # -.9Q+;9* 71

. ) ^. ) @ - / ) - * & - 01 * - 0-1* ( * ( ) -/ I%N+M* ( - 7 - - - * 8# - *. ^ @ 05MIAWNONM1 - - 3 :Q5, DECLARE cz_wsk NUMBER(3,1); BEGIN... SELECT cena / zysk FROM akcje?@';;0%5 %2,) -- ZERO_DIVIDE INSERT INTO informacje (nazwa, c_z) VALUES ( ABC, cz_wsk); COMMIT EXCEPTION WHEN ZERO_DIVIDE THEN INSERT INTO informacje (nazwa, c_z) VALUES ( ABC, NULL); COMMIT;... WHEN OTHERS THEN ROLLBACK; END;. * 5 - - - ) * ( # -/ # ), BEGIN SELECT... ;;%%!&-A& BC SELECT... ;;%%!&-A& BC SELECT... ;;%%!&-A& BC END; 72

. - - - #/ ) * $ - ) # /, BEGIN SELECT... SELECT... SELECT... EXCEPTION WHEN NO_DATA_FOUND THEN ===D;%&* B&-3A& BC END; ( #/ * 5 ) ) - -)* 8# - - ) - - * 6.6.2. *' $.9Q+;9 - * ( # * (- ), :JI+AIW%9IM%BWA.M " - ) otwartego; J.WO%9WAWNMZ " - N+MI$ - J.%$M - w indeksie zadeklarowanym jako UNIQUE; NO%9NW:JI+AI " - kursora (np. nie otwartego); NO%9NWJ6MI " - numerycznego z tekstu, który nie reprezentuje liczby; AW%$%W2AJ " +M9M:$ / ) 0* +M9M:$ *** N$A14 +$AI%&MWMIIAI " - - # 4 $AAW6%BWIA(+ " +M9M:$ ) 0* +M9M:$ *** N$A14 O%9JMWMIIAI " # lub pola; ZERO_DIVIDE - próba dzielenia przez zero; 6.6.3. ( %- -)/ 0^/@1 - * # -.9Q+;9 MZ:M.$NA 7 - * S) 73

- ('M $'M # -* 2-7 - ) - * A A$'MI+ 0 1 / - 0* #1* A #/ MZ:M.$NA, EXCEPTION WHEN... THEN ;;%&*,) WHEN... THEN ;;%&*,) WHEN... THEN ;;%&*,) WHEN OTHERS THEN ;;%&*(%% B,)3 END; 8# - ) ) / ('M AI, WHEN over_limit OR under_limit OR VALUE_ERROR THEN... ) )/ A$'MI+ #* + A$'MI+ / * ) / ) ) ) -/ - - * ( - * - - * 6.6.4. *' % 8.9Q+;9 ) *( -/ # I%N+M* ( - ) ) MZ:M.$NA*, DECLARE overflow EXCEPTION; result NUMBER(5); BEGIN... END; ) / ).9Q+;9-0 7 1 # * ( ) ) # * ( ) -/ ) ) rozkazach SQL. 74

) - * 6) / ) - * Jak podano w# * ( ) -/ * +) I%N+M* J), DECLARE brak_czesci EXCEPTION; liczba_czesci NUMBER(4); BEGIN... IF liczba_czesci < 1 THEN RAISE brak_czesci; END IF;... EXCEPTION WHEN brak_czesci THEN ;;%&*&-A&-1C END; 6) ) 0 I%N+M1, RAISE INVALID_NUMBER; : #/ - - *. ) -/ - )) - - * ( ) ) I%N+M - * ) / ) - - - #*.- # - * 6.7.!&! 6.7.1. Rozkaz OPEN Rozkaz OPEN wykonuje zapytanie skojarzone z jawnie zadeklarowanym kursorem - - - * S ) * +, OPEN cursor_name [(input_parameter [, input_parameter]... )] ; Parametry: cursor_name - nazwa kursora uprzednio zadeklarowanego, który nie jest aktualnie otwarty. W " ).9Q+;9 * 8 # ) 0# klauzuli WHERE). 75

. A.M -/ ) #/ * N #/ A.M -/ # *. A.M ) -/ celu pobrania ich z kursora.. 0 A.M1 0 1 ) -/ -, ( #/ ) A.M * ( -/ # ) ) -/ CRbG* +- ) - ) #, DECLARE CURSOR prac_kur(nazw CHAR, wydz NUMBER) IS... BEGIN OPEN prac_kur( Kowalski, 10);... OPEN prac_kur(wydz => 15, nazw => Nowak ); END; 6) )/ # ) / ) / * 6.7.2. Rozkaz CLOSE I :9A+M ) * S) / * I :9A+M - - * +, CLOSE cursor_name ; Parametry: cursor_name - nazwa aktualnie otwartego kursora. 6.7.3. Rozkaz FETCH I 2M$:' - 0 +M9M:$ 1* A * 5 # kolumn w aktualnym wierszu. +, FETCH cursor_name INTO { record_name variable_name [, variable_name]... } ; Parametry: 76

cursor_name - nazwa aktualnie otwartego kursora.?- W " * ( # -/ * ) / * ( -/ - * W " - 0 ) - %ROWTYPE)..,... OPEN prac_kursor;... LOOP FETCH prac_kursor INTO prac_rek; EXIT WHEN prac_kursor%notfound;... END LOOP; 6.7.4. Rozkaz SELECT... INTO Rozkaz SELECT... INTO odczytuje informacje z bazy danych i zapisuje je do * (.9Q+;9 0 +;91 +M9M:$ N$A* %- - +M9M:$ 0 ) / / 1* + +M9M:$ N$A, SELECT select_list_item [, select_list_item]... INTO { record_name variable_name [, variable_name]... } rest_of_select_statement ; Parametry: Zobacz opis rozkazu FETCH.., SELECT nazwisko, placa*12 INTO pnazw, plac_sum FROM pracownicy WHERE pracownik_nr = 12345; 6.7.5. Rozkaz IF Rozkaz IF pozwala na warunkowe wykonywanie rozkazów. +, IF plsql_condition THEN seq_of_statements [ELSEIF plsql_condition THEN seq_of_statements]... [ELSE seq_of_statements] END IF; Parametry: X W " 0) - # 1 77

XWW " -/ 0-3 1 Opis: I N2 )/ - 0-1* 8# $'M ) M9+MN2 M9+M - M N2 - ) M N2* ( M9+MN2* 8# $'M N2 7* 8# ) M9+MN2* 8# ) M9+M 0# 1* ( - J99 *., IF liczba_czesci < 20 THEN ilosc_zamawianych := 50; ELSEIF liczba_czesci < 30 THEN ilosc_zamawianych := 20; ELSE ilosc_zamawianych := 5; END IF; INSERT INTO zamowienia VALUES(typ_czesci, ilosc_zamawianych); 6.7.6. Rozkaz LOOP I 9AA. ).9*Q+;9*, ('N9M 2AI 2AI +, [<<label_name>>] [ { WHILE plsql_condition } { FOR {numeric_loop_param cursor_loop_param } } ] LOOP seq_of_statements END LOOP [ label_name ] ; + W W, index IN [REVERSE] integer_expr.. integer_expr + W W, record_name IN { cursor_name [(parameter [, parameter]...)] ( select_statement ) } 78

Parametry: - W " * 6) ) MZN$ # / #*. ) #, label_name.index XWW " - X W ".9*Q+;9* ( ('N9M - ) * A #/ $IJM* ( * [ " 2AI* # * W[ " ) - * () - # 2AI* IMOMI+M " / [ 0 1* W " * ( # 2AI * " 0# parametrami). W " )*.9*Q+;9-0 1* Opis: N - ) * $ 7 MZN$*., <<loop1>> LOOP... IF (x > 10) THEN EXIT loop1;... END LOOP loop1;. ('N9M / * ( - ) * ( ) / *., WHILE x < 10 LOOP... x := x - y;... END LOOP;. 2AI / # #/ * ) * N ) -/ - *., FOR i IN 1.. n LOOP silnia := silnia * n; 79

END LOOP;. 2AI ) / ) 0-1* : ) *., DECLARE CURSOR prac_kursor IS select * FROM pracownicy; prac_rek prac_kursor%rowtype; BEGIN... FOR prac_rek IN prac_kursor LOOP suma := suma + prac_rek.placa_podstawowa; END LOOP;... END; 6.7.7. Rozkaz EXIT I MZN$ ) # * I, - * +, EXIT [label_name] [WHEN plsql_condition] ; Parametry: - W " / #* 8# MZN$ # - )) wykonywanej. X W " ) MZN$ * 6 -/.9*Q+;9* (# - #/ $IJM* 6.7.8. Rozkaz GOTO I &A$A ) hmiastowego przekazania sterowania od rozkazu * +, << label_name >> + &A$A, GOTO label_name ; Opis: I &A$A ) - - - - * 5 - ) - - * ) ) * 8# &A$A ) 2AI automatycznie. 80

7. Literatura 1. Wojciech Cellary, Zbyszko Królikowski Wprowadzenie do projektowania baz danych dbase III, Wydawnictwa Naukowo -Techniczne, Warszawa 1988 2. ORACLE SQL Language Reference Manual 3. ORACLE PL/SQL User s Guide and Reference 4. ORACLE SQL*Plus User s Guide and Reference 81