4.01. Szinonimák létrehozása
és
használata: a HR séma
tábláihoz
készítsünk
szinonimákat
és keressük meg a
DBA_SYNONYMS katalógustáblában.
4.02. Adjuk ki az
alábbi
utasítást: SELECT * FROM szinonima1;
majd a
katalógustáblák
lekérdezésével
derítsük ki, hogy kinek
melyik tábláját
kérdeztük le. (Ha nézettel
találkozunk, azt is fejtsük ki, hogy az mit
kérdez le.)
4.03. Szekvencia létrehozása
és
használata
- Előkészítés: sila.emp és
sila.dept hozzuk
létre (de üresen!) saját
táblákat.
- Hozzunk
létre egy szekvenciát, amelyik az
osztály
azonosítókat generálja
a
számunkra. Minden osztály
azonosító a 10-nek
többszöröse legyen.
(create sequence)
-
Vigyünk fel 3 új
osztályt és
osztályonként minimum 3
dolgozót a
táblákba.
Az
osztály
azonosítókat a szekvencia
segítségével állítsuk
elő, és ezt
tegyük
be
a
táblába. (Vagyis ne kézzel
írjuk be az azonosítót.)
- A felvitel
után módosítsuk a 10-es
osztály azonosítóját a
köv.érvényes (generált)
osztály azonosítóra. (Itt is
a
szekvencia segítségével adjuk meg,
hogy mi lesz a
következő azonosító.) A 10-es
osztály dolgozóinak az
osztályazonosító
ertékét is
módosítsuk az új
értékre.
4.04. Hozzunk létre
adatbázis-kapcsolót (database link) az ablinux
adatbázisban,
amelyik a
másik tomx adatbázisra mutat, majd
keressük ki a
megfelelő
adatszótárnézetben (DBA_DB_LINKS) az
erről
tárolt
információt.
CREATE
DATABASE
LINK tomx
connect
to <azonosito> identified by <jelszo>
USING
'tomx.inf.elte.hu:1521/ora11g'; Az
adatbáziskapcsoló
segítségével adjuk meg
olyan lekérdezést,
amely mindkét
adatbázis
tábláit használja. Például a TOMX
adatbázisban legyen az emp2 tábla
(lásd 4.03. feladatot, de csak
ezt, a dept2-t
nem), az ABLINUX
adatbázisban
pedig a dept2
tábla (és itt pedig csak a dept2
tábla legyen, de az emp2 nem).
Adjunk olyan
lekérdezést az ablinux adatbázisban, amely
innen a dept2 táblát
a másik
adatbázisból pedig az emp2@TOMX
táblát is használja.
G5.
Táblák és tárolási
paraméterek, ROWID adattípus
ROWID
adattípus formátuma és
jelentése (lásd
még DBMS_ROWID
package)
18 karakteren írodik ki, a következő
formában: OOOOOOFFFBBBBBBRRR
OOOOOO - az objektum azonosítója
FFF - fájl
azonosítója
(táblatéren belüli relativ
sorszám)
BBBBBB - blokk azonosító (a
fájlon belüli sorszám)
RRR - sor
azonosító (a blokkon
belüli sorszám)
A ROWID megjelenítéskor 64-es alapú
kódolásban jelenik meg.
Az egyes számoknak (0-63) a következő karakterek
felelnek meg:
A-Z -> (0-25), a-z -> (26-51), 0-9 -> (52-61), '+'
-> (62), '/' -> (63)
Pl. 'AAAAAB' -> 000001
Feladatok:
5.01. Az SH
felhasználó CUSTOMERS
táblája hány blokkot foglal le az
adatbázisban?
(Vagyis azt
nézzük meg, hogy hány olyan blokk van,
ami ehhez a táblához van
rendelve
és így azok
már más táblákhoz nem
adhatók
hozzá?) (DBA_SEGMENTS)
Hasonlítsuk össze ezt azzal, hogy mennyi a foglalt
hely összesen? (DBA_EXTENTS)
5.02. Az SH
felhasználó CUSTOMERS
táblájának adatai hány
blokkban helyezkednek el?
(Vagyis a
tábla sorai ténylegesen hány blokkban
vannak tárolva?)
!!! -> Ez
a kérdés
nem ugyanaz mint az előző, most a ROWID-et
használjuk!
5.03. Az egyes blokkokban hány sor van?
5.04. Hozzunk létre egy olyan táblát
(lásd tárolási
paraméterek.txt) az
EXAMPLE táblatéren,
amelynek
szerkezete megegyezik a HR.EMPLOYEES tábláéval és pontosan
128
KB helyet foglal az
adatbázisban. Foglaljunk le
manuálisan egy újabb
128 KB-os
extenst a
táblához. Vigyünk
fel sorokat addig, amig az első
blokk tele nem lesz,
és 1
további
sora lesz
még a
táblának a második blokkban.
(A felvitelt PL/SQL
programmal
végezzük és ne kézzel, mert
úgy kicsit
sokáig tartana.)
5.05. Próbáljuk ki az előzőt ismét, de
most a PCTFREE értéket
állítsuk 40-re.
Mindkét esetben
ellenőrizzük is, hogy a sorok tényleg
két blokkban
vannak,
és a
másodikban csak egyetlen sor van.
Szorgalmi feladat (beküldhető)
5.06. Írjunk meg
egy PL/SQL
függvényt,
amely a ROWID 64-es
kódolásnak
megfelelő
számot adja vissza. A
függvény paramétere egy
karakterlánc,
eredménye pedig
a
kódolt numerikus
érték legyen. (Elég ha a
függvény
maximum
6 hosszú, helyesen kódolt
karakterláncokra működik,
hosszabb
karakterláncra
vagy rosszul
kódolt
paraméterre adjon
vissza -1-et.)
Ennek a fv-nek a
segítségével adjuk
meg egy táblabeli sor pontos fizikai
elhelyezkedését.
(Melyik
fájl, melyik blokk, melyik
sora)
Például az
emp tábla azon sorára, ahol a
dolgozó neve
'KING'.
Megjegyzés: A gyakorlatok egyik
célkitűzése az is, hogy az Oracle Database
Online
Documentation könyvtárban otthonosan
mozogjunk, lásd
például
PL/SQL
Packages
and Types Reference "DBMS_ROWID"
fejezetét.
Gyakorlásként
írjuk
meg a fenti PL/SQL függvényt. A
megírt
függvényünk
működését
könnyen ellenőrizhetjük az DBMS_ROWID
csomagban
szereplő függvényekkel, az
alábbi utasítással, írjuk
be a függvényünket
minden substr(...)-hoz egészítsük ki a
sajátfvnév(substr(...))-el.