Do druku

Transkrypt

Do druku
Plan wykładu
Spis treści
1 DML - modyfikacja
1
2 DDL - definiowanie struktur
5
2.1 Definiowanie tabel relacyjnych . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.2 Więzy integralności . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.3 Modyfikacja definicji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3 Dodatkowe obiekty
14
4 Perspektywy słownika danych
16
5 Źródła
17
1
DML - modyfikacja
Polecenie UPDATE
Polecenie UPDATE
służy do aktualizacji zawartości wierszy tabel. W klauzuli SET wymieniamy atrybuty,
których wartości będą zmieniane. Opcjonalna klauzula WHERE wyznacza kryterium, jakie muszą spełnić wiersze tabeli aby podlegać zmianie. Brak ograniczającego warunku
oznacza, że wszystkie wiersze będą zmienione.
Składnia:
UPDATE {tabela | perspektywa}
SET {{atrybut = wartosc | DEFAULT | NULL | (SELECT...)},
{atrybut = wartosc | DEFAULT | NULL | (SELECT...)},
...}
[WHERE predykat];
Przykłady:
UPDATE pracownicy
SET placa = placa * 1.1;
UPDATE pracownicy
SET placa = placa * 1.1
WHERE nr_akt IN
(SELECT kierownik FROM pracownicy);
Polecenie INSERT
Polecenie INSERT
pozwala wstawiać do tabeli nowe wiersze. Opcjonalnie można określić listę uzupełnianych
atrybutów, w przeciwnym razie należy wypełnić wszystkie. Klauzula VALUES określa wartości jakie będą przypisane atrybutom. Wiersz można wypełnić wartościami zwróconymi
przez podzapytanie.
Składnia:
1
INSERT INTO {tabela | perspektywa | (SELECT...)}
[(atrybut1 [,...] )]
{DEFAULT VALUES |
VALUES (wartosc1 [,...]) |
SELECT... };
Przykłady:
INSERT INTO dzialy VALUES
(10, 'ZARZAD', 'CZESTOCHOWA');
INSERT INTO pracownicy VALUES
(9121, 'KUKULSKI', 'DYREKTOR', 8901,
To_date('1991/04/02','yyyy/mm/dd'), NULL,
5000, 1500, NULL, 30);
INSERT INTO pracownicy (nr_akt, nazwisko) VALUES
(9192, 'KOWALSKI');
INSERT INTO prac_archiw
SELECT * FROM pracownicy WHERE nr_akt = 9192;
Tworzenie skryptu
INSERT INTO dzialy
VALUES (&id_dzialu, &nazwa, &siedziba);
Podzapytanie jako cel
Pozwala uniknąć tworzenia perspektyw tylko w celu wstawiania danych:
INSERT INTO (SELECT l.id_lok, l.miasto, l.id_kraju
FROM lokalizacje l JOIN kraje k
ON (l.id_kraju = k.id_kraju)
JOIN regiony USING (id_regionu)
WHERE nazwa_regionu = 'Europa')
VALUES (2500, 'Częstochowa', 'PL');
INSERT INTO (SELECT id_lok, miasto, id_kraju
FROM lokalizacje
WHERE id_kraju IN
(SELECT id_kraju
FROM kraje NATURAL JOIN regiony
WHERE nazwa_regionu = 'Europa')
WITH CHECK OPTION)
VALUES (2500, 'Częstochowa', 'PL');
2
INSERT wielowierszowy
• Użyj INSERT ... SELECT celem wstawienia wielu wierszy do wielu tabel
• wielowierszowy (multitablicowy) INSERT jest często wykorzystywany w hurtowniach
danych
• polecenie jest wydajniejsze od pojedyńczych wstawień i wstawień z wykorzystaniem
składni IF ... THEN
• typy:
– bezwarunkowy INSERT
– warunkowy INSERT ALL
– warunkowy INSERT FIRST
– “obrotowy” INSERT
INSERT wielowierszowy - składnia
Składnia:
INSERT [conditional_insert_clause]
[insert_into_clause values_clause] (SELECT...)
Składnia conditional_insert_clause:
[ALL|FIRST]
[WHEN condition THEN] [insert_into_clause
values_clause]
[ELSE] [insert_into_clause values_clause]
bezwarunkowy INSERT
INSERT ALL
INTO historia_plac VALUES (prac_id, datazatr, placapod)
INTO historia_kier VALUES (prac_id, kier_id, placapod)
SELECT nr_akt prac_id, data_zatr datazatr,
placa placa_pod, kierownik kier_id
FROM pracownicy
WHERE nr_akt > 200;
warunkowy INSERT ALL
INSERT ALL
WHEN datazatr < To_date('01-01-1995','DD-MM-YYYY') THEN
INTO historia_prac VALUES (prac_id, datazatr, placapod)
WHEN prow IS NOT NULL THEN
INTO historia_plac VALUES (prac_id, placapod, prow)
SELECT nr_akt prac_id, data_zatr datazatr,
placa placa_pod, prowizja prow
FROM pracownicy;
3
warunkowy INSERT FIRST
INSERT FIRST
WHEN placa < 1900 THEN
INTO niskieplace VALUES (nr_akt, nazwisko, placa)
WHEN placa BETWEEN 1900 AND 4000 THEN
INTO srednieplace VALUES (nr_akt, nazwisko, placa)
ELSE
INTO wysokieplace VALUES (nr_akt, nazwisko, placa)
SELECT nr_akt, nazwisko, placa
FROM pracownicy;
obrotowy INSERT
Każda krotka relacji wejściowej jest transformowana (“obracana”) tak by utworzyć
wiele wierszy wyjściowych - szczególny przykład operacji bezwarunkowej. Instrukcja przydatna przy transformacji obiektowo-relacyjnej.
INSERT ALL
INTO place VALUES (nr_akt, id_tyg, pl_pon)
INTO place VALUES (nr_akt, id_tyg, pl_wt)
INTO place VALUES (nr_akt, id_tyg, pl_sr)
INTO place VALUES (nr_akt, id_tyg, pl_czw)
INTO place VALUES (nr_akt, id_tyg, pl_pt)
INTO place VALUES (nr_akt, id_tyg, pl_nad)
SELECT nr_akt, id_tyg, pl_pon, pl_wt,
pl_sr, pl_czw, pl_pt, pl_nad
FROM place_tygodniowe;
Polecenie DELETE
Polecenie DELETE
usuwa wiersze ze wskazanej tabeli, zawiera opcjonalną klauzule WHERE ograniczającą liczbę
usuniętych wierszy do tych, które spełniają zadany warunek.
Składnia:
DELETE FROM {tabela | perspektywa}
[WHERE warunek];
Przykłady:
DELETE FROM stanowiska;
DELETE FROM pracownicy WHERE nr_akt = 9192;
Polecenie MERGE
Polecenie MERGE
polecenie umożliwiające wykonanie warunkowej modyfikacji, wstawienia lub kasowania
danych. Pozwala uniknąć oddzielnych modyfikacji, podwyższa wydajność, ułatwia złożone
modyfikacje.
Składnia:
MERGE INTO table_name table_alias
USING (table|view|subquery) alias
ON (join condition)
WHEN MATCHED THEN
4
UPDATE
atr1
DELETE
WHEN NOT
INSERT
SET
= val1 [,atr2 = val2 [,...]]
...
MATCHED THEN
...;
SQL DDL
Dla relacyjnych baz danych narzędziem fizycznej realizacji będzie część SQL’a nazywana DDL (ang. Data Definition Language) zawierająca niezbędne polecenia do tworzenia
(CREATE), usuwania (DROP) i modyfikacji (ALTER) struktur danych. Nigdy nie należy mylić
poleceń DML i DDL:
DML
INSERT
UPDATE
DELETE
2
DDL
CREATE
ALTER
DROP
DDL - definiowanie struktur
2.1
Definiowanie tabel relacyjnych
CREATE TABLE
Składnia polecenia CREATE TABLE:
CREATE [GLOBAL TEMPORARY]
TABLE [schemat.]table_name
{ relational_table
| object_table
| XMLType_table };
Tworzenie tabeli relacyjnej
CREATE [GLOBAL TEMPORARY]
TABLE [schemat.]table_name
[ (relational_properties) ]
[ ON COMMIT { DELETE | PRESERVE } ROWS ]
[ physical_properties ]
[ table_properties ];
CREATE TABLE - własności relacyjne
Definicja kolumn - własności relacyjnych tabeli:
column datatype [ SORT ]
[ DEFAULT expr ]
[ ENCRYPT encryption_spec ]
[ ( { inline_constraint }... )
| inline_ref_constraint
]
5
Np.:
CREATE TABLE mieszkancy (
PESEL
NUMBER(11),
nazwisko
VARCHAR2(30),
imiona
VARCHAR2(30),
data_zameldowania DATE DEFAULT CURRENT_DATE
);
CREATE TABLE - tabela obiektowa
OF
[
[
[
[
[
[
[
[
schema. ] object_type
object_table_substitution ]
(object_properties) ]
ON COMMIT { DELETE | PRESERVE } ROWS ]
OID_clause ]
OID_index_clause ]
physical_properties ]
table_properties ]
Przykład:
CREATE TABLE departments_obj_t OF department_type;
Tabela obiektowa departments obj t przechowuje obiekty typu department type.
CREATE TABLE - tabela obiektowa
Definicja typu i odpowiadającej mu tabeli obiektowej, w której identyfikator obiektu
staje się kluczem głównym:
CREATE TYPE employees_typ AS OBJECT
(e_no NUMBER, e_address CHAR(30));
/
CREATE TABLE employees_obj_t OF employees_typ
(e_no PRIMARY KEY)
OBJECT IDENTIFIER IS PRIMARY KEY;
CREATE TABLE - XMLType
OF XMLTYPE
[ (oject_properties) ]
[ XMLTYPE XMLType_storage ]
[ XMLSchema_spec ]
[ XMLType_virtual_columns ]
[ ON COMMIT { DELETE | PRESERVE } ROWS ]
[ OID_clause ]
[ OID_index_clause ]
[ physical_properties ]
[ table_properties ]
Przykład:
CREATE TABLE xwarehouses OF XMLTYPE
XMLSCHEMA "http://www.example.com/xwarehouses.xsd"
ELEMENT "Warehouse";
6
CREATE TABLE - własności fizyczne
{ segment_attributes_clause [ table_compression ]
| ORGANIZATION
{ HEAP [ segment_attributes_clause ]
[ table_compression ]
| INDEX [ segment_attributes_clause ]
index_org_table_clause
| EXTERNAL external_table_clause
}
| CLUSTER cluster (column [, column ]...)
}
CREATE TABLE - przykłady
CREATE TABLE demo (
id
NUMBER(10)
)
TABLESPACE przyklad
STORAGE (INITIAL 6144);
CREATE TABLE dzialy (
id
NUMBER(2)
PRIMARY KEY,
nazwa
VARCHAR(50),
lokalizacja VARCHAR(20)
)
ORGANIZATION INDEX
PCTTHRESHOLD 30
OVERFLOW TABLESPACE nadmiar;
CREATE TABLE - własności tabeli
Własności tabeli:
[
[
[
[
[
[
[
[
[
[
column_properties ]
table_partitioning_clauses ]
CACHE | NOCACHE ]
parallel_clause ]
ROWDEPENDENCIES | NOROWDEPENDENCIES ]
MONITORING | NOMONITORING]
enable_disable_clause ]...
row_movement_clause ]
flashback_archive_clause ]
AS subquery ]
CREATE TABLE - przykłady
CREATE TABLE klienci (
id
NUMBER(6),
nazwisko VARCHAR2(30),
imiona
VARCHAR2(30),
adres
VARCHAR2(200),
nls
VARCHAR2(30),
email
VARCHAR2(30)
7
)
PARTITION BY LIST (nls) (
PARTITION azja
VALUES
PARTITION europa VALUES
PARTITION zachod VALUES
PARTITION wschod VALUES
PARTITION reszta VALUES
);
('CHINY', 'TAJLANDIA'),
('NIEMCY', 'WLOCHY'),
('USA'),
('ROSJA'),
(DEFAULT)
CREATE TABLE - przykłady
CREATE TABLE klienci (
id
NUMBER(6),
naziwsko VARCHAR2(30),
imiona
VARCHAR2(30),
adres
VARCHAR2(200),
rok_zal
NUMBER(4),
email
VARCHAR2(30)
)
PARTITION BY RANGE (rok_zal) (
PARTITION rok_2000 VALUES LESS
PARTITION rok_2004 VALUES LESS
PARTITION rok_2008 VALUES LESS
PARTITION rok_2012 VALUES LESS
);
THAN
THAN
THAN
THAN
(2000),
(2004),
(2008),
(2012)
CREATE TABLE pracownicy_archiwalni AS
SELECT * FROM pracownicy
WHERE data_zwol IS NOT NULL;
DROP TABLE
Usuwanie tabeli:
DROP TABLE [schemat.]nazwa_tabeli
[CASCADE CONSTRAINTS][PURGE];
• usunięcie definicji tabeli
• usunięcie danych z tabeli - wszystkich krotek
• usunięcie wyzwalaczy i indeksów związanych z tabelą
• zwolnienie fizycznego segmentu i jego rozszerzeń
• ustawienie atrybutu niepoprawności dla powiązanych perspektyw, synonimów, procedur, itp.
Polecenie TRUNCATE
Polecenie TRUNCATE
usuwa wszystkie krotki tabeli pozostawiając strukturę nienaruszoną.
Składnia:
TRUNCATE TABLE nazwa_tabeli;
8
2.2
Więzy integralności
Definiowanie ograniczeń
Sposoby definicji ograniczeń:
• ograniczenia kolumny - definiowane “inline” lub “out of line” (za wyjatkiem NOT NULL)
• ograniczenia tabeli - definiowane “out of line”
• nazwane przez użytkownika
• nazwane przez system
• ograniczenia tworzone w trakcie tworzenia struktury tabeli (“inline” lub “out of line”)
• ograniczenia tworzone po utworzeniu tabeli poprzez poprawianie jej struktury (wyłącznie “out of line”)
Typy ograniczeń
Typy ograniczeń:
• NOT NULL - wartość obowiązkowa
• CHECK (warunek_logiczny) - wartość spełniająca narzucony warunek
• UNIQUE - wartość niepowtarzalna, jednoznaczna
• PRIMARY KEY - klucz główny
• FOREIGN KEY, REFERENCES - klucz obcy
• mechanizm integralności oparty na wyzwalaczach
CONSTRAINT “inline”
Definicja ograniczeń “inline”:
CREATE TABLE nazwa_tabeli (
kol1 typ[(rozmiar)]
[DEFAULT wyrazenie1][SORT]
[[CONSTRAINT nazwa_ogr_kolumny] {
[NOT] NULL
| UNIQUE
| PRIMARY KEY
| REFERENCES tabela(kol1 [, kol2]...)
[ON DELETE { CASCADE | SET NULL }]
| CHECK (warunek_logiczny)
} [DISABLE|ENABLE]
[USING INDEX { [schemat.]indeks
| (create_index_statement)
| wlasnosci_indeksu
}
]], ... );
9
CONSTRAINT “out of line”
Definicja ograniczeń “out of line”:
CREATE TABLE nazwa_tabeli (
...,
[[CONSTRAINT nazwa_ogr_tabeli] {
UNIQUE ( kol1 [, kol2]... )
| PRIMARY KEY ( kol1 [, kol2]...)
| FOREIGN KEY ( kol1 [, kol2]...)
REFERENCES tabela(kol1 [,kol2]...)
[ON DELETE { CASCADE | SET NULL }]
| CHECK (warunek_logiczny)
} [DISABLE|ENABLE]
[USING INDEX { [schemat.]indeks
| (create_index_statement)
| wlasnosci_indeksu
}], ...);
NOT NULL
NOT NULL
- dla kolumn o wartościach obowiązkowych.
CREATE TABLE osoby(
nazwisko
VARCHAR2(30) NOT NULL,
data_urodzenia DATE
CONSTRAINT data_nn NOT NULL,
...
);
CHECK
CHECK
- wartości kolumny dla każdego wiersza spełnią zadany warunek (warunek nie może zawierać podzapytań, ani funkcji zmiennych w czasie).
CREATE TABLE osoby(
nazwisko
VARCHAR2(30) NOT NULL,
data_urodzenia DATE CONSTRAINT data_nn NOT NULL,
plec
CHAR(1) CHECK (plec IN ('K','M')),
wiek
NUMBER(3),
...,
CONSTRAINT wiek_ch CHECK (wiek BETWEEN 0 AND 120)
);
UNIQUE
UNIQUE
- wartości w kolumnie będą niepowtarzalne.
CREATE TABLE osoby(
pesel
NUMBER(11)
CONSTRAINT pesel_u UNIQUE,
nip
NUMBER(10),
nazwisko
VARCHAR2(30) NOT NULL,
data_urodzenia DATE CONSTRAINT data_nn NOT NULL,
...,
UNIQUE(nip)
);
10
PRIMARY KEY I
PRIMARY KEY
- więzy klucza głównego oznaczają, że kolumna/kolumny przyjmą wartości jednoznaczne i niepuste. Dla klucza głównego tworzony jest automatycznie indeks.
CREATE TABLE mieszkancy(
pesel
NUMBER(11) PRIMARY KEY
nazwisko
VARCHAR2(30) NOT NULL,
data_urodzenia DATE NOT NULL,
nr_dokumentu
VARCHAR2(20)
);
PRIMARY KEY II
CREATE TABLE mieszkancy(
pesel
NUMBER(11)
CONSTRAINT mieszy_pk PRIMARY KEY,
nazwisko
VARCHAR2(30) NOT NULL,
data_urodzenia DATE NOT NULL,
nr_dokumentu
VARCHAR2(20)
);
CREATE TABLE mieszkancy(
pesel
NUMBER(11),
nazwisko
VARCHAR2(30) NOT NULL,
data_urodzenia DATE NOT NULL,
nr_dokumentu
VARCHAR2(20),
PRIMARY KEY (pesel)
);
CREATE TABLE mieszkancy(
pesel
NUMBER(11),
nazwisko
VARCHAR2(30) NOT NULL,
data_urodzenia DATE NOT NULL,
nr_dokumentu
VARCHAR2(20),
CONSTRAINT mieszy_pk PRIMARY KEY (pesel)
);
FOREIGN KEY I
FOREIGN KEY
- więzy klucza obcego - wartości z kolumn klucza istnieją we wcześniej zdefiniowanym kluczu
kandydującym innej lub tej samej tabeli (może przyjąć wartość pustą).
11
CREATE TABLE rachunki(
nr_rachunku
NUMBER(10) PRIMARY KEY,
kwota
NUMBER(6,2) NOT NULL,
termin
DATE,
odsetki
NUMBER(6,2),
id_mieszkania NUMBER(10) REFERENCES mieszkania(id_mieszkania)
);
FOREIGN KEY II
CREATE TABLE rachunki(
... ,
id_mieszkania NUMBER(10) CONSTRAINT rach_fk
REFERENCES mieszkania(id_mieszkania)
);
CREATE TABLE rachunki(
...,
id_mieszkania NUMBER(10),
FOREIGN KEY (id_mieszkania)
REFERENCES mieszkania(id_mieszkania)
);
CREATE TABLE rachunki(
...,
id_mieszkania NUMBER(10),
CONSTRAINT rach_fk FOREIGN KEY (id_mieszkania)
REFERENCES mieszkania(id_mieszkania)
);
FOREIGN KEY III
Opcje ON DELETE SET NULL i ON DELETE CASCADE
CREATE TABLE rachunki(
...,
id_mieszkania NUMBER(10),
CONSTRAINT rach_fk FOREIGN KEY (id_mieszkania)
REFERENCES mieszkania(id_mieszkania)
ON DELETE SET NULL
);
CREATE TABLE rachunki(
...,
id_mieszkania NUMBER(10),
CONSTRAINT rach_fk FOREIGN KEY (id_mieszkania)
REFERENCES mieszkania(id_mieszkania)
ON DELETE CASCADE
);
2.3
Modyfikacja definicji
ALTER TABLE I
ALTER TABLE
- polecenie umożliwiające wprowadzenie zmian do istniejącej struktury logicznej i cech
fizycznych tabeli.
Niektóre możliwości ALTER TABLE:
• ADD - dodanie kolumn lub ograniczeń
• MODIFY - modyfikacja istniejących kolumn lub ograniczeń
12
• DROP - usunięcie kolumn lub ograniczeń
• RENAME - zmiana nazwy tabeli, kolumny lub ograniczeń
• ENABLE - włączenie ograniczenia
• DISABLE - wyłączenie ograniczenia
• i wiele innych...
ALTER TABLE - zmiany kolumn I
Dodanie kolumn:
ALTER TABLE nazwa_tabeli ADD
(kol1 typ [DEFAULT wyrazenie] [wiezy_kol1])
[, (kol2 typ [DEFAULT wyrazenie] [wiezy_kol2])]... ;
ALTER TABLE rachunki ADD
(id_mieszkanca NUMBER(10)
REFERENCES mieszkancy(id_mieszkanca));
Zmiana kolumn:
ALTER TABLE nazwa_tabeli MODIFY
(kol1 [typ] [DEFAULT wyrazenie] [wiezy_kol1])
[, (kol2 [typ] [DEFAULT wyrazenie] [wiezy_kol2])]... ;
ALTER TABLE rachunki MODIFY
(nr_rachunku NUMBER(12));
ALTER TABLE - zmiany kolumn II
Usunięcie kolumn:
ALTER TABLE nazwa_tabeli DROP
COLUMN kol1 | ( kol1 [, kol2]... ) ;
ALTER TABLE rachunki DROP COLUMN id_mieszkanca;
Zmiana nazwy:
ALTER TABLE nazwa_tabeli
RENAME COLUMN stara_nazwa TO nowa_nazwa;
ALTER TABLE rachunki
RENAME COLUMN id_rachunku TO nr_rachunku;
ALTER TABLE - ograniczenia I
Modyfikacja ograniczeń::
ALTER TABLE nazwa_tabeli
{ ADD CONSTRAINT nazwa_ograniczenia
| PRIMARY KEY
| UNIQUE (kol1)
[, UNIQUE (kol2) ]
| MODIFY CONSTRAINT nazwa_ograniczenia
| PRIMARY KEY
| UNIQUE (kol1)
[, UNIQUE (kol2) ]...
| RENAME CONSTRAINT stara_nazwa TO nowa_nazwa
| DROP PRIMARY KEY | UNIQUE ( kol1 [, kol2]... )...
[CASCADE] [ KEEP | DROP INDEX]
| CONSTRAINT nazwa_ograniczenia [CASCADE];
|ENABLE | DISABLE UNIQUE ( kol1 [, kol2]... )
| PRIMARY KEY
| CONSTRAINT nazwa_ograniczenia
Np.:
ALTER TABLE mieszkancy ADD
CONSTRAINT nr_dok_u UNIQUE (nr_dokumentu);
13
3
Dodatkowe obiekty
Indeksy
Indeks może być tworzony jawnie lub niejawnie. Jawnie jest realizowany przez użytkownika poleceniem CREATE INDEX:
CREATE [UNIQUE | BITMAP] INDEX nazwa_indeksu ON
nazwa_tabeli (kol1 [ASC|DESC] [, kol2 [ASC|DESC]]);
niejawnie może być automatycznie zakładany przez system, np. dla klucza głównego.
Modyfikacja indeksu:
ALTER INDEX stara_nazwa TO nowa_nazwa;
ALTER INDEX nazwa REBUILD;
Usuwanie indeksów:
DROP INDEX nazwa;
Klastry I
Tworzenie kontenera na tabele odbywa się za pomocą polecenia CREATE CLUSTER:
CREATE CLUSTER [ schema. ] cluster
(column datatype [ SORT ]
[, column datatype [ SORT ] ]...
)
[ { physical_attributes_clause
| SIZE size_clause
| TABLESPACE tablespace
| { INDEX
| [ SINGLE TABLE ]
HASHKEYS integer [ HASH IS expr ]
}
}...
]
[ parallel_clause ]
[ NOROWDEPENDENCIES | ROWDEPENDENCIES ]
[ CACHE | NOCACHE ] ;
Klastry II
Np.:
CREATE CLUSTER prac_dzialu_cl
(nazwa VARCHAR2(20), id_dzialu NUMBER(2),
nazwisko VARCHAR2(30))
SIZE 500
TABLESPACE users;
Perspektywy
• widoki, wirtualne tabele - reprezentujące wybraną zawartość tabel lub innych perspektyw
• nie składowane fizycznie na dysku, generowane przy każdym wywołaniu nazwy
• wyrażenia nie będące kolumnami, z klauzuli SELECT podzapytania, muszą być zaopatrzone w aliasy lub perspektywa musi przewidzieć nowe nazewnictwo wszystkich
kolumn wyniku podzapytania
14
• istnieje możliwość modyfikacji danych za pośrednictwem perspektyw pod warunkiem, że polecenie będzie dla systemu jednoznaczne (uniemożliwiają to grupowania,
funkcje, podzapytania, porządkowanie, DISTINCT, wyrażenia złożone, brak klucza
głównego i atrybutów obowiązkowych, brak uprawnień, ograniczenie WITH READ ONLY)
• opcja WITH CHECK OPTION - umożliwia sprawdzenie, czy modyfikowane za pośrednictwem perspektywy dane spełniają warunki logiczne zawarte wewnątrz podzapytania perspektywy
CREATE VIEW
Perspektywy tworzy się za pomocą polecenia CREATE VIEW:
CREATE [OR REPLACE]
[[NO] FORCE] VIEW [schema.] view
[ ( { alias [ inline_constraint... ]
| out_of_line_constraint
}
[, { alias [ inline_constraint...]
| out_of_line_constraint
}
]
)
| object_view_clause
| XMLType_view_clause
]
AS subquery [WITH CHECK OPTION|WITH READ ONLY];
CREATE VIEW - przykład
CREATE OR REPLACE VIEW szefowie AS
SELECT * FROM pracownicy
WHERE nr_akt IN (SELECT kierownik FROM pracownicy);
CREATE VIEW studentki AS
SELECT * FROM studenci
WHERE imiona LIKE '%A'
WITH CHECK OPTION;
Sekwencje
Sekwencje tworzy się za pomocą polecenia CREATE SEQUENCE:
CREATE SEQUENCE nazwa
[START WITH st]
[INCREMENT BY i]
[MAXVALUE max]
[MINVALUE min]
[CYCLE|NOCYCLE]
[CACHE c|NOCACHE];
CREATE SEQUENCE nr_akt_seq
START WITH 9200
INCREMENT BY 10;
• st ­ min i st ¬ max
• i 6= 0, może przyjmować wartości ujemne, i < (max − min)
15
• c ­ 2, c < (Ceil(max − min)/Abs(i)), domyślnie c = 20
• nazwa.CURRVAL - określa aktualną wartość w sekwencji
• nazwa.NEXTVAL - określa następną wartość w sekwencji
Synonimy
Synonimy
to alternatywna nazwa dla tabel, perspektyw, sekwencji, operatorów, procedur, funkcji,
pakietów, materializowanych perspektyw, obiektów Java, typów użytkownika, lub innych
synonimów. Synonim staje się niepoprawny jeżeli obiekt na który wskazuje został zmieniony lub zniszczony.
Synonimy tworzy się za pomocą polecenia CREATE SYNONYM:
CREATE [PUBLIC] SYNONYM nazwa FOR [schemat.]nazwa_ob;
CREATE PUBLIC SYNONYM pracownicy FOR scott.emp;
4
Perspektywy słownika danych
Słownik danych
Słownik danych
zbiór tabel i perspektyw systemowych przechowujących informacje (metadane) na temat
struktury bazy danych, zawartych w niej obiektów, kontach użytkowników, uprawnieniach,
itp.. Użytkownicy mają jedynie możliwość oglądania zawartości perspektyw słownika danych w czytelnej formie.
Przedrostki perspektyw słownika danych:
• USER_ - obiekty posiadane przez użytkownika
• ALL_ - obiekty, do których użytkownik ma dostęp
• DBA_ - obiekty całej bazy danych (informacje wykorzystywane w administracji)
SELECT table_name FROM user_tables;
Pespektywy słownika danych
Wybrane perspektywy słownika danych dla
• tabel: %_TABLES, %_CONSTRAINTS, %_CONS_COLUMNS
• indeksów: %_INDEXES, %_IND_COLUMNS
• klastrów: %_CLUSTERS, %_CLU_COLUMNS
• perspektyw: %_VIEWS, %_UPDATABLE_COLUMNS
• sekwencji: %_SEQUENCES
• synonimów: %_SYNONYMS
• innych obiektów: %_CATALOG, %_DEPENDENCIES, %_ERRORS, %_LOCKS, %_OBJECTS,
%_ROLES, %_SOURCE, %_TABLESPACES, %_TRIGGERS, %_TYPES,...
16
5
Źródła
Źródła
W wykładzie wykorzystano materiały:
• http://download.oracle.com/docs/cd/B10501_01/nav/sql_keywords.htm?remark=
homepage
• M. Lentner, Oracle 9i Kompletny podręcznik użytkownika, PJWSTK - W-wa, 2003
• http://wazniak.mimuw.edu.pl/index.php?title=Bazy_danych
• Garcia-Molina, Ullman, Widom: Implementacja systemów baz danych, WNT 2003
17

Podobne dokumenty