You are on page 1of 17

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, ja-
kie 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 war-
toś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 przy-
datna 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 SET
atr1 = val1 [,atr2 = val2 [,...]]
DELETE ...
WHEN NOT MATCHED THEN
INSERT ...;

SQL DDL
Dla relacyjnych baz danych narzędziem fizycznej realizacji będzie część SQL’a nazywa-
na 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 DDL
INSERT CREATE
UPDATE ALTER
DELETE DROP

2 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 ('CHINY', 'TAJLANDIA'),
PARTITION europa VALUES ('NIEMCY', 'WLOCHY'),
PARTITION zachod VALUES ('USA'),
PARTITION wschod VALUES ('ROSJA'),
PARTITION reszta VALUES (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 THAN (2000),
PARTITION rok_2004 VALUES LESS THAN (2004),
PARTITION rok_2008 VALUES LESS THAN (2008),
PARTITION rok_2012 VALUES LESS THAN (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, pro-


cedur, 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 za-
wierać 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 nie-
puste. 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żyt-
kownika 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 per-
spektyw

• 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ć za-
opatrzone w aliasy lub perspektywa musi przewidzieć nowe nazewnictwo wszystkich
kolumn wyniku podzapytania

14
• istnieje możliwość modyfikacji danych za pośrednictwem perspektyw pod warun-
kiem, ż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śred-


nictwem perspektywy dane spełniają warunki logiczne zawarte wewnątrz podzapy-
tania 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ł zmie-
niony 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 da-
nych 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

You might also like