Az Oracle néhány alapvető adattípusa

-- SZÁMOK --------------------------------------------------------------------
-- number(x,y)  -- max. x jegyű szám, ebből y tizedesjegy. (pozitív/negatív)
-- number(x)    -- max. x jegyű szám,  0   tizedesjeggyel. (pozitív/negatív)
-- int = integer = number(38)
-- numeric(x,y) = number(x,y)
-- positive és natural          -- csak PL/SQL-ben van.

-- STRINGEK ------------------------------------------------------------------
-- varchar2(17) -- String. Meg kell adni a maximális hosszát.
-- varchar() = varchar2()
-- Túl hosszú string értékül adása hibát eredményez.

-- 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  '  (!!!)
-- például: SELECT * FROM dolgozo WHERE 'str ' = 'str';  -> az összes sorra igaz

-- varchar2 típusú adatok összehasonlításakor számít a sorvégi szóköz
-- például: SELECT * FROM dolgozo WHERE CAST('str ' AS VARCHAR(4)) = 'str'; 
                  -> az összes sorra hamis

-- 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Ő --------------------------------------------------------------
-- date        -- dátum, és idő (másodperc pontossággal van tárolva)

-- Mi is megváltoztathatjuk  a dátumformátumot (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'; -- english, american, french, german
SELECT sysdate FROM dual;
SELECT to_char(sysdate, 'day') FROM dual;

-- Dátumformátumok lásd dokumentáció

-- Dátum aritmetika:
-- Tfh. d, d1, d2 egy-egy date típusú objektum (pl. egy-egy tábla oszlopa).
-- d+1                    -- d-hez képest holnap ilyenkor
-- d-2                    -- d-hez képest tegnap előtt ilyenkor
-- sysdate+7              -- egy hét múlva ilyenkor
-- d+1/24                 -- d-hez képest egy óra múlva
-- d2-d1                  -- d1 és d2 közt eltelt idő napokban
-- (d2-d1)*24*60*60       -- d1 és d2 közt eltelt idő másodpercekben
-- 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ó -----------------------------------------------------------------
-- to_date('2030-OCT-28')         -- NLS_DATE_FORMAT alapján konvertálja
-- 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
-- to_date(2462803,'J')           -- Julianus naptár 2462803-adik napja, éjfél
-- to_char(datum)                 -- NLS_DATE_FORMAT alapján állítja elő
-- to_char(datum, 'HH24:MI:SS')   -- formátum alapján állítja elő a stringet
-- to_char(127.14)                -- szám   -> string
-- to_number('135.00167')         -- string -> szám
-- 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ő, de az sem igaz rájuk, hogy nem egyenlők (<>).
-- Annak vizsgálata, hogy valami NULL-e:
--  x IS NULL
--  x IS NOT NULL

-- pl. SELECT * FROM   dolgozo WHERE jutalek IS NOT NULL;