Algebra relacyjna - operator(selekcja, rzut, złączenia) bierze jedną lub więcej relacji jako argument i produkuje relację wynikową
ALIAS-może mieć postać prostego identyfikatora(napis z liter, liczb, znaków, bez spacji) lub ograniczonego identyfikatora, czyli napisu w „”, może być spacja. Przy wypisywaniu wyników tytuły kolumn są aliasami, mogą występować w ORDER BY, a nie mogą w WHERE, GROUP BY, HAVING
W przypadku gdy podzapytanie wyznacza dokładnie jedna krotkę stosujemy tradycyjne operatory =,<,>, gdy podzapytanie wyznacza więcej niż 1 krotkę stasujemy operator IN, a także nowe operatory ANY, ALL wraz z operatorami porównania.
Operator ANY powoduje porównanie pojedynczej wartości (umieszczonej po jego lewej stronie) z każdą wartością wyznaczoną przez podzapytanie. Warunek selekcji zapytania zew. jest spełniony jeśli lista wartości wyznaczonych przez podzapytanie zawiera choć jeden element spełniający ten warunek.
Operator ALL powoduje porównanie pojedynczej wartości z każdą wartością wyznaczoną przez podzapytanie. Warunek selekcji zapytania zew. jest spełniony jeśli wszystkie wartości listy spełniają ten warunek.
ARCHITEKTURA systemu zarządzania bazą danych
Współczesne SZBD składa się z 3 części: jądra, interfejsu zestawu narzędzi
Funkcje jądra określają kategorie działań:
--organizacja plików
--mechanizmy dostępu
--zarządzanie transakcjami
--zarządzanie słownikami
--zarządzanie zapytaniami
--sporządzanie kopii zapasowych
Dostęp do jądra uzyskuje się za pomocą standardu SQL. Różne funkcje SQL są zawarte w narzędzia:
--SQL*DBA zawiera funkcje potrzebne administratorowi bazy danych do tworzenia, utrzymywania, uruchamiania bazy danych
--SQL*PLUS jest interakcyjnym interpreterem SQL używanym głównie do tworzenia i testowania instrukcji
--ORACLE Forms narzędzie do tworzenia aplikacji opartych na formularzach
--ORACLE Reports jest pakietem do generowania złożonych raportów.
Szczególnym, najczęściej stosowanym indeksem jest indeks o strukturze B-drzewa. U podstaw jego konstrukcji leży spostrzeżenie, że ponieważ każdy indeks jest plikiem więc może on też mieć swój indeks, który może mieć swój indeks itd. Uzyskuje się wtedy indeks o strukturze hierarchicznej w postaci drzewa.
W Oracle indeksy są implementowane za pomocą tzw. równoważnych B-drzew będących rozszerzeniem B-drzew. Gwarantuje to te same czasy dostępu do wszystkich krotek relacji bez względu na ich umiejscowienie. Indeks może zostać założony przez właściciela relacji oraz użytkowników, którym nadano przywilej INDEX do relacji.
CHECK ->ograniczenia
DBWR - (DataBase Wrier Process)
Dla zapewnienia wydajnego i równomiernego operowania na danych, Oracle nie zezwala procesowi użytkownika na bezpośrednie modyfikowanie bloku danych na dysku. Bloki, które muszą być zmodyfikowane lub te, do których ustawione są dane, są najpierw przenoszone do wspólnego banku buforów zw. Cache buforów. Bloki te są następnie zapisywane partiami na dysk przez proste tło DBWR. DBWR jest jedynym procesem, który ma prawa zapisu do pliku danych ORACLE. Fizyczny zapis danych odbywa się jeszcze w przypadkach:
-SGA, braku wolnych buforów do bieżącej pracy z bazą.
-upłynięcia okresowego czas zapisu danych.
-wykonywania się w bazie CHECPOINT, (punkt kontrolny, wymuszany jest zapis wszystkich istotnych informacji z obszaru SGA).
Deklaracje zmiennych i stałych:
Identyfikator typ danych[NOT NULL] [:=wyrażenie];
Identyfikator CONSTANT typ_danych[NOT NULL][:=wyrażenie];
-opcjonalna część[:=wyrażenie] umożliwia inicjalizację wartości zmiennej
Przykłądy:
ZNAK CHAR(1);
Stan_cywilny BOOLEAN :=FALSE;
Pracownik_rekord pracownik % POWTYPE;
Uwagi:
-w PL/SQL są dostępne typy danych z języka SQL, a ponadto typ BOOLEAN(logiczny) i BINARY INTEGER liczb całkowitych niezależny od podtypów NUMBER i przez to wymagający przy zapisie mniej pamięci
-nie należy nadawać tej samej nazwy co atrybut w tabeli
-oprócz zmiennych deklarowanych w bloku PL/SQL mogą występować jeszcze zmienne z aplikacji korzystających z bloku PL/SQL poprzedza się je dwukropkiem (:zmienna)
-mogą także występować zmienne podstawienia SQL x Plus (&zmienna)
-typ zmiennej lub stałej można zadeklarować używając pseudoatrybutu %TYPE, określającego typ podanego przed nim atrybutu relacji
-zmienna typu rekordowego deklarujemy z użyciem pseudoatrybutu %ROWTYPE lub przy użyciu złożonego typu danych RECORD.
DISTINCT-eliminacja powtarzających się wierszy
Dodanie ograniczenia integralnościowego: ALTER TABLE <nzw relacji> ADD [CONSTRAINT<nzw ograniczenia>]<ograniczenie relacji>;
Dodanie nowego atrybutu : ALTER TABLE <nzw relacji> ADD(<nzw atrybutu><typ atrybutu>(<rozmiar>)[DEFAULT<wartość domyślna>][[CONSTRAINT<nzw ograniczenia>]<ograniczenia atrybutu>]);
Dopisywanie jednej krotki: INSERT INTO<nzw relacji>[(lista atrybutów)] VALUES(wartość1, wartość2,...); opcjonalna lista atrybutów jest zbędna w przypadku wprowadzenia wszystkich atrybutów danej relacji.
Dopisywanie nowych krotek-wstawiane krotki mogą być wynikiem zapytania SETECT, mogą pochodzić z innych relacji. INSERT INTO<nzw relacji>[(lista atrybutów)]SELECT <lista atrybutów>FROM...;
Dostęp do jądra-> architektura
Ekstencje i klucze.
Dla każdego typu możemy zdefiniować jego ekstencję, czyli kolekcje wszystkich obiektów tego typu. Wśród obiektów danego typu można określić klucz, którego semantyka jest taka sama jak w relacyjnych bazach danych. Jednak klucz nie odgrywa już takiej roli, wbudowana tożsamość obiektu, a nie wartość klucza identyfikuje dany obiekt i służy do tworzenia związków
Funkcje jądra-> architektura
GROUP BY- podział krotek na grupy. Krotki tej samej grupy mają identyczną wartość atrybutu grupowania. W każdej z grup można zastosować f. statyczne (agergujące): MIN(), MAX(), SUM(), AVG(), COUNT(*).GROUP BY może być stosowana rekurencyjnie (można wskazać wiele atrybutów grupowania. Przed grupowaniem można wykonać projekcje(wskazanie atrybutów po SELECT) i(lub) selekcję(wskazanie warunków w WHERE).
HAVING-umożliwia selekcje inf. Ma związek z zastosowaniem funkcji statycznych.
klauzula HAVING z zagnieżdżonymi zapytaniami
SELECT etat, AVG(płaca_pod) FROM pracownik HAVING AVG(płaca_pod)>(SELECT AVG(płaca_pod)FROM pracownik WHERE etat='DYREKTOR') GROUP BY etat;
indeksem gęstym indeks, w którym są pamiętane klucze do wszystkich rekordów pliku
indeksie rzadkim w indeksie są pamiętane tylko wybrane wartości kluczy, np. kluczy rekordów umieszczonych jako pierwsze na stronie pamięci zew.
Indeksy.
Stanowią również strukturę danych umożliwiającą wyszukiwanie inf. System zarządzania bazą danych sam zakłada indeksy dla kluczy głównych i jednoznacznych. Podstawowe założenia dotyczące organizacji plików indeksowych:
1.w pierwszym kroku plik dyskowy przechowujący relację jest porządkowany wg rosnących (lub malejących) wartości klucza (tj. atrybutu o unikalnych wartościach) numerycznego, znakowego, stanowiącego wartość kilku pól
2.potem jest tworzony drugi plik nazywany indeksem, zawierający pary postaci (wartość klucza k, adres strony s). Dana para wartości (k,s) występująca w indeksie oznacza, że rekord (krotka) pamiętany na fizycznej stronie s (w pamięci zew.) ma wartość klucza k
Istnieje wiele metod przeszukiwania indeksu w celu odszukania adresu odpowiedniej strony pliku. Tworzenie indeksu: CREATE (UNIQUE) INDEX <nazwa indeksu> ON <nazwa relacji> (nazwa atrybutu 1 [atrybut2...]);
Po utworzeniu indeksu jest on stosowany automatycznie przez SZBD, każdorazowo gdy wymaga tego strategia optymalizacji relacji zapytań. Oznacza to, że użytkownik nie musi być świadomy istnienia indeksu jak również jego wykorzystania przy realizacji jego określonych poleceń.
Uwagi:
-indeks zajmuje miejsce w bazie danych;
-kiedy wprowadzamy, modyfikujemy lub usuwamy dane z indeksowanej kolumny SZBD musimy uaktywnić indeks, może to spowolnić przeprowadzaną operację;
-w praktyce nie ma sensu zakładanie indeksów na małych relacjach gdyż nie powoduje to odczuwalnej poprawy efektywności;
-dobrą zasadą jest tworzenie indeksów dla kluczy obcych oraz na atrybutach często stosowanych w klauzulach WHERE zapytań i na atrybutach połączonych relacji;
-indeksy zdecydowanie przyśpieszają dostęp do danych;
Uunięcie indeksu: DROP INDEX <nazwa indeksu>;
INSTANCJA BAZY DANYCH
Baza danych ORACLE przechowuje dane w fizycznych plikach i umożliwia kontrolowany dostęp użytkowników do tych plików za pośrednictwem zestawu procedur syst. Operacyjnego. Procedury te są inicjowane podczas uruchamiania instalacji. Ponieważ działają w tle bez bezpośredniego współdziałania z użytkownikiem określa się je mianem użytkowników tła. Aby umożliwić efektywne operowanie na danych i komunikację pomiędzy rozmaitymi procesami ORACLE używa pamięci współdzielonej nzw. Globalnym obszarem współdzielonym.
INSTANCJA ORACLE
Baza danych ORACLE składa się z instancji oraz plików bazy danych. Zbiór procesów drugoplanowych tła i pamięć należą do globalnego obszaru systemowego(SGA) z którą są one związane
INSTRUKCJE STERUJĄCE W PL/SQL.
Język PL/SQL posiada większość typowych instrukcji sterujących:
IF <warunek logiczny> THEN <blok instrukcji > END IF;
IF <warunek logiczny> THEN <blok instrukcji> END IF;
IF <warunek logiczny> THEN <blok instrukcji> ELSE IF <warunek logiczny> THEN
<blok instrukcji> END IF;
LOOP <blok instrukcji> (w tym EXIT lub EXITWHEN <warunek logiczny>)]
END LOOP;
FOR <zmienna> IN <wartość1>…<wartość2>
LOOP <blok instrukcji>
END LOOP;
WHILE <warunek logiczny>
LOOP <blok instrukcji>
END LOOP;
Język PL/SQL jest proceduralnym językiem SQL, stanowi podstawę do pisania aplikacji. Oracle jest dostępny w różnych programach narzędziowych jak: SQL + plus i innych. Odpowiednikiem konstrukcji bloku (i programu) występujących w języku programowania jest w PL/SQL blok anonimowy mający następującą składnię:
[DECLARE<deklaracja obiektów PL/SQLzmienne, stałe, wyjątki, procedury, funkcje]BEGIN<ciąg instrukcji do wykonania>[EXCEPTION<obsługa wyjątków>] END.
-deklaracja i obsługa wyjątków są opcjonalne
-bloki mogą być zagnieżdżone
-jedynymi instrukcjami języka SQL, które mogą się pojawiać w bloku PL/SQL, są instrukcje SELECT, INSERT, UPDATE, DELETE, COMMIT,ROLL BACK.
kursor używając dotychczas wprowadzonych konstrukcji języka PL/SQL nie było możliwe przeglądanie kolejno wszystkich wierszy będących czynnikiem zapytania. Do tego celu został powołany kursor, który stanowi bufor. Przed użyciem kursora należy go zadeklarować poleceniem postaci.
DECLARE CURSOR <nazwa kursora> IS SELECT ... FROM...WHERE;
Na zadeklarowanym kursorze można wykonywać operacje jego otwarcia, pobrania wartości oraz zamknięcia. Kursor otwierany poleceniem OPEN, które powoduje przydzielenie niezbędnych obszarów pamięci. Do pobierania krotki wskazanej przez kursor stosuje się polecenie FETCH. Kursor, który nie będzie więcej wykorzystywany w programie powinien zostać zamknięty poleceniem CLOSE. Z każdym kursorem są związane cztery atrybuty w których jest przechowywana informacja o przebiegu operacji wykonywanych przez kursor.
kursor%FOUND
kursor%NOTFOUND
kursor%ROWCOUNT
kursor%ISOPEN
LGWR- jego zadaniem jest zapisywanie buforów dziennika powtórzeń znajdujących się w SGA na dysku do plików dziennika powtórzeń. Proces ten uaktywnia się gdy:
-Występuje potwierdzenie wykonywanej przez użytkownika bazy danych transakcji, czyli COMMINT.
-W bazie jest wykorzystywany CHECKPOINT.
-Upłynął odpowiednio długi okres czasu bez zapisu na dysk.
W praktyce ten proces zapewnia zapis na dysk wszystkich ostatnio dokonywanych zmian w bazie. Okres czasu objęty tym zapisem zależy od aktywności bazy i wielkości zadeklarowanych na dysku plików dziennika powtórzeń. Im większe pliki i im mniejsza aktywność bazy, tym dłuższy przebieg pracy zostaje zapamiętany na dysku.
Liczniki sekwencyjne->sekwencje
łączenie pionowe relacji: W takich połączeniach stosujemy jeden spośród operatorów zbiorowych : suma, przekrój, różnica. Operatory te działają na wynikach co najmniej dwóch operacji selekcji, a zatem zapytanie składa się z 2 lub więcej poleceń SELECT. Składnia:
SELECT <lista atrybutów/ wyrażeń>
FROM <nazwa rel.1> [WHERE <war. log.1>]
OPERATOR
SELECT <lista atrybutów/ wyrażeń>
FROM <nazwa rel.2> [WHERE <war. log.2>]
[ORDER BY 1,..,n]
gdzie OPERATOR przyjmuje jedną z wartości: UNION, UNION ALL, INSERSECT, MINUS
Uwagi:
--zastosowanie operatora union powoduje wyeliminowanie z wyniku zapytania krotek o takich samych wartościach atrybutów, wyznaczonych przez połączenie tym operatorem zapytania
--natomiast union all spowoduje, że w wyniku zapytania pojawiają się wszystkie krotki
--w łączonych operatorami zbiorowymi klauzulach select musi wystąpić ta sama liczba atrybutów, oraz typy odpowiadających sobie atrybutów (tj. atrybutów select) różnych klauzuli muszą być zgodne
--w wyniku zapytania pojawiają się nazwy atrybutów wyłącznie z pierwszej klauzuli select
--połączone operatorami zbiorowymi polecenia select są wykonywane w kolejności ich występowania (od góry do dołu)
--jeśli istnieje potrzeba użycia klauzuli order by to musi ona wystąpić jako ostatnia klauzula zapytania
--w klauzuli order by nie stosujemy nazw atrybutów, lecz ich numery porządkowe
przykłady:
1.SELECT nazwisko ||'+' FROM pracownik WHERE id_zesp=10
UNION
SELECT nazwisko FORM pracownik WHERE ID<>10 ORDER BY 1;
2.SELECT etat FROM pracownik WHERE id_zesp=30
UNION
SELECT etat FROM pracownik WHERE id_zesp=10;
łączenie poziome- utworzenie relacji, której krotki są wynikiem konkatenacji wybranych krotek relacji źródłowych. Np. SELECT * FROM pracownik, zespół; (eksplozja informacji)
JOIN-krotki relacji1 są łączone z krotkami relacji2, tylko gdy wartość korespondencyjnych atrybutów tych krotek spełniają warunek połączenia. Gdy relacje mają atrybuty o tych samych nazwach powstaje niejednoznaczność. Usuwamy ją poprzedzając nazwę atrybutu nazwą relacji. Np. SELECET p.id_zesp, nazwisko, nazwa FROM pracownik p, zespół z WHERE p.id_zesp=z.id_zesp ORDER BY nazwa, nazwisko;
Modyfikacja schematu relacji jest jednak bardzo ograniczona. Nie dopuszcza się zmiany atrybutu, który wcześniej został zdeklarowany jako atrybut mogący przyjmować wartości puste (to jest z ograniczeniem NULL), na atrybut niepusty (NOT NULL), jeśli w relacji istnieje co najmniej jedna krotka o pustej wartości tego atrybutu. Nie jest możliwe rozszerzanie relacji o nowy atrybut niepusty. Bardzo ograniczone jest zmniejszenie rozmiaru atrybutu (a dokładniej rozmiar jego typu), które jest dopuszczalne jedynie w przypadku, gdy wszystkie krotki zawarte w relacji o modyfikowanym schemacie przyjmują puste wartości tego atrybutu.
Modyfikowanie istniejących krotek.
UPDATE <nazwa relacji> [alias]
SET <nazwa atrybutu1>[j<nazwa atrybutu2>]={wyrażenie / podzapytanie} [WHERE <warunek log>];
NOT NULL ->ograniczenia
NULL ->ograniczenia
ODL - jest młodszym bratem języka SQL. Oba języki zawierają konstrukcje SELECT o bardzo podobnej choć różnej składni i sematyce. Wynikiem zapytań SQL jest relacja, podczas gdy w ODL jest to kolekcja wielo zbiorów ( gdyby użyto opcji DISTINCT), albo lista (gdyby użyto klauzuli ORDER BY).
ODMG - jest organizacją skupiająca firmy tworzące obiektowe bazy danych. Elementami tego standardu są:
-ODL
-OQL
-tzw. związki do 3 języków programowania C++, Smultalk -?, Java.
Deklaracje w ODL: ODL jest rozszerzeniem języka IDL o związki między obiektami. IDL jest zdefiniowany przez standard COBA i służy do definiowania interfejsów obiektów (atrybuty, metody), pozwala interfejsom dziedziczyć składniki innych interfejsów, dopuszczalne jest wielokrotne dziedziczenie. Deklaracja w ODL przypomina instrukcję CREATE TABLE INTERFACE Firma: właściciel, własność {...};
Atrybuty:
Typy proste: Char, String, Short, Integer, Long, Date.
Typy obiektowe: (typy zadeklarowane za pomocą INTERFACE)
Typy kolekcji: Set, Bag, Array, List, używa się jako szablonów C++.
SET <INTEGER> powtórzenia są nie dopuszczalne .
BAG <INTEGER> wielo zbiór liczb całkowitych.
ARRAY <INTEGER, 10>
LIST <INTEGER> to lista liczb całkowitych, istotna kolejność.
Struktury (zestaw pól różnych typów).
STRUCT adres {
STRING miasto;
STRING ulica;
INTEGER m; };
OGRANICZENIA INTEGRALNOŚCIOWE ATRYBUTU:
NULL umożliwia nadawanie atrybutom wartości pustych
NOT NULL uniemożliwia nadawanie atrybutom wartości pustych
UNIQUE definiuje atrybut który spełnia role klucza unikalnego relacji. Wartość tak zdefiniowanego atrybutu jest aktualna dla wszystkich krotek tej relacji.
PRIMARY KEY definiuje atrybut który pełni role klucza podstawowego relacji.
Jeżeli dla atrybutu zdefiniowanego ograniczenia UNIQUE to nie można dla tego atrybutu zdefiniować jadnocześnie ograniczenia PRIMARY KEY i odwrotnie, zdefiniowanie ograniczenia UNIQUE lub PRIMARY KEY umożliwia nadanie atrybutowi wartości pustych.
REFERENCES ograniczenia referencyjne tj referencje do klucza podstawowego lub unikalnego innej relacji.
Jest używane do definiowania klucza głównego relacji. Atrybut będący kluczem obcy, nie może przyjmować wartości których nie przyjmuje odpowiadający mu klucz.
ON DELETE CASCADE - (dla klucza obcego) działanie: jeżeli zostanie usunięta krotka z relacji z kluczem podstawowym to automatycznie zostają usunięte krotki z relacji z kluczem obcym dla których wartość klucza obcego jest równa wartości klucza podst. usuwanej krotki.
CHECK określa warunek który musi być spełniony przez wszystkie wartości atrybutu w def. tego ograniczenia można wykorzystać operatory + <> !+ Is null lkie between And, or, not FOREIGEN KEY umożliwia zdefiniowanie klucza obcego relacji złożonego z wielu relacji.
Przykład:
Create table dydaktycy (id.dydakt number (2) constraint id_dydakt_pk primary key, nazwisko varchar2(15) not null, tytuł varchar2(10) not null);
Możliwe jest czasowe włączanie i wyłączanie ograniczenia integralnościowego stosując klauzurę Disable lub Enable
ALTER TABLE <naz_rel> Disable/anable <rodz_ogr> Constraint <naz_ogr> [cascade]
-)Gdzie nazwa ograniczenia przyjmuje jedną z 3 wartości UNIQUE PRIMARY KEY, ALL TRIGGER
-)opcjonalne słowo CASCADE powoduje włącz lub wyłącz wszystkich pozostałych ograniczeń których działanie zależy od wł. lub wyłącz ograniczenia
ALL TRIGGERS powoduje czasowe wł. lub wył. wszystkich wyzwalaczy zdefiniowanych dla relacji
Dodanie ograniczenia integralnościowego:
ALTER TABLE <nzw_relacji> ADD [CONSTRAINT <nazwa ograniczenia>] <ograniczenie relacji>;
Przykłady:
ALTER TABLE pracownik ADD (tytuł_nauk varcharz(20));
Możliwe jest czasowe wyłączenie lub uaktywnienie ograniczenia integralnościowego stosując klauzulę DISABLE lub ENABLE.
ALTER TABLE <nazwa relacji> DISABLE /ENABLE <rodzaj ograniczenia> | CONSTRAINT <nazwa ograniczenia> [ CASCADE];
-gdzie rodzaj ograniczenia przyjmuje jedną z trzech własności: UNIQUE, PRIMARY KEY, ALLTRIGGERS
-opcjonalnie słowo CASCADE powoduje odpowiednio wyłączenie lub uaktualnienie wszystkich pozostałych ograniczeń, których działanie zależy od wyłączonego lub uaktualnionego ograniczenia
-ALL TRIGGERS powoduje czasowe wyłączenie lub uaktywnienie wszystkich wyzwalaczy zdefiniowanych dla relacji.
Usunięcie qgraniczenia integralnościowego
ACER TABLE <nazwa relacji> DROP <podaj ograniczenia>/CONSTRAINT <nazwa ogrzniczenia>[CASCADE];
-gdzie rodzaj ograniczenia przyjmuje jedną z dwu wartości:
PRIMARY KEY, UNIQUE
-opcjonalne słowo CASCADE umożliwia usunięcie wszystkich pozostałych ograniczeń których działanie zależy od usuwanego ograniczenia
Przykład
ALER TABLE zajęcia DISABLE
CONSTRAINT rodzaj_zaj_chk;
OMG CORBA ->bazy danych
ON DELETE CASCADE->ograniczenia
OQL
Młodszy brat SAL. Oba zawierają konstrukcję SELECT o bardzo podobnej składni i semantyce. Wynikiem zapytania w SQL jest relacja, w OQL kolekcja - wielozbiór (gdy użyto opcji DISTINCT), albo lista (gdy użyto klauzuli ORDER BY).
ORDER BY-występuje jako ostatnia, domyślnie narastający porządek. Ważna jest kolejność atrybutów oddzielonych przecinkami. DESC- zmienia porządek na malejący. Użycie tu atrybutów nie pociąga konieczności ich użycia w SELECT. Do wynikowych kolumn możemy odwoływać się używając ich numerów.
Perspektywy
Perspektywa jest tabelą wirtualną. W odróżnieniu od relacji nie ma własnych danych, jest pamiętana w postaci definiujących ją poleceń SELECT. Są trzy główne, zależne od siebie zastosowania perspektyw w systemie bazy danych:
1.uproszczenie
2.funkcjonalność - wykonywanie pewnych funkcji
3.ochrona - realizacja strategii ochrony
Dostęp do perspektywy odbywa się zgodnie z ogólnymi zasadami dostępu do relacji:
-za pomocą polecenia SELECT, w którego klauzuli FROM użyto nazwę perspektywy
-polecenie INSERT, UPDATE, DELETE, jeżeli perspektywa umożliwia modyfikowanie zawartości relacji na których bazuje
W zależności od sposobu zdefiniowania wyróżnia się perspektywy:
1.prosta - charakteryzuje się tym, że udostępnia dane z pojedynczych relacji, a w jej definicji nie stosuje się operacji na zbiorach, funkcji ani też grupowania klatek
2.złożona - udostępnia dane wielu relacji, a w jej definicji stosuje się połączenia relacji i (lub) operacje na zbiorach, funkcje i grupowanie klatek
Przez perspektywę prostą można zarówno pobierać daną jak i je modyfikować. Modyfikowanie danych za pomocą perspektywy złożonej jest ograniczone. Jeśli ciało polecenia SELECT wykorzystuje operatory zbiorowe, nazwę GROUP BY, operator DISTINCT to do perspektywy można kierować tylko polecenie SELECT.
Jedną z ważnych właściwości perspektyw jest możliwość weryfikacji integralności referencyjnej danych na których operujemy przy użyciu perspektyw. Opcjonalna klauzula WITH CHECK OPTION użyta w definicji perspektywy, uniemożliwia wstawienie i modyfikowanie krotek w sposób niezgodny z warunkami selekcji perspektywy. Klauzula ta powoduje, że na perspektywie mogą być realizowane tylko takie polecenia INSERT i UPDATE w wyniku których otrzymujemy krotki dostępne (widoczne) przez perspektywę.
W celu utworzenia perspektywy jest stosowane polecenie CREATE VIEW z zagnieżdżonym poleceniem SELECT, w którym nie można stosować klauzuli ORDER BY i UPDATE, nie można odwoływać się do pseudoatrybutów CURRVAL i NEXTVAL.
CREATE [OR REPLACE] VIEW <nowa perspektywa> [(linia atrybutów)] AS SELECT ... [WITH CHECK OPTION];
-opcjonalna klauzula OR REPLACE zastępuje istniejącą perspektywę nową definicją -dla wyrażeń wykorzystywanych w poleceniu SELECT (np. SUM(płąca_pod), NVL(płaca_pod,0)) należy określić aliasy lub nazwy odpowiadających im atrybutów perspektyw
Usunięcie perspektywy:
DROP VIEW <nazwa perspektywy>;
PMON, SMON - proces i system monitorujący, zajmuje się porządkowaniem, usuwaniem. Z bazą może pracować jednocześnie wielu użytkowników.
Aby baza zachowywała spójność, a użytkownicy nie prześcigali się w modyfikacji tych samych fragmentów danych, istnieje system blokad LOCK zapewniający, że w danej chwili tylko jeden użytkownik bazy może modyfikować wybrany wiersz.
Podzapytania zagnieżdżone: wewnątrz klauzuli WHERE, HAVING, FROM mogą wystąpić podzapytania mające taką samą postać jak zapytania ale ujęte w nawiasy. Postać zagnieżdżania zapytań w klauzuli WHERE:
SELECT <lista atrybutów/wyrażeń>
FROM <nazwa rel.1>
WHERE <nzw atrybutów/lista atrybutów>
<OPERATOR>
(SELECT<nzw atrybutów/lista atrybutów>
FROM <nazwa rel.2>
WHERE <nzw atrybutów/lista atrybutów>
<OPERATOR>
(SELECT<nzw atrybutów/lista atrybutów>
FROM <nazwa rel.>[...]]))
Mamy do czynienia z zapytaniem zew. i podzapytaniem - zapytaniem wew. W podstawowym trybie zagnieżdżania (nieskorelowanym) podzapytanie jest wykonywane jako pierwsze, jednokrotnie, a jego wyniki są przekazywane do zapytania zew.
Przykłady:
1.SELECT *FROM pracownik WHERE płaca_pod =(SELECT
MIN(płaca_pod) FROM pracownik);
2.SELECT nazwisko, etat FROM pracownik WHERE etat =
(SELECT etat FROM pracownik WHERE nazwisko=' KOLSKI');
Przykłady:
Podzapytanie zwracające wiele krotek
SELECT * FROM pracownik WHERE (płaca_pod, id_zesp) IN
(SELECT MIN(płaca_pod), id_zesp FROM pracownik GROUP BY id_zesp);
Postać normalna(postulaty Cooda)
-atrybut może mieć atomowy wpis(pojedynczy)
-atrybuty w jednej relacji są powiązane tematycznie
PRIMARY KEY->ograniczenia
Proceduralny język zapytań=algebra relacyjna- ma własność domknięcia, wynik operatora relacyjnego jest argumentem wej. kolejnego operatora
PROCERURY, FUNKCJE I PAKETY.
są to obiekty zapisywane w bazie danych tak jak inne obiekty. Szczególnym rodzajem procedur są wyzwalacze baz danych.
Procesy drugoplanowe - to programy rezydujące w pamięci komputera i pozostające w stałej gotowości do pracy. Ich aktywność wymuszana jest przez operacje wykonywane w bazie danych. Ilość procesów drugoplanowych pracujących w INSTANCJI zależy od ustalenia parametrów bazy. Istnieje grupa procesów podstawowych niezbędnych do pracy bazy.
Przecięcie-uwzględnia w relacji wynikowej tylko wiersze wspólne obu tabel
<relacja1>INTERSECTION<relacja2>= =><relacja wynikowa>
Rachunek relacyjny-nieproceduralny i deklaracyjny jest alternatywą algebry relacyjnej (proceduralnej i algorytmicznej). W rachunku formułujemy wyr. które określa co ma być wyszukiwane a nie jak to wyszukać. Każde wyszukanie określone w algebrze może być określone w rachunku i odwrotnie. Dwa warianty rachunku:
-na krotkach - podstawa SQL
-na dziedzinach - podstawa interfejsów QBE
Redundancja danych - efekt powtarzania danych
REFERENCES->ograniczenia
Relacja
Zmiana nazwy relacji
RENAME <stara nazwa relacji> to <nowa nazwa>;
Usuwanie relacji
DROP TABLE <nazwa relacji> [CASCADE CONSTRAINT];
-gdzie CASCADE CONSTRAINT jest opcjonalną klauzulą umożliwiającą usunięcie ograniczeń integralnościowych w innych relacjach, które w swej definicji wykorzystują atrybuty kluczowe i unikalne usuwanej relacji.
Usunąć relację może wyłącznie jej właściciel, tzn. użytkownik, który ją utworzył. Operacja usuwania relacji w ogólności może doprowadzić do błędów w sesjach użytkowników odwołujących się do niej w późniejszym czasie, w sposób bespośredni lub przez bazujące na niej perspektywy.
Aktualizacja zawartości relacji
DLN - język manipulowania danymi
Zobaczenie wszystkiego
DESCRIBE <nazwa relacji>;
Aktualizacja schematu w relacji
Dodawanie nowego atrybutu:
ALER TABLE <nazwa relacji> ADD (<nazwa atrybutu><typ>(<rozmiar>)
[DEFAULT <wartość domyślna>] [[CONSTRAINT<nazwa ograniczenia><ograniczenie atrybutu>]);
Zmodyfikowanie istniejącego atrybutu
ALER TABLE <nazwa relacji>
MODIFY (<nazwa atrybutu><typ>(<rozmiar>)[DEFAULT<wartość domyślna>][NULL/NOT NULL]);
Przykłady:
1.UPDATE pracownik SET płaca_pod=(SELECT placa_pod FROM dodatki d
WHERE d .nr = pracownik.numer) WHERE nr IN (SELECT nr FORM dodatki);
2.UPDATE pracownik SET płaca_pod = (SELECT avq(placa_pod) FROM pracownik
WHERE nr IN (SELECT nr form pracownik WHERE placa_pod=(SELECT MIN(placa_pod)
FROM pracownik));
3.UPDATE pracownik a SET (a.płaca_pod, a.płaca_dod)=
(SELECT avg(płaca_pod) * 1.2,MAX(NUL(płaca_dod.c)) FROM pracownik WHERE id.zesp=a.id_zesp)
WHERE a.pracuje_cd >'89/12/31';
4.CREATE TABLE zajęcia (id_zajęć NUMBER (2) CONSTRAINT id_zajęć_pk PRIMARY KEY,
rodzaj_zaj VARCHAR2(15) CONSTRAINT rodzaj_zaj_chk CHECK(rodzaj_zaj
IN (`wykład','laboratorium','projekt)), id_dydakt NUMBER(2) NOT NULL,
id_przedm NUMBER(2) NOT NULL, FOREGIN KEY (id_dydakt)
REFERENCES dydaktycy (id_dydakt) ON DELETE CASCADE, FOREGIN KEY (id_przedm)
REFERENCES przedmioty (id_przedm));
5.CREATE TABLE pracownicy (id_pracownika number(6) PRIMARY KEY,
Nazwisko VARCHAR2(20) NOT NULL, stanowisko VARCHAR2(9), kierownik NUMBER(6)
REFERENCES pracownicy, data_zatrudnienia DATE, zarobki NUMBER(8,2),
Premia NUMBER(8,2), id_dział NUMBER(3) REFERENCES działy, CHECK(premia<zarobki>));
Relacyjny model baz danych(Cood)
Pole- atrybut
Rekord-krotka
Tabela-relacja
-w relacji nie powtarzają się krotki
-na krotki składa się taka sama ilość atrybutów
-relacja ma niepowtarzalną nazwę
-w ramach jednej relacji nie powtarzają się atrybuty
-relacja ma klucz główny, niepowtarzalny, niepusty
-klucz potencjalny, np. nazwisko+im+im ojca
-klucz obcy (klucz główny jednej tabeli jest kl. obcym w tabeli powiązanej
Rodzaje baz danych
-Relacyjne bazy danych
-obiektowe
-Rozproszone
-Inteligentne
-Specjalne bazy: hipermedialne, hurtownie danych
Rola to zestaw uprawnień systemowych i obiektowych, jaki można przyznawać użytkownikom bazy. Z jednej strony konkretnym użytkownikom przyznaje się uprawnienie do roli; z drugiej strony roli przyznaje się konkretne uprawnienia do wykonywania operacji w bazie danych.
Predefiniowane role to:
CONNECT - możliwość podłączenia do systemu Oracle
RESOURCE - możliwość tworzenia tabel, sekwencji, indeksów i innych obiektów
DBA - możliwość powoływania innych użytkowników, niepełna możliwość administrowania cudzymi obiektami.
Tworzenie roli:
CREATE ROLE <nazwa roli>[IDENTIFIED BY <hasło>];
Usuwanie roli:
DROP ROLE <nazwa roli>;
Przy tworzeniu konta nowego użytkownika przydziela mu się najczęściej role CONNECT, RESOURCE umożliwiające pełne korzystanie z SQL w ramach swojego konta.
Przykłady:
1.GRANT select ON pracownik TO public;
2.GRANT select ON przedmioty TO student;
3.CREATE ROLE kursant;
4.GRANT select ON kurs TO kursant;
5.GRANT select, update(płaca_pod)
ON pracownik TO księgowa;
Równozłączenie-iloczyn kartezjański z selekcją-łączymy 2 tabele tylko dla wierszy których wartości w kolumnach złączenia są takie same
EQUITION<relacja1>WITH<relacja2>
= =><relacja wynikowa>
Różnica
<relacja1>DIFFERENCE<relacja2>= =><relacja wynikowa>
Rzut-pionowy ogranicznik, bierze jedną relację i produkuje jedną relację wynikową
PROJECT<nzrelacji>[<listakolumn>]=>
<relacja wynikowa>;
Sekwencje
W systemie ORACLE jest specjalna konstrukcja-sekwencja (przechowywana jako obiekt w bazie danych), która służy do generowania jednoznacznych wartości dla kluczy głównych i unikalnych.
CREATE SEQUENCE [nazwa użytkownika] <nazwa licznika>[INCREMENT BY <liczba>] [START WITH <wartość początkowa>] [CYCLE / NO CYCLE];
-nazwa użytkownika - jest opcjonalnym parametrem określającym użytkownika, który utworzył licznik -INCREMENT BY - jest opcjonalnym parametrem określającym wartość o jaką będzie zwiększany licznik po każdym odczycie, liczba może być ujemna
-START WITH - określa początkową wartość licznika -CYCLE / NO CYCLE - określa czy po osiągnięciu wartości max, licznik rozpocznie zliczanie od wartości początkowej (CYCLE) czy też nie; domyślnie jest przyjmowana wartość NO CYCLE
<nowa sekwencja>.NEXTVAL - generowanie kolejnej <nowa sekwencja>.CURRVAL - ostatnio wygenerowana wartość
Usunięcie sekwencji: DROP SEQUENCE <nazwa sekwencji>;
SELECT-instrukcja centralna SQL. Służy do wydobywania inf. z bazy, określa z jakich relacji mają być dane, jakie warunki mają spełniać i w jakiej postaci mają się wyświetlać. Składa się z klauzuli (fraz).
SELECT(DISTINCT)<nzw.atrybutu>,/<wyrażenie>[[AS]<alias>]...FROM<relacja1>,<relacja2>,...[WHERE<warunek log>]
[GROUP BY<wyrażenie>
/< nzw.atrybutu>,...[HAVING<warunek log>]][ORDER BY<wyrażenie>>/< nzw.atrybutu>[ASC/DESC]..];
Selekcja- bierze jedną relację i produkuje jedną relację wynikową
RESTRUCT<nzrelacji>[WHERE<warunek>]==><relacja wynikowa>;
SGA (System Global Area) - obszar pamięci operacyjnej zarezerwowany dla potrzeb procesów ustawionych w pliku startowym bazy.
Słowniki danych.
Jest zbiorem informacji o obiektach bazy danych. Jest używany przez system zarządzania bazą danych jak i przez użytkowników. Użytkownik ma uprawnienia tylko do odczytu informacji ze słownika danych. Słownik ma postać tabeli lub perspektyw. Przykłady:
1.z przedrostkiem USER - informacja o wszystkich obiektach, których dany użytkownik jest właścicielem
2.z przedrostkiem ALL - dotyczy wszystkich obiektów do których użytkownik ma uprawnienia
3.z przedrostkiem DBA - informacje o obiektach dostępnych dla administratorów systemu
SMON->PMON
Struktury:
-zmienna(pole)-może być puste lub mieć dane domyślne, ma nazwę i wielkość w bajtach
-rekord-nie ma nazwy, składa się z pól
-tabela(plik)-ma takie same rekordy, niepowtarzalną nazwę w bazie
-baza danych(złożona struktura)-ma nazwę
-hurtownie danych
Suma-bierze 2 zgodne(te same kolumny określone na tych samych dziedzinach) relacje i produkuje relacje wynikową
<relacja1>UNION<relacja2>= =><relacja wynikowa>
SZBD( system zarządzania bazą danych)
-tworzenie struktur
-aktualizacja
-selekcje
-zarządzanie
tworzenie relacji i jednoczesne wypełnienie jej danymi zawartymi w innych już istniejących relacja udostępniono alternatywny forma polecenia CREATE TABLE.
CREATE TABLE <nazwa relacji> [(<nazwa atrybutu>[DEFAULT<wartość domyślna>]
[NULL / NOT NULL], ...] AS SELECT <klauzula SELECT>;
Opcjonalny fragment polecenia umożliwia nadanie nazw atrybutom nowej relacji. W przypadku jego pominięcia, przyjmowane są nazwy zgodne z warunkami zawartymi w klauzuli SELECT.
Przykład
CREATE TABLE lista_płac (id_pracownika NOT NULL, nazwisko NOT NULL,
pensja DEFAULT 750 NOT NULL) AS SELECT id_pracownika, nazwisko, zarobki+pensja
FROM pracownik;
Tworzenie relacji
CREATE TABLE<nzw relacji>(<nzw atrybutu1><typ atrbutu1>(<rozmiar>)[DEFAULT<wartość domyślna>][[CONSTRAINT<nzw ograniczenia1>]<ograniczenia atrybutu1>],...<nzw atrybutuk><typ atrbutu k>(<rozmiar>)[DEFAULT<wartość domyślna>][[CONSTRAINT<nzw ograniczenia k>]<ograniczenia atrybutu k>],...[[CONSTRAINT<nzw ograniczenia >]<ograniczenia atrybutu >];
TYPY ATRYBUTÓW:
NUMBER- liczby (0-9), znaki (-+)oraz znaki opcjonalnej kropki dziesiętnej. Rozmiar liczby nie może być większy niż 38 znaków.
NUMBER (r) jak wyżej ale rozmiar liczby nie może być większy niż r- znaków.
NUMBER (r,m) - jak wyżej ale m określa liczbę cyfr po przecinku, jak m jest liczbą ujemną to wartość atrybutu jest zaokrąglana do m miejsc przed przecinkiem
CHAR(r) - łańcuchy znakowe składające się z dużych i małych liter, cyfr i znaków specjalnych (-+%..) może przyjmować wartości całkowite od 1 do 255.
VARCHAR2(r)- łańcuchy znakowe składające się z dużych i małych liter cyfr znaków specjalnych r- oznacza max dł. łańcucha od 1 do 2000
VARCHAR (r)- podobnie jak wyżej
DATA - data z przedziału od 01 01 4721 p.n.e. do 31 12 4721
LONG jak char ale max dł. 2 MB podlega pewnym ograniczeniom: -) w danej relacji może wystąpić jeden atrybut typu -) nie nadaj się do budowania warunków where, group by
LONGRAW - tak jak long służy do przechowywania danych dowolnego typu np. obrazów dźwięków
Typy danych:
-numeryczny
-alfanumeryczny
-daty
-logiczny
-multimedialny
-symulowany(def. Przez użytkownika)
Usuwanie krotek z relacji
DELETE FROM <nazwa relacji> [WHERE <warunek log>];
UŻYTKOWNICY I UPRAWNIENIA
Każdy, kto rozpoczyna pracę z bazą danych Oracle musi być zidentyfikowany poprzez podanie identyfikatora i hasła, aby móc wykonać określone czynności (operacje). Za zarządzanie użytkownikami, ich uprawnienia i zasoby odpowiedzialny jest administrator. Może on:
-tworzyć i usuwać użytkowników
-definiować uprawnienia użytkownika
-ograniczać ilościowe zasoby użytkownika
Tworzenie użytkownika:
CREATE USER <nazwa użytkownika>IDENTIFIED BY <hasło użytkownika>;
Usuwanie użytkownika:
DROP USER <nazwa użytkownika>;
Uprawnienia w bazie danych
W bazie danych Oracle istnieją dwa typy uprawnień:
1.Uprawnienia systemowe - prawo do wykonywania określonej czynności lub wykonywania pewnych czynności na określonym typie obiektów.
2.Uprawnienia obiektowe - prawo do wykonywania określonej czynności na konkretnym obiekcie.
Istnieje ponad 80 różnych uprawnień. Oto niektóre z nich:
ALTER ANY INDEX, CREATE ANY PROCEDURE, DELETE ANY TABLE, DROP ANY PROCEDURE
Nadawanie uprawnień
GRANT <uprawnienie [,uprawnienie...]TO<nazwa użytkownika>[with admin option];
Odbierania uprawnień
REVOKE<uprawnienie[,uprawnienie...]FROM<nazwa użytkownika>;
Uwagi:
-w systemie Oracle tuż po instalacji oprogramowania istnieją dwaj standardowi użytkownicy SYS, SYSTEM.
-Użytkownik SYS jest właścicielem wszystkich tabel systemowych.
-Użytkownik SYSTEM to właściciel wszystkich perspektyw słownika danych.
-Innych użytkowników należy powołać i nadać im uprawnienia.
-Jeśli użytkownik jest właścicielem jakiś obiektów, to usunięcie się nie powiedzie, chyba ze na końcu dodamy słowo kluczowe CASCADE; wraz z użytkownikiem usuwane są utworzone przez niego obiekty.
-Domyślnie użytkownik nie może przekazywać nadanych mu uprawnień innemu użytkownikowi, aby mógł to zrobić niezbędna jest operacja WITH ADMIN OPTION.
Uprawnienia obiektowe
Właścicielem obiektu jest użytkownik, który go tworzy. Jeśli użytkownik nie udostępnia praw do swojego obiektu, to jedynie on i administrator władają tym obiektom.
Uprawnienia obiektowe definiują prawa użytkownika do obiektu innego użytkownika.
Uprawnienia obiektowe nadaje się podobnie
GRANT <uprawnienie[, uprawniennie...] ON<nazwa obiektu>TO<nazwa użytkownika>/PUBLIC[WITH ADMIN OPTION];
Przykładowe uprawnienia obiektowe:
SELECT, INSERT, UPDATE
Więzy integralności danych:
-ogólne- przy usuwaniu lub dodawaniu z relacji1(powiązanej z relacją2), musimy to zrobić w relacji2
-szczególne- zabezpieczenia (żeby ojciec nie był starszy od syna)
WITH CHECK OPTION->perspektywa
WYZWALACZE są procedurami składowymi w bazie danych w powiązaniu z jej konkretną relacją. Są one uruchomione automatyczne w momencie wykonywania polecenia SQL:INSERT,UPDATE,DELETE.
Wyzwalacze baz danych służą głównie do oprogramowania więzów spójności i oprogramowania stałych czynności, które powinny być wykonywane w każdej aplikacji: korzystają za baz danych .
SKŁADNIA
CREATE [OR REPLACE] TRIGGER <nazwa wyzwalacza> BEFORE /AFTEAR <specyfika instrukcji >OR
-specyfika instrukcji przyjmuje jedna z operacji: INSERT, UPDATE, DELETE lub kilka z nich połączonych operatorem OR.
-w przypadku UPDATE podaje się dodatkowa nazwę aktualizowanego atrybutu używając składni UPDATE OF <nazwa atrybutu>.
-opcjonalna klauzula FOR EACH ROW spowoduje uruchomienie wyzwalacza dal każdej kratki spełniającej warunek polecenia, brak tej klauzuli to wyzwalacz zostanie uruchomiony tylko raz
-aby odróżnić wyzwalaczach wierszowych sferę i nowe wartości w wierszach używa się specjalnych oznaczeń na wierszu przed i po zmianie: :OLD .<nazwa atrybutu>,:NEW <nazwa atrybutu>
Przykład:
CREATE OR REPLACE TRIGGER sprawdź płace
BEFORE INSERT ON pracownik
FOR EACH ROW
BEGIN
IF : NEW płaca_pod < 500
THEN
RAISE_APPLICATION_ERROR
(-200 ;'Płaca podstawowa jest zbyt niska')
END IF;
END;
/
Złączenie- iloczyn kartezjański- bierze dwie relacje i produkuje jedną relację wynikową złożoną ze wszystkich kombinacji krotek z relacji wejściowych
PRODUCT<relacja1>WITH<relacja2>
= => <relacja wynikowa>;
Złączenie naturalne-nie bierze się pod uwagę kolumn złączenia- iloczyn kartezjański z selekcją i rzutem
JOIN<relacja1>WITH<relacja2>ON<klucz>= =><relacja wynikowa>
Złączenie zew-w wyniku wszystkie wiersze z obu relacji bez wzg. na to czy mają odpowiadające wiersze w relacji2 (typy:lewostronne(zachowuje nie pasujące wiersze z tabeli będącej pierwszym argumentem operatora), prawostronne, obustronne)
Złączenie zew.: rozszerza rezultat prostego złączenia (nazywanego wew.) o te krotki z jednej relacji, dla których w trakcie złączenia nie znaleziono odpowiadających im krotek w drugiej relacji. Warunek złączenia ma postać:
atrybut1=atrybut2(+) lub
atrybut1(+)=atrybut2
Przykłady:
Wypisz wszystkich pracowników podając dla każdego z nich nazwę zespołu, w którym pracuje:
SELECT numer, nazwisko, nazwa FROM pracownik p, zespół z
WHERE p.id_zesp=z.id_zesp(+);
Wypisz nazwy zespołów, które nie zatrudniają pracowników:
SELECT z.id_zesp, nazwa FROM zespół.z, pracownik p WHERE
p.id_zesp(+)=z.id_zesp AND p. numer IS NULL;
Wypisz wszystkie zespoły wraz z sumarycznym wynagrodzeniem (miesięcznie):
SELECT z.id_zesp, nazwa, NVL(SUM(płaca_pod),0) FROM zespól z,
pracownik p WHERE p.id_zesp(+)=z.id_zesp
GROUP BY z.id_zesp, nazwa;
Wypisz pracowników i ich przełożonych (szefów) także tych, którzy nie mają przełożonych:
SELECT p.numer, p.nazwisko, p.szef, k.nazwisko FROM
pracownik p, pracownik k WHERE p.szef=k.numer(+)
ORDER BY k.nazwisko;
Zmienne systemowe
Jest pewna liczba zmiennych zdeklarowanych przez system, z których można korzystać w kodzie PL/SQL (ale nie w SQL) ich wartość dotyczy ostatnio wykonanej instrukcji SQL:
-SQL %ROWCOUNT - liczba wierszy przetworzonych przez ostatnią instrukcje SQL
-SQL %FOUND=TRUE - jeśli został znaleziony (przetworzony) przynajmniej jeden wiersz
-SQL %NOTFOUND=TRUE jeśli żaden wiersz nie został znaleziony (przetworzony)
-SQLERRM - tekstowa informacja o błędzie
-SQLCODE - kod błędu
Ostatnie dwie wymienione można używać tylko w sekcji EXCEPTION.
Przykład:
DECLARE usunięte NUMNER;
BEGIN
DELETE FROM zespół WHERE id_zesp=50;
Usunięte:= SQL % ROWCOUNT;
INSERT INTO;
Instrukcja SELECT ma w PL/SQL swoją postać. Wynik zapytania zostaje zapisany w zamiennych zamierzonych w nowej wymaganej klauzuli INTO.
SELECT <atrybut 1> / <wyrażenie>,...INTO <zmienna 1>,...[WHERE <warunek logiczny>]
[GROUP BY <atrybut>]
Związki
W ODL można zdefiniować jedynie związki binarne, zawsze są to związki dwukierunkowe. Jeśli pewien obiekt jest w związku z drugim obiektem, to ten drugi jest w odpowiednim związku odwrotnym z tym pierwszym.
Związki między tabelami:
1:m-(1 do wielu)- jednej krotce w relacji1 odpowiada wiele krotek w relacji2
1:1-------(stosuje się przy ochronie danych)
n:m- bezpośrednio nie da się zamodelować, można poprzez 1:m