ALTE DOCUMENTE
|
|||||
Functiile avansate seamana cu functiile simple cu exceptia faptului ca aceste functii trateaza expresii mai complexe si sunt folosite mai rar. Aceste functii sunt pur si simplu un set de instructiuni SQL si PL/SQL care formeaza o unitate logica si efectueaza o anumita sarcina Ati putea, de exemplu, sa aveti o functie avansata care sa creeze o reproducere fonetica a unei variabile de intrare. Pentru informatii suplimentare în legatura cu functiile si cu modul de utilizare a lor, consultati Capitolul 13, "Functii".
Functiile sunt de doua tipuri: primele actioneaza asupra unei singure linii de date, în timp ce celelalte actioneaza asupra unor linii multiple de date. Functiile avansate sunt obiecte Oracle de sine statatoare care rezida în schema dumneavoastra. Ele sunt asemanatoare operatorilor, cu exceptia faptului ca functiile pot primi argumente multiple.
Functiile avansate va permit sa rezolvati simplu probleme si sarcini specifice, în special daca procesarile dumneavoastra implica sarcini repetitive.
Ca si functiile simple, functiile avansate va ofera avantaje în urmatoarele domenii:
Performanta-Performantele serverului cresc deoarece functia este stocata în forma compilata si prin urmare este disponibila pentru a fi executata. Nu este necesara compilarea functiilor înainte de executarea lor. O crestere suplimentara a performantelor se datoreaza reducerii traficului în retea deoarece functiile se afla deja stocate în memorie.
Alocarea memoriei-Prin utilizarea functiilor avansate se îmbunatateste alocarea memoriei deoarece functiile beneficiaza de caracteristicile mediului Oracle de partajare a memoriei. Aceasta înseamna că 22122f520w ; este suficient sa fie încarcata în memorie o singura copie a functiei în vederea executarii ei de mai multi utilizatori.
Integritate-Functiile avansate reprezinta metode unitare de a efectua diverse activitati.
Dezvoltarea aplicatiilor-Timpul de dezvoltare se reduce prin faptul ca programele beneficiaza de un set comun de functii. Aceasta elimina necesitatea de a crea functionalitatea acestora pornind de la zero.
Paragrafele care urmeaza descriu fiecare functie avansata, precum si sintaxa ei generala. Sintaxa generala a functiilor este urmatoarea:
functie (argument1, argument2, ...)
Sunt prezentate pe rând cele doua categorii: functii mono-linie si functii de grup.
INITCAP |
Returneaza sirul de intrare dupa trecerea la majuscula a primei litere a fiecarui cuvânt si a tuturor celorlalte la litere mici. Cuvintele sunt delimitate prin blancuri sau orice caracter nenumeric. |
Sintaxa: initcap(char) Exemplu: select initcap('ordine de vânzare') from dual; Date de iesire: initcap('ordine de vânzare') Ordine De Vânzare |
|
INSTR |
Returneaza pozitia unui set de caractere în sirul de intrare. Evaluarea sirului de intrare începe din pozitia specificata si continua pâna când sunt gasite toate aparitiile specificate Aceasta functie returneaza numarul de caractere de la punctul de plecare si satisface numarul de aparitii. |
Sintaxa: Instr(sir de intrare,sir de cautare,pozitie începere,numar *"*-aparitii) Exemplu: select instr('Sells sea Shells by the Seaside','Se',l,3) ^from dual; Date de iesire: INSTR('SellsSeaShellsbytheSeaside', 'Se',1,3) |
|
INSTRB |
Returneaza pozitia unui set de caractere în sirul de intrare. Evaluarea sirului de intrare începe din pozitia specificata si continua pâna când sunt gasite toate aparitiile specificate. Aceasta functie returneaza numarul de octeti de la punctul de plecare si satisface numarul de aparitii. |
Sintaxa: instrbtsir de intrare,sir de cautare,pozitie începere,numar *"»-aparitii) Exemplu: select instrb('Sells sea Shells by the Seaside','Se',l,3) **from dual; Date de iesire: INSTRB('SellsSeaShellsbytheSeaside','Se',1,3) "' " " ~25 |
|
SOUNDEX |
Returneaza reprezentarea fonetica a sirului de caractere de intrare. Aceasta functie poate fi folosita pentru a compara doua cuvinte care se scriu diferit însa suna la fel în engleza. |
Sintaxa: soundextsir de caractere) Exemplu: select nume from ang WHERE SOUNDEX(nume) = SOUNDEX('smith'); Date de iesire: NUME Smith Smyth |
|
TRANSLATE |
Aceasta functie evalueaza caracterele unui sir, apoi verifica daca vreunul dintre aceste caractere se gaseste în sirul de cautare predefinit. Caracterele gasite sunt înlocuite cu caracterele corespunzatoare (din punct de vedere pozitional) din sirul de înlocuire. |
Sintaxa: translate(sir de intrare, sir de cautare, sir de înlocuire) Exemplu: select translate('abcdefghi','befi','1234567890') from dual; Aceasta functie are sirul de intrare abcdefghi, un sir de cautare egal cu befi si un sir de înlocuire egal cu 1 2 3 4 5 6 7 8 9 O Date de iesire: TRANSLATE alcd23gh4 |
Deoarece literele acdgh nu exista în sirul de cautare, ele nu sunt convertite si îsi pastreaza valorile initiale. Literele befi sunt în sirul de cautare si în consecinta sunt convertite la noua valoare înlocuirile se efectueaza pe criterii pozitionale, deci litera b va fi înlocuita cu l, litera e va fi înlocuita cu 2 si asa mai departe.
Functiile numerice avansate primesc la intrare date numerice si returneaza valori numerice.
CELL |
Returneaza cel mai mic numar întreg care este mai mare sau egal cu valoarea de intrare. |
Sintaxa: cell(valoare) Exemplu: select ceil(23.170) from dual; Date de iesire: CEIL(23.1^6) |
|
COS |
Returneaza cosinusul valorii de intrare. |
Sintaxa: cos(valoare) Exemplu: select cos(180*3.14159/180) from dual; Date de iesire: COS(180*3.14159/180) |
|
EXP |
Returneaza valoarea e ridicata la puterea n. Oracle defineste valoarea e ca fiind 2.718 |
Sintaxa: exp(n) Exemplu: select exp(5) From dual; Date de iesire: EXP(5) |
|
FLOOR |
Returneaza cel mai mare numar întreg care este mai mic sau egal cu valoarea de intrare. |
Sintaxa: floor(valoare) Exemplu: select floor(23.183) from dual; Date de iesire: FLOOR(23.183) |
|
LN |
Returneaza logaritmul natural al valorii de intrare. |
Sintaxa: In(valoare) Exemplu: select In(3) from dual; Date de iesire: LN(3) |
|
LOG |
Returneaza logaritmul valorii de intrare în baza specificata. |
Sintaxa: log(baza,valoare) Exemplu: select log (10,100) FROM DUAL; Date de iesire: LOG(10,100) |
|
MOD |
Returneaza restul împartirii unei valori la un numar specificat. |
Sintaxa: mod(deîmpartit,împartitor) Exemplu: select mod(10,3) from dual; Date de iesire: MOD(10,3) 1 |
|
SIGN |
Returneaza 1 daca valoarea de intrare este mai mare decât zero, daca valoarea este mai mica decât zero si 0 daca valoarea este zero. |
Sintaxa: sign(valoare) Exemplu: select sign(-70) from dual; Date de iesire: SIGN(-70) |
|
SIN |
Returneaza sinusul valorii de intrare. |
Sintaxa: sin(valoare) Exemplu: select sin(30*3.141592653/180) FROM DUAL; Date de iesire: SIN(30*3.141592653/180) |
|
SQRT |
Returneaza radacina patrata a valorii de intrare. |
Sintaxa: sqrt(valoare) Exemplu: select sqrt(16) from dual; Date de iesire: SQRT(16) |
|
TAN |
Returneaza tangenta valorii de intrare. |
Sintaxa: tan(valoare) Exemplu: select tan(135*3.14159265393/180) from dual; Date de iesire: TAN(135*3.14159265393/180) |
Functiile data avansate opereaza cu elemente de intrare de tip date.
NEW_TIME |
Converteste ora de la o zona orara specificata la alta. Zonele orare sunt urmatoarele: |
||||||||||||||
|
|||||||||||||||
Sintaxa: new_time(data-ora, ora zonei curente, ora noii zone) Exemplu: select to_char (new_time(sysdate,'MST','PST'),'dd-mon-yy hh:mi:ss') from dual; Date de iesire: TO_CHAR(NEW_TIME(SYSDATE,'MST1,'PST'),'DD-MON-YY HH:MI:SS') 13-aug-95 11:28:21 |
|||||||||||||||
ROUND |
Rotunjeste data la unitatile specificate. Unitatile de rotunjire sunt urmatoarele: |
||||||||||||||
|
|||||||||||||||
Sintaxa: round(data,unitati de rotunjire) Exemplu: select round(tc_date('12-AUG-93'),'year') from dual; Date de iesire: ROUND(TO_DATE('12-AUG-93'), 'year') 01-JAN-94 |
Aceste functii convertesc sirurile de intrare de la un tip de date la altul.
CHARTOROWID |
Converteste o valoare de tip char sau varchar2 într-o valoare de tip rowid, pe care o returneaza. în general, aceasta functie este folosita la depanarea codului sursa întrucât programul Oracle efectueaza aceasta conversie automat, functia se foloseste rar. |
||||||||||
Sintaxa: chartorowid(char) Exemplu: select director_dept from 1st_dept where rowid = chartorowid('000000000D.0002 . 0002') from dual; Date de iesire: DIRECTOR_DEPT Baker |
|||||||||||
CONVERT |
Returneaza o valoare care a fost convertita de la im tip de data la altul. Seturile de caractere sunt urmatoarele: |
||||||||||
|
|||||||||||
Sintaxa: convert(valoare,set de caractere final,set de caractere initial) Exemplu: select convert( "Thomas', 'us7ascii', 'we8pc850') from dual; Date de iesire: CONVERT Thomas |
|||||||||||
ROWIDTOCHAR |
Converteste o valoare rowid la tipul char |
||||||||||
Sintaxa: rowidtochar(valoare) Exemplu: select rowid from ang where rowidtochar(rowid) like '%smyt%'; Date de iesire: ROWID 00000034.0003.0003 |
UID |
Returneaza indicativul utilizatorului curent al bazei de date. Aceasta functie nu primeste argumente; uid este o pseudocoloaria a bazei de date, care nu poate fi modificata de utilizator. |
||||||||||
Sintaxa: uid Exemplu: select uid from dual; Date de iesire: UID 972A8C32 |
|||||||||||
USERENV |
Returneaza informatii în legatura cu sesiunea curenta. Argumentele posibile pentru aceasta functie sunt urmatoarele: |
||||||||||
|
|||||||||||
Sintaxa: userenv(argument) Exemplu: select userenv('language') from dual; Date de iesire: USERENV('LANGUAGE') 7 american_america.us7ascn |
|||||||||||
V SIZE |
Returneaza numarul de octeti ocupati de valoarea de intrare în zona de stocare. |
||||||||||
Sintaxa: vsize(valoare) Exemplu: select vsize('ORACLE') f rom dual; Date de iesire: VSIZE('ORACLE'} |
Functiile avansate sunt rutine predefinite care manipuleaza date. Aceste functii avansate returneaza o valoare care reprezinta fie o descriere a valorii de intrare, fie rezultatul manipularii acesteia.
Functiile avansate vin în ajutorul celor care dezvolta aplicatii prin reducerea timpului necesar pentru dezvoltare, îmbunatatirea performantelor bazei de date si îmbunatatirea integritatii si securitatii datelor.
Functiile avansate se folosesc în instructiuni SQL. Ele pot fi folosite pentru evaluarea sau manipularea fiecarei linii dintr-o interogare sau pentru procesarea unui grup de linii ale rezultatului.
|