Oracle alapok: Táblák létrehozása és az Oracle néhány alapvető típusa -------------------------------------------------------------------------------- Az SQL utasításokban a kisbetűk és nagybetűk tetszés szerint keverhetők (kivéve karakterláncok belsejében), általában a kulcsszavakat szokás nagybetűvel írni. Az Oracle adatbázisban különböző objektumok vannak, illetve hozhatók létre. A legfontosabbak: Tábla Nézet (ténylegesen nincsenek tárolva az adatai) Index (a lekérdezések gyorsítására) Szinonima (újabb hivatkozási név pl. egy táblához) Szekvencia (sorszámgenerátor) Klaszter (fürtözve együtt tárolt táblák) PL/SQL nyelven megírt függvény vagy procedúra Trigger ... stb. Objektumok létrehozása: CREATE paranccsal pl. CREATE TABLE ..., CREATE VIEW ..., CREATE INDEX ... Objektumok megszüntetése (törlése az adatbázisból) DROP utasítással pl. DROP TABLE ..., DROP VIEW ... SÉMA Minden objektumnak van egy tulajdonosa, aki egy adatbázis user. Egy user tulajdonában levő objektumok összességét a user sémájának nevezzük. Ez alapján azt mondjuk pl, hogy egy tábla a SCOTT user sémájában van. Hivatkozás más sémában levő objektumra: . pl. SELECT * FROM sila.emp; TÁBLA Az alábbi egy üres táblát hoz létre: CREATE TABLE t1(oszl1 NUMBER(10,2), oszl2 VARCHAR2(20), oszl3 DATE); Ez fel is tölti adatokkal CREATE TABLE t1(oszl1, oszl2, oszl3) AS SELECT ... Adattípus ilyenkor nem adható meg, azt a SELECT oszlopai fogják meghatározni. pl. CREATE TABLE myemp(empno, ename, job, sal) AS SELECT * FROM sila.emp; Vagy oszlopnevek megadása nélkül (ilyenkor a SELECT-től öröklődnek az oszlopnevek) CREATE TABLE t1 AS SELECT ... pl. CREATE TABLE myemp2 AS SELECT * FROM sila.emp; -------------------------------------------------------------------------------- -- -- Az Oracle néhány alapvető adattípusa -- -- SZÁMOK -------------------------------------------------------------------- REM number(x,y) -- max. x jegyű szám, ebből y tizedesjegy. (pozitív/negatív) REM number(x) -- max. x jegyű szám, 0 tizedesjeggyel. (pozitív/negatív) REM int = integer = number(38) REM positive és natural -- csak PL/SQL-ben van. -- STRINGEK ------------------------------------------------------------------ REM varchar2(17) -- String. Meg kell adni a maximális hosszát. -- Túl hosszú string értékül adása hibát eredményez. REM char(15) -- Fix hosszúságú string. -- Túl hosszú ==> HIBA -- Túl rövid ==> kiegészíti szóközökkel. -- A karakter literálok char() típusúak. Char() típus esetén -- összehasonlításkor eltekint a sorvégi szóközöktől. Pl: 'str' = 'str ' -- Stringen belül megkülönbözteti a kis- és nagybetűket. Pl: 'str' != 'STR' -- Varchar2() esetén számít a sorvégi szóköz is. -- DÁTUM ÉS IDŐ -------------------------------------------------------------- REM date -- dátum, és idő (másodperc pontossággal van tárolva) -- Te is megváltoztathatod (max 38 karakter hosszú dátum fog kiíródni): ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD (fmDay) HH24:MI.SS'; ALTER SESSION SET NLS_DATE_LANGUAGE='hungarian'; SELECT sysdate FROM dual; -- Dátumformátumok lásd dokumentáció -- Dátumaritmetika: -- Tfh. d, d1, d2 egy-egy date típusú objektum (pl. egy-egy tábla oszlopa). REM d+1 -- d-hez képest holnap ilyenkor REM d-2 -- d-hez képest tegnap előtt ilyenkor REM sysdate+7 -- egy hét múlva ilyenkor REM d+1/24 -- d-hez képest egy óra múlva REM d2-d1 -- d1 és d2 közt eltelt idő napokban REM (d2-d1)*24*60*60 -- d1 és d2 közt eltelt idő másodpercekben REM months_between(d2,d1) -- d1 és d2 közt eltelt idő hónapokban -- Az utóbbi három esetben pozitív illetve negatív eredményt is kaphatunk. -- d2 > d1 => (+) -- d2 < d1 => (-) -- További dátumfüggvények lásd dokumentáció -- konverzió ----------------------------------------------------------------- REM to_date('2030-OCT-28') -- NLS_DATE_FORMAT alapján konvertálja REM to_date('2030-12','YYYY-MM') -- formátum megadása => 2030-12-01 0:00.00 -- Amit nem adunk meg, az default érték lesz. -- Default dátum: folyó év, folyó hó, elseje, éjfél REM to_date(2462803,'J') -- Julianus naptár 2462803-adik napja, éjfél REM to_char(datum) -- NLS_DATE_FORMAT alapján állítja elő REM to_char(datum, 'HH24:MI.SS') -- formátum alapján állítja elő a stringet REM to_char(127.14) -- szám -> string REM to_number('135.00167') -- string -> szám REM to_number('abc') -- ORA-01722: invalid number -- Nincs boolean típus (PL/SQL-ben van: TRUE, FALSE, NULL) -- Bármilyen típusú oszlopban lehet NULL (kitöltetlen cella). -- Két NULL soha sem egyenlő, és soha sem különbözik egymástól. -- Annak vizsgálata, hogy valami NULL-e: REM x IS NULL REM x IS NOT NULL -- pl. SELECT * FROM dolgozo WHERE jutalek IS NOT NULL;