Kihagyás

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
-- Jelszó megváltoztatása

ALTER USER felhasználónév IDENTIFIED BY új_jelszó;
-- Tábla készítése létező tábla alapján (példa)

create table dolgozo as
select *
from vdani.dolgozo;
-- Tegyük publikussá a saját dolgozó táblánkat

grant select on dolgozo to public;

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?

select distinct object_type
from dba_objects
where upper(owner) = 'ORAUSER';

4. feladat: Hány különböző tpusú objektum van az adatbázisban?

select COUNT(distinct object_type) as object_count
from dba_objects;

6. feladat: Kik azok a felhasználók, akiknek több, mint 10 féle objektumuk van?

select owner
from dba_objects
group by owner
having count(distinct object_type) > 10;

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?

select owner
from dba_objects
where object_type LIKE 'SYNONYM' and object_name LIKE 'DBA_TABLES';

5. Melyek ezek a típusok?

select distinct object_type
from dba_objects;

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?

select count(column_name)
from DBA_TAB_COLUMNS
where owner = 'NIKOVITS' and table_name = 'EMP';

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;

5. Adjuk meg azoknak a tábláknak a nevét, amelyeknek 1. es 4. oszlopa is VARCHAR2 tipusú

select distinct table_name
from DBA_TAB_COLUMNS
where (column_id = 1 and data_type like 'VARCHAR2') or (column_id = 4 and data_type like 'VARCHAR2');