CATEGORII DOCUMENTE |
Tipuri de date
Pentru memorarea datelor numerice, tipurile cele mai frecvent folosite sunt: NUMBER, INTEGER, FLOAT, DECIMAL.
Pentru memorarea sirurilor de caractere, cele mai frecvent tipuri de date utilizate sunt: CHAR, VARCHAR2 si LONG.
Exista restrictii referitoare la folosirea tipului de date LONG.
Intr-un tabel poate sa fie o singura coloana de tip LONG.
Nu pot fi comparate doua siruri de caractere de tip LONG.
O coloana de tip LONG nu poate fi parametru intr-o procedura.
O functie nu poate intoarce ca rezultat o valoare de tip LONG.
O coloana de tip LONG nu poate fi folosita in clauzele WHERE, ORDER BY, GROUP BY, CONNECT.
Operatorii sau functiile Oracle nu pot fi folositi in SQL pentru a modifica coloane de tip LONG.
O coloana de tip LONG nu poate fi indexata.
Alte tipuri de date scalare furnizate de SQL sunt NCHAR si NVARCHAR2, folosite pentru reprezentarea caracterelor limbilor nationale.
Informatii relative la timp sau data calendaristica se obtin utilizand tipul DATE. Pentru fiecare data de tip DATE sunt depuse: secolul, anul, luna, ziua, ora, minutul, secunda. Pentru o coloana de tip DATE sistemul rezerva 7 bytes, indiferent daca se memoreaza doar timpul, sau doar data calendaristica.
Formatul implicit al datei se defineste cu ajutorul parametrului de initializare NLS_DATE_FORMAT. In general, acest parametru este setat la forma DD-MON-YY. Daca nu este specificat timpul, timpul implicit este 12:00:00.
In Oracle8, alaturi de aceste tipuri scalare, au fost introduse tipurile de date LOB (Large Objects), care specifica locatia unor obiecte de dimensiuni mari.
Oracle9i introduce noi tipuri de date pentru timp:
TIMESTAMP precizie_fractiuni_secunda) cuprinde valori pentru anul, luna si ziua unei date calendaristice, dar si valori pentru ora, minut, secunda
INTERVAL YEAR precizie_an TO MONTH stocheaza o perioada de timp specificata in ani si luni, unde precizie_an reprezinta numarul de cifre din campul YEAR.
INTERVAL DAY (precizie_zi) TO SECOND prec_fractiuni_sec) stocheaza o perioada de timp reprezentata in zile, ore, minute si secunde.
Exemplu
Sa se creeze un tabel cu trei coloane, inceput, durata_1, durata_2. Coloana inceput va cuprinde valori ce reprezinta momente de timp, inclusiv fractiunile de secunda corespunzatoare. Valorile coloanei durata_1 vor fi intervale de timp specificate in numar de zile, ore, minute si secunde. Coloana durata_3 va contine intervale de timp precizate in numar de ani si luni. Sa se insereze o inregistrare in acest tabel.
CREATE TABLE timp(inceput TIMESTAMP,
durata_1 INTERVAL DAY(2) TO SECOND(3),
durata_2 INTERVAL YEAR TO MONTH);
INSERT INTO timpVALUES (TIMESTAMP '1997-01-31 09:26:50.124',
INTERVAL '23 7:44:22' DAY TO SECOND,
INTERVAL '19-02' YEAR TO MONTH);
INTERVAL YEAR TO MONTH
INTERVAL '123' YEAR(3) un interval de 123 ani
INTERVAL '30' MONTH(2) un interval de 30 luni
INTERVAL '123' YEAR eroare, deoarece implicit precizia este 2,
iar 123 are 3 digiti
INTERVAL DAY TO SECOND
INTERVAL '180' DAY(3) un interval de 180 zile
INTERVAL '4 5:12' DAY TO MINUTE un interval de 4 zile, 5 ore si 12 minute
INTERVAL '400 5' DAY(3) TO HOUR un interval de 400 zile si 5 ore
Exemplu
CREATE TABLE exemplu
(durata INTERVAL YEAR(3) TO MONTH);
INSERT INTO exemplu
VALUES (INTERVAL '120' MONTH(3));
SELECT TO_CHAR(SYSDATE+durata, 'DD-mon-YYYY')
FROM exemplu;
Exemplu
CREATE TABLE noi_carti
(codel NUMBER,
.
start_data TIMESTAMP);
SELECT start_data
FROM noi_carti;
Pentru informatii de tip TIMESTAMP, numarul maxim de digiti pentru fractiuni de secunda este 9, implicit este 6.
Rezultatele cererii:
15-JUN-03 12.00.00.000000 AM
23-SEP-03 12.00.00.000000 AM
Pentru informatii de tip DATE, formatul implicit ar fi fost DD-MON-RR
Camp |
Valori valide pentru date calendaristice |
Valori valide pentru intervale |
YEAR |
De la -4712 la 9999 (cu exceptia anului 0). |
Orice valoare intreaga. |
MONTH |
De la 01 la 12. |
De la 0 la 11. |
DAY |
De la 01 la 31 (limitat de valorile campurilor MONTH si YEAR, corespunzator regulilor calendarului curent). |
Orice valoare intreaga. |
HOUR |
De la 00 la 23. |
De la 0 la 23. |
MINUTE |
De la 00 la 59. |
De la 0 la 59. |
SECOND |
De la 00 la 59.9(n), unde "9(n)" este precizia fractiunilor de secunda. |
De la 0 la 59.9(n), unde "9(n)" este precizia fractiunilor de secunda. |
TIMEZONE_HOUR |
De la -12 la 13 (prevede schimbarile datorate trecerilor la ora de vara sau iarna). |
Nu se aplica. |
TIMEZONE_MINUTE |
De la 00 la 59. |
Nu se aplica. |
Sistemul Oracle permite constructia de expresii folosind valori de tip data calendaristica si interval. Operatiile care pot fi utilizate in aceste expresii si tipul rezultatelor obtinute sunt urmatoarele:
Data + Interval, Data - Interval, Interval + Data, iar rezultatul este de tip data calendaristica;
Data - Data, Interval + Interval, Interval - Interval, Interval * Number, Number * Interval, Interval / Number, iar rezultatul este de tip interval.
Modele de format
Un model de format este un literal caracter care descrie formatul valorilor de tip DATE sau NUMBER stocate intr-un sir de caractere. Atunci cand se converteste un sir de caractere intr-o data calendaristica sau intr-un numar, modelul de format indica sistemului cum sa interpreteze sirul respectiv. In instructiunile SQL se poate folosi un model de format ca argument al functiilor TO_CHAR si TO_DATE. In felul acesta se poate specifica formatul folosit de sistemul Oracle pentru a returna sau a stoca o valoare in/din baza de date. Un model de format nu schimba reprezentarea interna a valorii in baza de date.
O parte dintre elementele cel mai frecvent intalnite ale unui format de tip numeric sunt sintetizate in tabelul urmator.
Element |
Exemplu |
Descriere |
, (virgula) | Plaseaza o virgula in pozitia specificata. Intr-un model de format numeric pot fi precizate mai multe virgule, dar o virgula nu poate aparea in partea dreapta a punctului zecimal. |
|
. (punct) |
Plaseaza un punct zecimal in pozitia specificata. Intr-un format numeric, se poate specifica cel mult un punct zecimal. |
|
Include semnul "$" in fata unei valori. |
||
Plaseaza zerouri in fata sau la sfarsitul valorii. |
||
Intoarce valoarea cu numarul specificat de cifre. Valoarea va avea un spatiu, respectiv un minus in fata daca este pozitiva, respectiv negativa. |
||
C |
C999 |
Plaseaza in pozitia specificata simbolul ISO pentru monede (valoarea curenta a parametrului NLS_ISO_CURRENCY). |
D |
99D99 |
Plaseaza in pozitia specificata caracterul zecimal, care este valoarea curenta a parametrului NLS_NUMERIC_CHARACTER. Valoarea implicita este punctul. Se poate specifica cel mult un caracter zecimal intr‑un model de format numeric. |
EEEE |
9.9EEEE |
Returneaza o valoare folosind notatia stiintifica. |
L |
L999 |
Intoarce in pozitia specificata simbolul monedei locale (valoarea curenta a parametrului NLS_CURRENCY). |
MI |
9999MI | Plaseaza semnul minus la sfarsitul valorilor negative si un spatiu la sfarsitul celor pozitive. Acest element poate fi specificat numai pe ultima pozitie a modelului de format numeric. |
S |
S9999 9999S |
Plaseaza semnele plus sau minus la inceputul sau la sfarsitul valorii. Acest element poate aparea doar pe prima sau ultima pozitie a modelului de format numeric. |
Modelele de format pentru date calendaristice pot fi utilizate in cadrul urmatoarelor functii:
TO_DATE, pentru a converti o valoare de tip caracter, care este intr-un alt format decat cel implicit, intr-o valoare de tip DATE;
TO_CHAR, pentru a converti o valoare de tip DATE, care este intr-un alt format decat cel implicit, intr-un sir de caractere.
Un model de format pentru date calendaristice este alcatuit dintr-unul sau mai multe elemente specifice. Scrierea cu litere mari sau mici a cuvintelor, abrevierilor sau a numeralelor romane este respectata in elementul de format corespunzator. De exemplu, modelul de format DAY" produce cuvinte cu majuscule, cum ar fi FRIDAY", iar Day" si day" au ca rezultat Friday", respectiv friday
Intr-un model de format pentru date calendaristice se pot preciza semne de punctuatie si literale caracter, incluse intre ghilimele. Toate aceste caractere apar in valoarea returnata pe locul specificat in modelul de format.
Element |
Explicatie |
AD sau A.D. |
Indicatorul AD (Anno Domini) cu sau fara puncte. |
BC sau B.C. |
Indicatorul BC (Before Christ) cu sau fara puncte. |
D | Numarul zilei din saptamana (1-7). Duminica este considerata prima zi a saptamanii. |
DAY |
Numele zilei completat cu spatii, pana la lungimea de 9 caractere. |
DD |
Numarul zilei din luna (1-31). |
DDD |
Numarul zilei din an (1-366). |
DY |
Numele zilei din saptamana, printr-o abreviere de 3 litere. |
FF |
Fractiunile de secunda. |
HH sau HH12 |
Ora din zi (1-12). |
HH24 |
Ora din zi (0-23). |
MI |
Minutele din ora (0-59). |
MM |
Luna din an (01-12). |
MON |
Numele lunii, printr-o abreviere de 3 litere. |
MONTH |
Numele lunii completat cu spatii, pana la lungimea de 9 litere. |
RM |
Luna in cifre romane (I-XII). |
RR |
Anul cel mai apropiat de data curenta. |
RRRR |
Accepta intrarea atat cu 2, cat si cu 4 cifre. Daca anul de intrare se da cu 2 cifre, furnizeaza acelasi lucru ca si formatul RR. |
SS |
Secundele din minut (0-59). |
SSSSS |
Secundele trecute de la miezul noptii (0-86399). |
TZH |
Ora regiunii. |
TZM |
Minutul regiunii. |
Y,YYY |
Anul scris cu virgula dupa prima cifra. |
YEAR sau SYEAR |
Anul in litere ("S" prefixeaza anii i.Hr. cu semnul minus). |
YYYY sau SYYYY |
Anul cu 4 cifre. |
YYY, YY sau Y |
Ultimele cifre ale anului. |
Modificatorii FM si FX pot fi utilizati in modelele de format din cadrul functiei TO_CHAR, controland completarea cu spatii si verificarea exacta a formatelor. Un modificator poate sa apara intr-un model de format de mai multe ori. In acest caz, efectele sale sunt active pentru portiunea din model care incepe la prima aparitie si apoi dezactivate pentru portiunea din model care urmeaza celei de-a doua aparitii s.a.m.d.
Modificatorul FM (Fill Mode) suprima completarea cu spatii in valoarea returnata de functia TO_CHAR, iar FX (Format eXact) impune corespondenta exacta dintre argumentul de tip caracter si modelul de format precizat pentru data calendaristica respectiva.
Valoarea null, reprezentand lipsa datelor, nu este egala sau diferita de nici o alta valoare, inclusiv null.
Totusi, exista doua situatii in care sistemul Oracle considera doua valori null ca fiind egale: la evaluarea functiei DECODE si daca valorile null apar in chei compuse. Doua chei compuse care contin valori null sunt considerate identice daca toate componentele diferite de null sunt egale.
Pseudocoloane
O pseudocoloana se comporta ca si o coloana a unui tabel, dar nu este stocata efectiv intr-un tabel. Se pot face interogari asupra pseudocoloanelor, dar nu se pot insera, actualiza sau sterge valorile acestora.
LEVEL returneaza nivelul liniilor rezultat ale unei cereri ierarhice.
CURRVAL si NEXTVAL sunt pseudocoloane utile in lucrul cu secvente si sunt tratate in sectiunea corespunzatoare acestora.
ROWID returneaza adresa unei linii din baza de date, furnizand modul cel mai rapid de a accesa linia respectiva. In sistemul Oracle, valorile acestei pseudocoloane contin urmatoarele informatii necesare pentru a localiza o linie: numarul obiectului, blocul de date, fisierul de date, linia in cadrul blocului de date. Valorile pseudocoloanei ROWID sunt de tipul ROWID sau UROWID.
ROWNUM returneaza numarul de ordine al liniilor rezultate in urma executiei unei cereri. Pseudocoloana poate fi utilizata pentru a limita numarul de linii returnate. Daca este folosita clauza ORDER BY intr-o subcerere, iar conditia in care apare ROWNUM este plasata in cererea de nivel superior, atunci conditia va fi aplicata dupa ordonarea liniilor.
Exemplu
Sa se afiseze informatii despre operele de arta avand cele mai mici 10 coduri.
SELECT *
FROM (SELECT * FROM opera ORDER BY cod_opera)
WHERE ROWNUM < 11;
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 947
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved