1. gyakorlat
Bevezetés
- Oracle SQL
- Az datbázisok I.-hez hasonlóan SQLdeveloper-t használunk
- Adatbázisok
- Aramis
- Ullman
- A felhasználok reset-elve lettek, ezért állítsunk be ismét új jelszót
-- Tábla készítése létező tábla alapján (példa)
create table dolgozo as
select *
from vdani.dolgozo;
Rendszerkatalógusok
- Ezek ugyanúgy táblák, mint amiket eddig néztünk (pl. dolgozo)
- Magáról az adatbázisról tartalmaznak információkat (táblák táblája)
- Pl. melyik táblában milyen oszlopok vannak, kinek milyen jogai vannak
- Kétféle
- Objektumok
- Táblák
| Ki tudja lekérdezni? | Mit tartalmaz? | |
|---|---|---|
| USER_ | Mindenki | Ami a felhasználó tulajdona |
| ALL_ | Mindenki | Amit a felhasznlónak joga van látni |
| DBA_ | DBA | Mindent |
\(\text{USER\_} \;\subset\; \text{ALL\_} \;\subset\; \text{DBA\_}\)
Normál esetben nem lenne hozzáférésünk a DBA_-hoz, de a feladatok miatt valamilyen trükkel van.
"Adminosat játszunk :D"
Feladatok
A feladatokhoz a dba_objects-t és a dba_tables-t fogjuk használni.
3. feladat: Milyen típusú objektumai vannak az orauser-nek?
4. feladat: Hány különböző tpusú objektum van az adatbázisban?
6. feladat: Kik azok a felhasználók, akiknek több, mint 10 féle objektumuk van?
Fontos a DISTINCT! Ne felejtsük ki!
Gyakorló feladatok
DBA_OBJECTS
1. Kinek a tulajdonában van a DBA_TABLES nevu nézet (illetve a DUAL nevu tábla)?
select owner
from dba_objects
where object_type = 'VIEW' and object_name LIKE 'DBA_TABLES';
select owner
from dba_objects
where object_type = 'TABLE' and object_name LIKE 'DUAL';
2. Kinek a tulajdonában van a DBA_TABLES nevu szinonima?
5. Melyek ezek a típusok?
7. Kik azok a felhasználók, akiknek van triggere és nézete is?
select distinct owner
from dba_objects
where object_type = 'VIEW'
intersect
select distinct owner
from dba_objects
where object_type = 'TRIGGER';
8. Kik azok a felhasználók, akiknek van nézete, de nincs triggere?
select distinct owner
from dba_objects
where object_type = 'VIEW'
minus
select distinct owner
from dba_objects
where object_type = 'TRIGGER';
9. Kik azok a felhasználók, akiknek több mint 40 táblájuk, de maximum 37 indexük van?
(Nem biztos, hogy jó!)
select distinct owner, count(distinct object_name)
from dba_objects
where object_type = 'TABLE'
group by owner
having count(distinct object_name) > 40
intersect
select distinct owner, count(distinct object_name)
from dba_objects
where object_type = 'INDEX'
group by owner
having count(distinct object_name) < 37;
DBA_TAB_COLUMNS
1. Hány oszlopa van a nikovits.emp táblának?
2. Milyen típusú a nikovits.emp tábla 6. oszlopa?
select data_type
from DBA_TAB_COLUMNS
where owner = 'NIKOVITS' and table_name = 'EMP' and column_id = 6;
3. Adjuk meg azoknak a tábláknak a tulajdonosát és nevét, amelyeknek van 'Z' betuvel kezdodo oszlopa
select owner, table_name
from DBA_TAB_COLUMNS
where column_name like 'Z%'
group by table_name, owner;
4. Adjuk meg azoknak a tábláknak a nevét, amelyeknek legalább 8 darab dátum tipusú oszlopa van
select owner, table_name, count(*)
from DBA_TAB_COLUMNS
where data_type = 'DATE'
group by owner, table_name
having count(*) >= 8;