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);