A rendszerkatalógus maga is egy adatbázisnak tekinthető, amit lekérdezve egyre többet tudhatunk meg az ORACLE adatbázisban tárolt dolgokról és azok tulajdonságairól. Elnevezésük: DBA_..., ALL_..., USER_... Adatbázis objektumok -------------------- (DBA_OBJECTS) Kinek a tulajdonában van a DBA_TABLES nevű nézet (illetve a DUAL nevű tábla)? Kinek a tulajdonában van a DBA_TABLES nevű szinonima (illetve a DUAL nevű)? (Az iménti két lekérdezés megmagyarázza, hogy miért tudjuk elérni őket.) Milyen típusú objektumai vannak az orauser nevű felhasználónak az adatbázisban? Hány különböző típusú objektum van nyilvántartva az adatbázisban? Melyek ezek a típusok? Kik azok a felhasználók, akiknek több mint 10 féle objektumuk van? Kik azok a felhasználók, akiknek van nézete és triggere is? Kik azok a felhasználók, akiknek van nézete, de nincs triggere? Kik azok a felhasználók, akiknek több mint 40 táblájuk, de maximum 37 indexük van? Melyek azok az objektum típusok, amelyek tényleges tárolást igényelnek, vagyis tartoznak hozzájuk adatblokkok? (A többinek csak a definíciója tárolódik adatszótárban) Melyek azok az objektum típusok, amelyek nem igényelnek tényleges tárolást, vagyis nem tartoznak hozzájuk adatblokkok? (Ezeknek csak a definíciója tárolódik adatszótárban) Az utóbbi két lekérdezés metszete nem üres. Vajon miért? -> lásd majd partícionálás Táblák oszlopai --------------- (DBA_TAB_COLUMNS) Hány oszlopa van a nikovits.emp táblának? Milyen típusú a nikovits.emp tábla 6. oszlopa? Adjuk meg azoknak a tábláknak a tulajdonosát és nevét, amelyeknek van 'Z' betűvel kezdődő oszlopa. Adjuk meg azoknak a tábláknak a nevét, amelyeknek legalább 8 darab dátum tipusú oszlopa van. Adjuk meg azoknak a tábláknak a nevét, amelyeknek 1. es 4. oszlopa is VARCHAR2 tipusú. Írjunk meg egy plsql procedúrát, amelyik a paraméterül kapott karakterlánc alapján kiírja azoknak a tábláknak a nevét és tulajdonosát, amelyek az adott karakterlánccal kezdődnek. (Ha a paraméter kisbetűs, akkor is működjön a procedúra!) PROCEDURE tabla_kiiro(p_kar VARCHAR2) A fenti procedúra segítségével írjuk ki a Z betűvel kezdődő táblák nevét és tulajdonosát. HÁZI FELADAT ------------ Írjunk meg egy plsql procedúrát, amelyik a paraméterül kapott táblára kiírja az őt létrehozó CTREATE TABLE utasítást. PROCEDURE cr_tab(p_owner VARCHAR2, p_tabla VARCHAR2) Elég ha az oszlopok típusát és DEFAULT értékeit kíírja, és elég ha a következő típusú oszlopokra működik. CHAR, VARCHAR2, NCHAR, NVARCHAR2, BLOB, CLOB, NCLOB, NUMBER, FLOAT, BINARY_FLOAT, DATE, ROWID Teszteljétek a procedúrát az alábbi táblával. CREATE TABLE tipus_proba( c10 CHAR(10) DEFAULT 'bubu', vc20 VARCHAR2(20), nc10 NCHAR(10), nvc15 NVARCHAR2(15), blo BLOB, clo CLOB, nclo NCLOB, num NUMBER, num10_2 NUMBER(10,2), num10 NUMBER(10) DEFAULT 100, flo FLOAT, bin_flo binary_float DEFAULT '2e+38', bin_doub binary_double DEFAULT 2e+40, dat DATE DEFAULT TO_DATE('2007.01.01', 'yyyy.mm.dd'), rid ROWID);