Egy objektumra történő teljes hivatkozás: schema.objektum@database_link ======================================================================= schema = séma: egy adott felhasználó tulajdonában lévő összes objektum (de vannak olyan objektumok is, amelyek egyik sémába se tartoznak bele) => Séma objektumok és => Sémán kívüli objektumok ('közösek', amikre mindenkinek szüksége van) A táblák mindig valamilyen sémában vannak! (azért van kivétel) Például: egy adatbázis kapcsolat (database link) az séma objektum, de lehet public database link-et is létrehozni, ami már sémán kívüli objektum. Hasonló a helyzet a szinonimával. Van két speciális séma: SYS és SYSTEM (kötelezően létrejönnek, ebben vannak a rendszerkatalógus táblák) (Kiundulásként) a legfontosabb rendszerkatalógus tábla: DBA_OBJECTS FELADATOK: Hozzunk létre táblákat, nézettáblákat, szinonimákat, szekvenciát, adatbázis-kapcsolót. Keressük meg a tulajdonságaikat a megfelelő katalógustáblákban: DBA_SYNONYMS, DBA_VIEWS, DBA_SEQUENCES, DBA_DB_LINKS Táblák létrehozása ================== CREATE TABLE tablanev(o1 tipus ... ) Típusok: - char(n) (fix hossz, statikusan lefoglal n karakternyi helyet) - varchar2(n) (változó hossz, maximum n karaktert lehet tárolni, de mindig csak annyit használ, amennyi épp szükséges) Kétfajta karakter-összehasonlítási szemantika van!! - blank-padded: a rövidebb stringet kiegészíti szóközökkel, hogy ugyanolyan hosszú legyen a két string és utána hasonlít össze - non-padded: nem egészít ki semmit. Így nyilván a rövidebb string a kisebb. Mikor fontos? például 'AB ' és 'AB' összehasonlítása esetén blank-padded: 'AB ' = 'AB' non-padded: 'AB ' > 'AB' Fontos, hogy a blank-padded-et két CHAR típusú értéknél használja, minden más esetben a non-padded érvényes! Numerikus tipusok: - Number: (a leggyakoribb, és legsokoldalúbb) Meg lehet neki adni paramétereket Number(p,s) -> fixpontos tárolás p - precision (pontosság - jegyek száma) s - scale (tizedes jegyek száma, lehet < 0) Number(20,-2) -> százasokra kerekít Number(p) -> ilyenkor nincsenek tizedes jegyek - egész szám - Integer, Float stb: a legtöbb esetben Numbert csinál belőle az Oracle Példa: -- Hozzunk létre adattáblát ... CREATE TABLE num_proba(o_integer integer, o_float float, o_number number, o_num10 number(10), o_num10_2 number(10,2)); -- ... és nézzük meg a rendszertáblában owner='saját_Oracle_azonsító' SELECT column_id, column_name, data_type, data_length, data_precision, data_scale FROM dba_tab_columns WHERE owner='SILA' and table_name='NUM_PROBA'; Megjegyzés: az oracle a katalógus táblákban a neveket csupa nagybetűvel tárolja. Dátum típus: - Date: másodperc pontosságot tud Dátum esetén fontos, hogy a lekérdezéskor milyen formátumban kapom meg a dátumot. Ez kliens függő! (Mármint az alapértelmezés, persze ezt a lekérdezésben meg tudom változtatni) Konverziók: TO_DATE (karakter -> dátum) TO_CHAR (dátum -> karakter) Aktuális rendszerdátum select sysdate from dual; select TO_CHAR(sysdate, 'yyyy-mm-dd:hh24:mi:ss') from dual; -> lásd a formátummodelleket create table t_datum(o date); Gond lehet a beszúrásnál, mert el kéne találnom az alapértelmezett formátum stringet, amivel várja a dátumot! Megoldás -> to_date insert into t_datum values(to_date('2007-02-19', 'yyyy-mm-dd')); Vagyis a to_date()-nél úgy adom meg a dátumot, ahogy akarom, csak a második paraméterben meg kell mondanom neki a formátum stringet, amit használtam. Egyéb típusok: LOB - Large OBject (több, mint 4 gigabájtos adatot is bele lehet pakolni) BLOB - Binary LOB CLOB - Characher LOB ROWID - spec. típus, tulajdonképpen egy pointer, ami egy sornak a fizikai helyére mutat Dafault értékek: Van egy táblám, aminek mondjuk van 3 oszlopa. Mi történik ha egy INSERT-nél csak az első két oszlopnak adok értéket? 1. NULL kerül a 3. oszlopba (de sokszor ezt megtiltjuk -> NOT NULL) 2. Be lehet állítani ilyen esetre Default értéket az oszlopoknak Példa: CREATE TABLE t(fizetes number(6) DEFAULT 1000, hire_date date DEFAULT SYSDATE); Szinonima ========= Egy táblának (vagy nézetnek) adhatok egy másodlagos nevet. Létrehozás szintaxisa: CREATE [OR REPLACE] [PUBLIC] SYNONYM [schema.]synonym FOR [schema.]object [@dblink]; Példa: A fent létrehozott tábláinkhoz készítsünk szinonimát. CREATE SYNONYM num_proba_syn FOR num_proba; Akár távoli adatbázisban levő táblákra is létre lehet hozni. Lehet publikus/nem publikus (ez utóbbi a saját sémámba tartozik) Szekvencia ========== Egy sorszámgenerátor. Olyan, mint az auto_increment MySQL-ben. Megadható tulajdonságok: - Lépésköz - Kezdeti érték - Maximális érték - Körbefuthat-e (ha elérte a max-ot, újrakezdje-e) Létrehozás szintaxisa: CREATE SEQUENCE [.] [INCREMENT BY ] [START WITH ] [MAXVALUE | NOMAXVALUE] [MINVALUE | NOMINVALUE] [CYCLE | NOCYCLE] [CACHE <#> | NOCACHE] [ORDER | NOORDER]; Használat: .NEXTVAL: következő érték lekérése (be lehet írni pl. egy INSERT utasításba is) .CURRVAL: akkor jó, ha beszúrás után kell még a kiosztott sorszám Például beszúrok egy Osztályt, az okod-ot szekvenciával kérem le. Utána be akarom szúrni az osztály dolgozóit, ehhez kell az előbb beszúrt osztály kódja. Adatbázis kapcsoló ================== Egy séma objektum ahhoz, hogy egy másik adatbázis objektumaihoz lehessen hozzáférni. A másik adatbázisnak is Oracle-nek kell lenni! (SELECT, INSERT, UPDATE, DELETE, LOCK TABLE) A hivatkozáshoz @adatbázis_link utótagot kell használni. Létrehozás szintaxisa: CREATE [SHARED|PUBLIC] DATABASE LINK dblink [ CONNECT TO [CURRENT_USER | user IDENTIFIED BY password [dblink_authentication] | [dblink_authentication] ] [USING 'connection string'] ; dblink_authentication := AUTHENTICATED BY user IDENTIFIED BY password SHARED: egy olyan nyilvános adatbázis link létrehozásához, amelyet meglehet osztani több felhasználó között. PUBLIC: egy nyilvános adatbázis link létrehozásához. Ha ez nem szerepel, akkor csak a létrehozó láthatja ezt a kapcsolatot. CONNECT TO: a kapcsolat eléréséhez kell. CURRENT USER: az aktuális felhasználó lesz a létrehozó, globális felhasználó kell legyen. USING 'connect string' : szolgáltatás név