Kötelező feladat a 2. gyakorlathoz ------------------------------------------ Írják meg az alábbi 14. feladatban szereplő NEWEST_TABLE nevű procedúrát. Azt, hogy az output helyes-e ellenőrizni tudják a feladat után megadott 'CHECK_PLSQL' procedúra futtatásával. A feladat célja, hogy átismételjék a PL/SQL nyelv legfontosabb konstrukciót. Határidő: a következő gyakorlat kezdete. =========================================================================== Egyéb objektumok (szinonima, nézet, szekvencia, adatbázis-kapcsoló) ---------------- (DBA_SYNONYMS, DBA_VIEWS, DBA_SEQUENCES, DBA_DB_LINKS) ------------------------------------------------------------------------------ Adjuk ki az alábbi utasítást SELECT * FROM sz1; majd derítsük ki, hogy kinek melyik tábláját kérdeztük le. (Ha esetleg nézettel találkozunk, azt is fejtsük ki, hogy az mit kérdez le.) ------------------------------------------------------------------------------ Hozzunk létre egy szekvenciát, amelyik az osztály azonosítókat fogja generálni a számunkra. Minden osztály azonosító a 10-nek többszöröse legyen. 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 a 10, 20, 30 ... stb. azonosítót.) A felvitel után módosítsuk a 10-es osztály azonosítóját a következő é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. ------------------------------------------------------------------------------- Adattárolással kapcsolatos fogalmak ----------------------------------- (DBA_TABLES, DBA_DATA_FILES, DBA_TEMP_FILES, DBA_TABLESPACES, DBA_SEGMENTS, DBA_EXTENTS, DBA_FREE_SPACE) 1. Adjuk meg az adatbázishoz tartozó adatfile-ok (és temporális fájlok) nevét és méretét méret szerint csökkenő sorrendben. (név, méret) 2. Adjuk meg, hogy milyen táblaterek vannak létrehozva az adatbazisban, az egyes táblaterek hány adatfájlbol állnak, és mekkora az összméretük. (tablater_nev, fajlok_szama, osszmeret) !!! Vigyázat, van temporális táblatér is. 3. Mekkora az adatblokkok merete a USERS táblatéren? 4. Van-e olyan táblatér, amelynek nincs DBA_DATA_FILES-beli adatfájlja? Ennek adatai hol tárolódnak? -> DBA_TEMP_FILES 5. Melyik a legnagyobb méretű tábla szegmens az adatbázisban és hány extensből áll? (tulajdonos, szegmens_név, darab) (A particionált táblákat most ne vegyük figyelembe.) 6. Melyik a legnagyobb meretű index szegmens az adatbázisban és hány blokkból áll? (tulajdonos, szegmens_név, darab) (A particionalt indexeket most ne vegyuk figyelembe.) 7. Adjuk meg adatfájlonkent, hogy az egyes adatfájlokban mennyi a foglalt hely osszesen. (fájlnév, fájl_méret, foglalt_hely) 8. Melyik két felhasznalo objektumai foglalnak osszesen a legtobb helyet az adatbazisban? Vagyis ki foglal a legtöbb helyet, és ki a második legtöbbet? 9. Hány extens van a 'users02.dbf' adatfájlban? Mekkora ezek összmérete? (darab, össz) Hány összefüggő szabad terület van a 'users02.dbf' adatfájlban? Mekkora ezek összmérete? (darab, össz) Hány százalékban foglalt a 'users02.dbf' adatfájl? 10. Van-e a NIKOVITS felhasználónak olyan táblája, amelyik több adatfájlban is foglal helyet? (Aramis) 11. Válasszunk ki a fenti táblákból egyet (pl. tabla_123) és adjuk meg, hogy ez a tábla mely adatfájlokban foglal helyet. 12. Melyik táblatéren van az ORAUSER felhasználó DOLGOZO táblája? (táblatér) 13. Melyik táblatéren van a NIKOVITS felhasználó ELADASOK táblája? (táblatér) (Miért lesz null?) ----------------------------------------------------------------------- 14. Írjunk meg egy PLSQL procedúrát, amelyik a paraméterül kapott felhasználónévre kiírja a felhasználó legutoljára létrehozott tábláját, annak méretét byte-okban, valamint a létrehozás dátumát. Az output formátuma a következő legyen: Table_name: NNNNNN Size: SSSSSS bytes Created: yyyy.mm.dd.hh:mi CREATE OR REPLACE PROCEDURE newest_table(p_user VARCHAR2) IS ... Teszt: SET SERVEROUTPUT ON EXECUTE newest_table('nikovits'); Ellenőrzés: ---------- EXECUTE check_plsql('newest_table(''nikovits'')'); Megjegyzés! Próbáljuk ki a procedúrát a saját felhasználónevünket megadva paraméterként, az alábbi tábla létrehozása után: CREATE TABLE t_without_segment(o INT) SEGMENT CREATION DEFERRED; Majd szúrjunk be 1 sort és próbáljuk ki újra. INSERT INTO t_without_segment VALUES(100); -----------------------------------------------------------------------