Honnan kaphatunk információkat az adatbázisban
tárolt dolgokról és azok
tulajdonságairól?
- Az adatszótár nézetekből, amelyeknek a neve
általában a következő karakterláncok
valamelyikével kezdődik:
USER (az adott user tulajdonában lévő objektumok) pl. USER_TABLES
ALL (amihez joga van az adott usernek) pl. ALL_TABLES
DBA (az adatbázis összes objektuma) pl. DBA_TABLES
- A rendszerkatalógus maga is egy adatbázisnak
tekinthető,
amit lekérdezve egyre többet
tudhatunk meg az ORACLE adatbázisban tárolt
dolgokról és azok
tulajdonságairól.
Milyen dolgok vannak az adatbázisban?
- Például táblák, nézetek, indexek, procedúrák stb.
Minden fel van sorolva a típusával együtt a DBA_OBJECTS adatszótárban.
SELECT object_name, object_type FROM DBA_OBJECTS WHERE owner='SILA';
Mely objektumokhoz tartozik és melyekhez nem tartozik szegmens?
(igényel-e tényleges tárolást)
- Minden adatbázisbeli objektumnak van egy egyedi objektum azonosítója (OBJECT_ID),
és amelyikhez tartozik szegmens, annak egy úgynevezett adatobjektum azonosítója is van
(DATA_OBJECT_ID). Amelyik objektumhoz nem tartozik szegmens, annak az adatobjektum
azonosítója NULL vagy 0, és ezeknek csak a
definíciója van (szövegesen) tárolva a
szótárban.
Ezen utóbbi objektumokra azt mondjuk, hogy
tényleges tárolást nem igénylő
objektumok.
Feladatok:
1.01. Kérdezzük le a DBA_OBJECTS, ALL_OBJECTS és
USER_OBJECTS nézeteket.
1.02. Kinek a tulajdonában van a DBA_TABLES nevű
nézet valamint a DBA_TABLES
nevű
szinonima? (A két
lekérdezés megmagyarázza, hogy
miért tudjuk elérni őket.)
1.03. Milyen típusú objektumai vannak az orauser nevű
felhasználónak az adatbázisban?
(a
katalógustáblákban nagy betűvel vannak
az adatok
'orauser' helyett 'ORAUSER')
1.04. Hány különböző
típusú objektum van nyilvántartva az
adatbázisban? Melyek ezek a típusok?
1.05. Melyek azok az objektum típusok, amelyek
tényleges tárolást
igényelnek, vagyis
tartoznak
hozzájuk adatblokkok? (A
többinek csak a definíciója
tárolódik adatszótárban)
1.06. Melyek azok az objektum típusok, amelyek nem
igényelnek tényleges
tárolást, vagyis nem
tartoznak
hozzájuk adatblokkok?
(Ezeknek csak a definíciója
tárolódik adatszótárban)
Az
utóbbi két
lekérdezés metszete nem üres. Vajon
miért? -> lásd majd
partícionálás
1.07. Kik azok a felhasználók, akiknek
több
mint 10 féle objektumuk van?
1.08. Kik azok a felhasználók, akiknek van
triggere
és nézete is?
1.09. Kik azok a felhasználók, akiknek van
nézete, de nincs triggere?
1.10. Kik azok a felhasználók, akiknek
több
mint 40 táblájuk, de maximum 37 indexük
van?
G2. Táblák
oszlopai és megszorítások
(DBA_TABLES, DBA_VIEWS, DBA_TAB_COLUMNS, DBA_CONSTRAINTS)
Mely táblák vannak például egy adott felhasználó tulajdonában?
- A DBA_TABLES adatszótár az összes
táblát felsorolja, például HR séma
táblái ezek:
SELECT table_name FROM dba_tables WHERE owner='HR';
Milyen nevű és típusú oszlopai vannak egy
táblának, melyik az első, második oszlopa stb.?
- A DBA_TAB_COLUMNS adatszótár a táblák
oszlopairól tartalmaz minden fontos információt.
Feladatok:
2.01. Táblák létrehozása: a
fenti oszloptípusok
(segédlet) alapján hozzunk létre
táblákat,
majd keressük meg milyen
információt találunk a
tábláinkról és a
táblák
oszlopairól
a
DBA_OBJECTS, DBA_TABLES
és
DBA_TAB_COLUMNS katalógustáblákban.
2.02. Hozzunk létre táblákat
megszorításokkal, majd nézzük
meg hogyan
jelennek meg
a
megszorítások a
DBA_CONSTRAINTS katalógustáblában.
2.03. Hozzunk létre
nézettáblákat, majd
nézzük
meg a DBA_VIEWS katalógustáblában.
2.04. Hány oszlopa van a sila.emp
táblának?
2.05. Milyen típusú a sila.emp tábla
6.
oszlopa?
2.06. Adjuk meg azoknak a tábláknak a
tulajdonosát
és nevét, amelyeknek van 'Z' betűvel
kezdődő oszlopa.
2.07. Adjuk meg azoknak a tábláknak a
nevét,
amelyeknek legalább 8 darab dátum
tipusú oszlopa
van.
2.08. Adjuk meg azoknak a tábláknak a
nevét,
amelyeknek 1. es 4. oszlopa isVARCHAR2 tipusú.
Házi
feladat: köv.gyakorlatra átnézni a PL/SQL
ismereteket, mert ezzel folytatjuk:
2.09. Írjunk
meg egy plsql blokkot,
amelyik egy karakterlánc
beolvasása alapján
kiírja azoknak a
tábláknak a
nevét és tulajdonosát, amelyek az
adott
karakterlánccal
kezdődnek. (Ha kisbetűkkel adjuk meg
a karakterláncot, akkor
is működjön!)
2.10. Írjunk meg egy plsql
procedúrát,
amelyik a
paraméterül kapott táblára
kiírja
az őt
létrehozó
CREATE TABLE
utasítást.
PROCEDURE
create_table_ut(p_owner VARCHAR2,
p_tabla
VARCHAR2)
Elég ha az
oszlopok
típusát
és DEFAULT értékeit
kiírja,
és elég ha a következő
típusú
oszlopokra működik: CHAR,
VARCHAR2, NCHAR,
NVARCHAR2,
NUMBER, FLOAT,
BINARY_FLOAT, DATE, ROWID
Teszteljétek a
procedúrát az
alábbi
táblával.
CREATE TABLE tipus1_proba
(c10
CHAR(10) DEFAULT
'bubu',
vc20 VARCHAR2(20),
nc10
NCHAR(10), nvc15 NVARCHAR2(15),
num NUMBER, num10_2
NUMBER(10,2), num10
NUMBER(10) DEFAULT 100,
flo FLOAT, bin_flo
binary_float DEFAULT
'2e+38', bin_doub binary_double DEFAULT 2e+40,
dat DATE DEFAULT
TO_DATE('2007.01.01',
'yyyy.mm.dd'), rid
ROWID);