Sistemul Oracle furnizeaza functii care permit manipularea cu usurinta a informatiei din baza de date si conversia diferitelor tipuri de date.
Functii pentru manipularea caracterelor - accepta argumente de tip caracter si poate returna atat caractere cat si valori numerice:
- LOWER(sir)- transforma caracterele sirului in litere mici;
- UPPER(sir) - transforma caracterele sirului in majuscule;
- INITCAP(sir) -transforma primul caracter al fiecarui cuvant din sir in majuscula ;
- CONCAT(sir1,sir2) - concateneaza cele doua siruri; e echivalent cu operatorul de concatenare(||);
- SUBSTR(sir,m[,n]) - extrage din sirul de caractere un subsir de lungime m incepand de la pozitia n;
- LENGTH(sir) - returneaza lungimea unui sir de caractere;
- INSTR(sir1,sir2[,n[,m]]) - returneaza pozitia celei de-a m-a aparitii a lui sir2 in sir1 incepand cu pozitia n
- (implicit m=n=1), iar daca nu se gaseste intoarce valoarea 0;
- REPLACE(sir,a[,b]) - inlocuieste in sirul de caractere secventa a prin secventa b, iar daca lipseste b, atunci
- are loc stergerea lui a;
- LTRIM(sir) / RTRIM(sir) - sterge spatiile libere din stanga sirului de caractere, respectiv din dreapta lui;
- LPAD(sir1,n,sir2) / RPAD(sir1,n,sir2) - sir1 este completat la stanga, respectiv la dreapta, pana la lungimea
- n, prin sir2;
- SOUNDEX(sir) - reprezentarea fonetica a sirului de caractere.
Functii aritmetice - pentru manipularea numerelor (utilizate in clauza SELECT sau in conditia clauzei WHERE)- accepta argumente numerice si returneaza valori numerice:
- ABS(n) - valoarea absoluta a numarului;
- CEIL(n) - cel mai mic intreg mai mare sau egal cu n;
- FLOOR(n) - cel mai mare intreg mai mic sau egal cu n;
- MOD(m,n) - restul impartirii lui m prin n;
- SQRT(m) - radacina patrata din m (null, daca m<0);
- ROUND(n[,m]) - numarul n este rotunjit la m pozitii zecimale;
- TRUNC(n[,m]) - numarul n este trunchiat la m pozitii zecimale;
- LN(x) - implementeaza functia logaritmica ln(x)(logaritm natural);
- EXP(x) - implementeaza functia exponentiala;
- POWER(m,n) - implementeaza functia putere (m la puterea n);
- SIGN(n) - implementeaza functia semn asociata lui n;
- GREATEST(m,n) - cel mai mare dintre numerele m si n;
- LEAST(m,n) - cel mai mic dintre numerele m si n.
Exemple:
- LOWER('SQL Course') -> sql course
- UPPER('SQL Course') -> SQL COURSE
- INITCASE('SQL Course') -> Sql Course
- SELECT 'The job title for '||INITCAP(ename)||' is '||LOWER(job) AS "EMPLOYEE DETAILS"FROM emp;
- SELECT empno,ename,deptno FROM emp WHERE ename='blake';
- SELECT empno,ename,deptno FROM emp WHERE LOWER(ename)='blake';
- SELECT empno, INITCAP(ename), deptno FROM emp WHERE LOWER(ename) = 'blake';
Functii Rezultat
CONCAT('Good', 'String') GoodString
SUBSTR('String',1,3) Str
LENGTH('String') 6
INSTR('String', 'r') 3
LPAD(sal,10,'*') ******5000
ROUND(45.926, 2) 45.93
TRUNC(45.926, 2) 45.92
MOD(1600, 300) 100
- SELECT ename, CONCAT (ename, job), LENGTH(ename), INSTR(ename, 'A') FROM emp WHERE SUBSTR(job,1,5) = 'SALES';
- SELECT ename, CONCAT(ename, job), LENGTH(ename), INSTR(ename, 'A') FROM emp WHERE SUBSTR(ename, -1, 1) = 'N';
- SELECT ename, sal, comm, MOD(sal, comm) FROM emp WHERE job = 'SALESMAN';
Functii pentru manipularea datelor calendaristice - accepta argumente de tip data calendaristica si returneaza tot date calendaristice, cu exceptia functiei MONTHS_BETWEEN, care returneaza un numar.
Oracle pastreaza datele intr-un format numeric intern (7 bytes): secol, an, luna, zi, ora, minut, secunda. Formatul implicit extern pentru data calendaristica este un sir de forma 'DD-MON-YY'. SYSDATE este o functie care returneaza data curenta a sistemului. DUAL este un tabel virtual (fictiv) folosit pentru a vizualiza SYSDATE.
Ex: afisarea datei curente folosind tabelul DUAL:
SELECT SYSDATE FROM SYS.DUAL;
Deoarece Oracle pastreaza datele ca numere, pot fi realizate calcule folosind operatori aritmetici (+,-). Pot fi adunate sau scazute atat numere, cat si date calendaristice. Se pot realiza urmatoarele operatii:
Operatia Rezultat Descriere
date + number Date Adauga un numar de zile la o data
date - number Date Scade un numar de zile dintr-o data
date - date Numar de zile Scade o data din alta
date + number/24 Date Adauga un numar de ore unei date
Exemple: Se afiseaza numele angajatilor din departamentul 10 si numarul de saptamani cat acestia au lucrat de la angajare.
SELECT ename, (SYSDATE-hiredate)/7 "Saptamani lucrate"
FROM emp
WHERE deptno=10;
Functii pentru date:
FUNCTIE DESCRIERE Tip
SYSDATE Data si ora curenta Date
MONTHS_BETWEEN(d1,d2) Numarul de luni dintre doua date Number
ADD_MONTHS(d,n) Adauga o luna calendaristica la o data Date
NEXT_DAY(d) Ziua urmatoare datei specificate Date
LAST_DAY(d) Ultima zi a unei luni Date
ROUND(d[,'fmt']) Data ,,rotunjita" Date
TRUNC(d[,'fmt']) Data ,,trunchiata" Date
- MONTHS_BETWEEN(d1,d2)- returneaza numarul de luni dintre d1(data1) si d2(data2). Rezultatul poate fi o valoare pozitiva sau negativa. Partea zecimala (in cazul in care apare) reprezinta o parte dintr-o luna.
- ADD_MONTHS(d,n)- adauga n luni calendaristice la o data d; n trebuie sa fie intreg si poate fi negativ.
- NEXT_DAY(d,'char')- gaseste data urmatoarei zile specificate a saptamanii ('char') care urmeaza datei (d); char poate fi un numar reprezentand o zi sau un sir de caractere.
- LAST_DAY(d)- gaseste data ultimei zile a lunii care contine data d.
- ROUND(d[,'fmt'])- returneaza data d rotunjita la elementul specificat de formatul fmt. Daca fmt este omis, data d e rotunjita la cea mai apropiata data.
- TRUNC(d[,'fmt'])- returneaza data d trunchiata la formatul specificat prin fmt . Daca fmt e omis, data d e trunchiata la cea mai apropiata valoare.
Exemple:
- MONTHS_BETWEEN('01-SEP-95','11-JAN-94') 19,6774194
- ADD_MONTHS('11-JAN-94',6) '11-JUL-94'
- NEXT_DAY('01-SEP-95','FRIDAY') '08-SEP-95'
- LAST_DAY('01-SEP-95') '30-SEP-95'
- ROUND('25-JUL-95','MONTH') 01-AUG-95
- ROUND('25-JUL-95','YEAR') 01-JAN-96
- TRUNC('25-JUL-95','MONTH') 01-JUL-95
- TRUNC('25-JUL-95','YEAR') 01-JAN-95
1. Sa se afiseze pentru toti angajatii care lucreaza de mai putin de 200 de luni, codul, data angajarii, numarul de luni lucrate, ultimele 6 luni revazute, prima vineri dupa data angajarii si ultima zi a lunii in care a fost angajat.
SELECT empno, hiredate,
MONTHS_BETWEEN(SYSDATE, hiredate) "DURATA ANGAJARII",
ADD_MONTHS(hiredate, 6) REVIEW,
NEXT_DAY(hiredate, 'FRIDAY'), LAST_DAY(hiredate)
FROM emp
WHERE MONTHS_BETWEEN (SYSDATE, hiredate)<200;
2. Sa se afiseze codul angajatilor, data angajarii si luna folosind functiile ROUND si TRUNC pentru cei care lucreaza din 1987.
SELECT empno, hiredate,
ROUND(hiredate, 'MONTH'), TRUNC(hiredate, 'MONTH')
FROM emp
WHERE hiredate like '%87';
Functii grup
Functiile grup opereaza pe ,,multimi" de linii si returneaza un rezultat pe grup. Aceste ,,multimi" de linii pot fi reprezentate de intregul tabel sau de tabelul impartit in grupuri. Sistemul Oracle accepta urmatoarele functii grup: COUNT, MIN, MAX, AVG, VARIANCE, STDDEV.
Functia Descriere
AVG([DISTINCT|ALL]n) Calculeaza valoarea medie a lui n, ignorand valorile
nule(null).
COUNT({*|[DISTINCT|ALL]expr}) Determina numarul de linii, unde expr e diferit de
null. Numara toate randurile selectate folosind *,
incluzand duplicatele si randurile cu valori null.
MAX([DISTINCT|ALL]expr) Determina valoarea maxima a expr, ignorand
randurile null.
MIN([DISTINCT|ALL]expr) Determina valoarea minima a expr, ignorand
randurile null.
STDDEV([DISTINCT|ALL]x) Determina deviatia standard a expr, ignorand
randurile null.
SUM([DISTINCT|ALL]n)
Documentul este oferit gratuit,
trebuie doar să te autentifici in contul tău.