Osnovni SQL tipovi podataka Tip podataka NUMBER(p,s) Opis Broj sa maksimalno p cifara od kojih je s maksimalni broj decimala (1 < p < 38) (- 84 < s < 127) VARCHAR2(s) Promenjivi niz karaktera maksimalne dužine s (1 < s < 4000) DATA Datum i vreme za period od 1. januar 4712 p.n.e do 31. decembra 9999. godine CHAR(s) LONG CLOB RAW i LONG RAW BLOB BFILE ROWID Fiksni niz karaktera dužine s (1 < s < 2000) Promenjivi niz karaktera (do 2GB) Niz karaktera (do 4 GB) Promenjivi binarni niz Binarni niz (do 4 GB) Binarni podaci smešteni u spoljnom fajlu Brojni sistem sa osnovom 64 koji predstavlja jedinstvenu adresu vrste u svojoj tabeli FUNKCIJE Dve vrste funkcija: jednoredne funkcije i grupne funkcije Jednoredne funkcije se dele u pet podgrupa: funkcije nad karakternim tipovima funkcije nad brojevnim tipovima funkcije nad datumskim tipovima funkcije za konverziju opšte funkcije Funkcije nad karakternim tipovima: Funkcije za manipulaciju veličine slova (LOWER, UPPER, INITCAP) Funkcije za manipulaciju karaktera (CONCAT, SUBSTR, LENGTH, INSTR, LPAD RPAD, TRIM, REPLACE) 1
LOWER (kolona/izraz) Prebacuje sve karaktere u mala slova UPPER (kolona/izraz) Prebacuje sve karaktere u velika slova INITCAP (kolona/izraz) Sva početna slova reči prebacuje u velika, ostala u mala slova CONCAT (kolona1/izraz1, kolona2/izraz2) Spaja dva niza karaktera (kao operator ) SUBSTR (kolona/izraz, m [,n]) Vraća podstring počev od pozicije m dužine n (ako je m negativno, broji od kraja stringa, ako je n izostavljeno, vraća podstring on m-te pozicije do kraja) LENGHT (kolona/izraz) Vraća broj karaktera izraza INSTR (kolona/izraz, string [,m] [,n]) Vraća poziciju n-te pojave podstringa počev od m-tog karaktera, default vrednost za m i n je 1 LPAD (kolona/izraz, n, string ) Dopunjava niz karaktera sa pojavama niza RPAD (kolona/izraz, n, string ) karaktera string do dužine n sa leve-desne TRIM (leading trailing both, karakter_trimovanja FROM string_za_trimovanje) REPLACE (tekst, string_za_pretragu, novi_string) Primer strane Izbacuje karakter sa početka/kraja/oba niza karaktera string_za_trimovanje Pronalazi string_za_pretragu u tekstu i zamenjuje svaku njegovu pojavu sa novi_string SELECT CONCAT(CONCAT (ime, ' '), prez) radnik ; SELECT CONCAT (ime ' ', prez) radnik ; SELECT LPAD(ime, 12, ' ab') radnik, prez ; SELECT ime, prez, LPAD(plata, 10, '*') ; SELECT TRIM(leading 'M' FROM ime) WHERE ime LIKE 'M%'; SELECT REPLACE(ime, 'a','a') 2
funkcije nad brojevnim tipovima (ROUND, TRUNC, MOD) ROUND (kolona/izraz, n) Zaokružuje broj na n decimala, ili ako je n izostavljeno, izostavlja decimalna mesta ako je n negativno zaokružuje brojeve sa leve strane decimalnog znaka TRUNC (kolona/izraz, n) Odbacuje decimale u zavisnosti od broja n (slično funkciji ROUND) MOD (m, n) Vraća ostatak pri deljenju brojeva m i n Primer: SELECT ROUND(avg (plata), 3) "Prosek plata" SELECT distinct TRUNC(46.927), TRUNC(46.927,2), TRUNC(46.927,-1) SELECT distinct ROUND(46.927), ROUND(46.927,2), ROUND(46.927,-1) CREATE TABLE prosta (x CHAR(1)); INSERT INTO prosta VALUES ( x ); funkcije nad datumskim tipovima MONTHS_BETWEEN (date1, date2) ADD_MONTHS (date, n) NEXT_DAY (date, danunedelji) LAST_DAY (date) ROUND (date [, 'fmt']) TRUNC (date [, 'fmt']) Broj meseci izmeñu dva datuma, rezultat može biti i negativan Dodaje broj meseci na datum Vraća datum narednog dana u nedelji, argument može biti i broj Vraća poslednji dan u mesecu Zaokružuje datum Skraćuje datum SELECT SYSDATE vreme 3
Primer 1. selektovati razliku izmeñu najstarijeg i najmlañeg radnika SELECT MAX(MONTHS_BETWEEN (r1.datr, r2.datr)) "Maximalna razlika" r1, radnik r2; Primer 2. Izračunati starost u mesecima SELECT MONTHS_BETWEEN ( '31-05-1978', SYSDATE) starost Primer 3. selektovati imena, prezimena radnika, njihove datume roñenja i datume kad su postali punoletni SELECT ime ' ' prez radnik, datr "Datum rodjenja", ADD_MONTHS(datr, 18*12) Punoletstvo ; Primer 4. Izlistati datum narednog petka. SELECT NEXT_DAY(SYSDATE, 6) "Naredni petak" Primer 5. Prikazati poslednji datum u ovom mesecu SELECT LAST_DAY(SYSDATE) Poslednji Primer 6. Zaokružiti i skratiti današnji datum SELECT ROUND (TO_DATE('25.08.1980'), 'MONTH'), ROUND (TO_DATE('25.08.1980'), 'YEAR'), TRUNC (TO_DATE('25.08.1980'), 'MONTH'), TRUNC (TO_DATE('25.08.1980'), 'YEAR') Operacije sa datumima Operacija Rezultat Opis DATE + broj DATE Dodaje broj dana na datum DATE broj DATE Oduzima broj dana od datuma DATE DATE Broj dana Nalazi razliku u datumima DATE + broj/24 DATE Dodaje broj sati na datum 4
Primer 1. Izračunati starost u mesecima SELECT SYSDATE - TO_DATE('31.05.1978') starost Funkcije za konverziju TO_CHAR TO_NUMBER TO_DATE Opšte funkcije NVL (izraz1, izraz2) NVL2 (izraz1, izraz2, izraz3) NULLIF (izraz1, izraz2) COALESCE (izraz1, izraz2,...,izrazn) NVL (izraz1, izraz2) NVL2 (izraz1, izraz2, izraz3) NULLIF (izraz1, izraz2) COALESCE (izraz1, izraz2,...,izrazn) Konvertuje NULL vrednost u neku konkretnu Ako vrednost izraza1 nije NULL vraća izraz2 inače vraća izraz3 Uporeñuje dva izraza. Ako su jednaki vraća NULL, ako nisu isti vraća prvi izraz Vraća prvi izraz koji nije NULL Primer 1. Prikazati imena i prezimena svih radnika. Posebno naznačiti da li je zaposleni direktor ili obiičan radnik SELECT ime "ime radnika", prez "prezime", NVL2(sef, 'radnik', 'direktor') funkcija ; Primer 2. Prikazati imena, prezimena i plate svih zaposlenih. U slučaju da radnik ima platu istu kao svoj šef, javiti poruku o greški. SELECT r1.ime ' ' r1.prez radnik, NVL(TO_CHAR(NULLIF(r1.plata, r2.plata)), 'GRESKA!!!' ) plata r1, radnik r2 WHERE r1.sef = r2.mbr (+); UPDATE radnik SET plata = 75000 WHERE mbr=101; 5