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;