Kötelező feladat a jelenlét ellenőrzéséhez ------------------------------------------ Írják meg az alábbi 14. feladatban szereplő 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ő: ismét 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. ------------------------------------------------------------------------------- Hozzunk létre adatbázis-kapcsolót (database link) az ULLMAN adatbázisban, amelyik a másik (ARAMIS) adatbázisra mutat. CREATE DATABASE LINK aramisdb CONNECT TO felhasznalo IDENTIFIED BY jelszo USING 'aramis.inf.elte.hu:1521/aramis'; Ennek segítségével adjuk meg a következő lekérdezéseket. A lekérdezések alapjául szolgáló táblák: NIKOVITS.VILAG_ORSZAGAI ULLMAN adatbázis NIKOVITS.FOLYOK ARAMIS adatbázis Az országok egyedi azonosítója a TLD (Top Level Domain) oszlop. Az ország hivatalos nyelveit vesszőkkel elválasztva a NYELV oszlop tartalmazza. A GDP (Gross Domestic Product -> hazai bruttó össztermék) dollárban van megadva. A folyók egyedi azonosítója a NEV oszlop. A folyók vízhozama m3/s-ban van megadva, a vízgyűjtő területük km2-ben. A folyó által érintett országok azonosítóit (TLD) a forrástól a torkolatig (megfelelő sorrendben vesszőkkel elválasztva) az ORSZAGOK oszlop tartalmazza. A FORRAS_ORSZAG és TORKOLAT_ORSZAG hasonló módon a megfelelő országok azonosítóit tartalmazza. (Vigyázat!!! egy folyó torkolata országhatárra is eshet, pl. Duna) - Adjuk meg azoknak az országoknak a nevét, amelyeket a Mekong nevű folyó érint. -* Adjuk meg azoknak az országoknak a nevét, amelyeket a Mekong nevű folyó érint. Most az országok nevét a megfelelő sorrendben (folyásirányban) adjuk meg. --------------------------------------------------------------------------------- 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 saját magunkra 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); -----------------------------------------------------------------------