curs tipuri de date

28
1 Partea a II-a. LIMBAJUL SQL În această tema: se prezintă conceptele limbajului SQL în 5 lecţii, după cum urmează: INTRODUCERE. Concepte SQL LECŢIA 1. Limbajul de definire a datelor - DDL LECŢIA 2. Limbajul de interogare a datelor - DQL LECŢIA 3. Combinarea datelor din mai multe tabele Uniuni LECŢIA 4. Limbajul de manipulare a datelor DML LECŢIA 5. Limbajul de control al datelor DCL Introducere. Concepte SQL SQL a devenit limbajul universal pentru bazele de date relaţionale şi este acceptat de aproape toate sistemele SGBD moderne. Fără îndoială, acceptarea pe scară largă este rezultatul timpului şi eforturilor depuse pentru dezvoltarea caracteristicilor limbajului şi a standardelor, crescând nivelul de portabilitate a codului SQL între diferitele produseSGBD. Ce este SQL? SQL (Structured Query Language -limbaj structurat de interogare) este un limbaj standard folosit pentru crearea, actualizarea şi regăsirea informaţiilor stocate în baze de date prin intermediul sistemelor de gestionare a bazelor de date ( SGBD-uri). Numele limbajului poate fi pronunţat pe litere (es -q-el) sau la fel ca şi cuvântul englezesc „sequel". O interogare (query) este o simplă cerere transmisă către baza de date, la care aceasta răspunde într -o anumită formă. SQL este limbajul folosit cel mai frecvent pentru interogarea bazelor de date. SQL este considerat un limbaj neprocedural sau declarativ, ceea ce înseamnă că-i spuneţi calculatorului ce rezultate vreţi, fară să-i spuneţi cum să le obţină. De exemplu, dacă vreţi să obţineţi media numerelor de pe o coloană, folosiţi funcţia AVG. Nu este nevoie să număraţi valorile din coloană şi să împărţiţi suma acestora la numărul obţinut - procesorul limbajului SQL din SGBD se ocupă de toate aceste lucruri în locul dumneavoastră. Este important să înţelegi că SQL nu este un limbaj procedural, ca C, Pascal, Basic, FORTRAN, COBOL sau Ada. Un limbaj procedural foloseşte o serie de instrucţiuni executate secvenţial. De asemenea, limbajele procedurale includ instrucţiuni care pot modifica secvenţa de execuţie, prin ramificarea la alte porţiuni ale procedurii sau prin parcurgerea ciclică a unui set de instrucţiuni din procedură. Mulţi producători de sisteme SGBD oferă extensii procedurale ale limbajului

Upload: bagzylove

Post on 28-Sep-2015

43 views

Category:

Documents


6 download

DESCRIPTION

Manual despre tipuri de date.Pentru uz universitar.

TRANSCRIPT

  • 1

    Partea a II-a. LIMBAJUL SQL

    n aceast tema: se prezint conceptele limbajului SQL n 5 lecii, dup cum urmeaz:

    INTRODUCERE. Concepte SQL

    LECIA 1. Limbajul de definire a datelor - DDL LECIA 2. Limbajul de interogare a datelor - DQL LECIA 3. Combinarea datelor din mai multe tabele Uniuni LECIA 4. Limbajul de manipulare a datelor DML LECIA 5. Limbajul de control al datelor DCL

    Introducere. Concepte SQL

    SQL a devenit limbajul universal pentru bazele de date relaionale i este acceptat de aproape toate sistemele SGBD moderne. Fr ndoial, acceptarea pe scar larg este rezultatul timpului i eforturilor depuse pentru dezvoltarea caracteristicilor limbajului i a standardelor, crescnd nivelul de portabilitate a codului SQL ntre diferitele produseSGBD.

    Ce este SQL?

    SQL (Structured Query Language -limbaj structurat de

    interogare) este un limbaj standard folosit pentru crearea, actualizarea i regsirea informaiilor stocate n baze de date prin intermediul sistemelor de gestionare a bazelor de date ( SGBD-uri).

    Numele limbajului poate fi pronunat pe litere (es-q-el) sau la fel ca i cuvntul englezesc sequel". O interogare (query) este o simpl cerere transmis ctre baza de date, la care aceasta rspunde ntr-o anumit form. SQL este limbajul folosit cel mai frecvent pentru interogarea bazelor de date. SQL este considerat un limbaj neprocedural sau

    declarativ, ceea ce nseamn c-i spunei calculatorului ce rezultate vrei, far s-i spunei cum s le obin. De exemplu, dac vrei s obinei media numerelor de pe o coloan, folosii funcia AVG. Nu este nevoie s numrai valorile din coloan i s mprii suma acestora la numrul obinut - procesorul limbajului SQL din SGBD se ocup de toate aceste lucruri n locul dumneavoastr.

    Este important s nelegi c SQL nu este un limbaj procedural, ca C, Pascal, Basic, FORTRAN, COBOL sau Ada. Un limbaj procedural

    folosete o serie de instruciuni executate secvenial. De asemenea, limbajele procedurale includ instruciuni care pot modifica secvena de execuie, prin ramificarea la alte poriuni ale procedurii sau prin parcurgerea ciclic a unui set de instruciuni din procedur. Muli productori de sisteme SGBD ofer extensii procedurale ale limbajului

  • 2

    SQL de baz, cum ar fi Oracle PL/SQL (Procedural Language/SQL) sau Microsoft Transact-SQL, acestea sunt extensii SQL care formeaz noi limbaje - codul SQL pe care-1 conin rmne neprocedural. De asemenea, SQL nu trebuie confundat cu limbajele orientate spre obiecte, precum

    Java i C++. Simplu spus, SQL este un limbaj neprocedural pentru

    gestionarea i ntreinerea bazelor de date relaionale. SQL este deseori folosit n combinaie cu limbajele procedurale sau

    orientate spre obiecte menionate anterior pentru a manipula stocarea i extragerea datelor, folosind instruciuni din limbajul de programare cu destinaie general pentru alte sarcini de programare, precum prezentarea datelor pe o pagin web sau furnizarea rspunsurilor la informaiile introduse de utilizatori de la tastatur sau mouse. Atunci cnd este necesar interacionarea cu baza de date, instruciunile din limbajul procedural formeaz instruciunea SQL, o transmit ctre SGBD n vederea prelucrrii, primesc rezultatele returnate de SGBD i le prelucreaz ntr-un mod corespunztor.

    Folosind SQL putei transforma ntrebri obinuite :Din ce oras sunt studentii notri? n instruciuni pe care le nelege soft-ul pentru baze de date: SELECT oras FROM studenti.

    SQL se poate folosi nu numai pentru interogare, dar i pentru a aduga, a modifica sau a terge nregistrri din bazele de date.

    Majoritatea SGBD -urilor populare, ca de exemplu Microsoft

    Accsess, Oracle i MySQL , asigur suport pentru SQL, chiar dac acest nivel de suport difer de la produs la produs.

    Conectarea la baza de date

    Atunci cnd folosii limbajul SQL pe un calculator personal, cu o copie personal a unui sistem SGBD, precum Microsoft Access sau Oracle Personal Edition, toate componentele bazei de date ruleaz pe acelai sistem de calcul. Totui, acest aranjament nu este potrivit pentru bazele de date care trebuie s fie folosite n comun de mai muli utilizatori. Ca urmare, sunt mult mai frecvent ntlnite situaiile n care baza de date este instalat ntr-un aranjament client/server.

    ntr-un aranjament client/server:

    Sistemul ruleaz pe un server, care este un sistem de calcul partajat. Pentru scopurile acestei definiii, un sistem mainframe poate fi considerat un server de dimensiuni mari.

    Fiierele care compun baza de date din punct de vedere fizic sunt stocate pe discuri conectate la serverul de baze de date.

    Utilizatorii care au acces la baza de date folosesc staii de lucru, numite clieni. Clientul trebuie s aib o conexiune de reea la baza de

  • 3

    date, care poate fi o reea privat, instalat acas sau la birou, ori o reea public, precum Internet.

    Componentele software furnizate de productorul SGBD ruleaz pe staiile de lucru alte clienilor pentru a oferi utilizatorilor posibilitatea s introduc instruciuni SQL, s le transmit sistemului SGBD n vederea prelucrrii i s vad rezultatele returnate de DBMS. n general, acest software se numete client SQL.

    Reinei c nimic nu v oprete s instalai clientul SQL pe acelai calculator cu sistemul SGBD. De fapt, muli dezvoltatori care utilizeaz sisteme SGBD precum MySQL, Microsoft SQL Server i Oracle fac n mod obinuit acest lucru, deoarece este foarte convenabil s aib ntregul mediu de dezvoltare pe un singur calculator, cum ar fi un laptop. Totui, n momentul n care este necesar accesul partajat al mai multor utilizatori,

    este mult mai convenabil i mai eficient s avei o singur copie a sistemului SGBD pe un server partajat i s avei numai clientul SQL instalat pe staia de lucru a fiecrui client.

    n funcie de interfaa cu utilizatorul de pe staia de lucru client, clienii SQL sunt clasificai n trei categorii: n linia de comand, grafici i bazai pe web. O interfa n linia de comand se bazeaz exclusiv pe intrri i ieiri de tip text, cu comenzile introduse de la tastatur i rspunsurile afiate ca mesaje de tip text. Principalul avantaj al interfeelor n linia de comand este c pot fi rulate pe aproape orice sistem de operare.

    De exemplu, clientul SQL*Plus rulat ntr-o fereastr de comand Microsoft Windows.

  • 4

    Un scurt istoric al limbajului SQL

    Ctre sfritul anilor '70, un grup de cercettori de la IBM au dezvoltat o baz de date relaional, numit System/R, bazat pe lucrrile Dr. E. F. Codd. n System/R a fost inclus un limbaj, numit SEQUEL

    (Structured English Query Language), pentru manipularea i extragerea datelor. Acronimul SEQUEL" a fost ulterior condensat n abrevierea SQL", atunci cnd s-a descoperit c SEQUEL" era marc nregistrat a companiei Hawker-Siddeley Aircraft din Marea Britanie.

    Dei IBM a creat prima implementare SQL, dou alte produse, cu nume diferite pentru limbajele de interogare, au fost lansate pe pia ca primele produse pentru baze de date relaionale, Oracle, furnizat de Relational Software, i INGRES, furnizat de Relational Technology.

    IBM a lansat n 1982 produsul SQL/DS, cu limbajul de interogare

    numit acum SQL (Structured Query Language). Dac programarea structurat era expresia la mod n anii '80, cuvntul structured" din SQL nu avea nici o legtur cu programarea structurat, deoarece SQL nu este un limbaj de programare procedural.

    Comitetele de standardizare a limbajului SQL au fost formate de

    ANSI (American National Standards Institute) n 1986 i ISO (International Organization for Standardization) n 1987. Din fericire,

    comitetele create de cele dou organizaii au colaborat pentru dezvoltarea unui standard SQL comun, la nivel mondial. Doi ani mai trziu, au fost

    publicate primele specificaii ale standardului, numite SQL-89. Dup trei ani, specificaiile originale au fost extinse, sub forma standardului SQL-92, care avea aproximativ 600 de pagini. A treia generaie a fost numit SQL-99 sau SQL3. Cele mai multe produse SGBD sunt construite pe

    baza standardului SQL-92 (numit acum SQL2). SQL3 include multe

    caracteristici obiectuale, necesare pentru folosirea limbajului SQL cu o

    baz de date relaional orientat spre obiecte, precum i extensii de limbaj care fac din SQL un limbaj de programare complet (adugnd cicluri, ramificri i construcii de comutare, de tip case). Cea mai recent generaie, numit SQL:2003, introduce caracteristici legate de XML i alte mbuntiri. Aceste standarde nu sunt gratuite. Standardul SQL:2003 poate fi cumprat de la ISO (www.iso.org) sau ANSI (webstore.ansi.org). Pentru cei care au un buget mai restrns, este disponibil o versiune apropiat de cea final la Whitemarsh Information Systems Corporation (www.wiscorp.com/SQLStandards.html). Aproape toi furnizorii au adugat extensii la dialectul" SQL propriu, n parte deoarece doreau s diferenieze produsele proprii i n parte deoarece cerinele pieei i forau s implementeze caracteristici nainte a aprea standarde pentru acestea.

    Un astfel de exemplu este acceptarea tipurilor de date

    TIMESTAMP i DATE. Datele calendaristici sunt foarte importante

  • 5

    pentru prelucrarea datelor comerciale, dar dezvoltatorii produselor SGBD

    originale erau academicieni i oameni de tiin, nu specialiti n prelucrri comerciale, aa c aceast cerin nu a fost anticipat. Ca rezultat, primele dialecte SQL nu asigurau un suport special pentru datele

    calendaristice. Pe msur ce au aprut produsele comerciale, furnizorii au rspuns cererilor lansate de clienii importani i au adugat n grab suportul pentru date calendaristice. Din nefericire, din cauza grabei

    fiecare a fcut-o n felul propriu. Codul SQL este foarte compatibil i portabil ntre produsele diferiilor furnizori, dar sistemele complete de baze de date pot fi rareori transferate far anumite ajustri.

    SQL a sistemului Oracle este o extensie a normei SQL89 i o implementare a normei SQL92.

    Convenii de sintax SQL

    Aceast seciune prezint conveniile generale de sintax folosite pentru construia instruciunilor SQL. Totui, reinei c exist o mulime de extensii i variaii ntre diferiii productori. Pentru simplitate, termenul implementare este folosit pentru referirea fiecrei versiuni SQL a fiecrui productor (cu alte cuvinte, Oracle 9i, Oracle 10g, Microsoft SQL Server 7, Microsoft SQL Server 2000 i Microsoft SQL Server 2005 conin implementri diferite ale limbajului SQL).

    Conveniile de sintax SQL sunt mai uor de neles folosind un exemplu simplu. Instruciunea de mai jos returneaz valorile Movie ID i Movie Title pentru toate filmele din magazinul de produse video pentru

    care categoria MPAA este PG":

    SELECT film_id, nume_film

    FROM film

    WHERE rating_cod = 'PG';

    Conveniile de baz sunt urmtoarele: Fiecare instruciune ncepe cu o comand, de obicei sub forma

    unui singur cuvnt, care aproape ntotdeauna este un verb (n limba

    englez) care descrie o aciune. n acest exemplu, instruciunea ncepe cu comanda SELECT.

    Fiecare instruciune se termin cu un delimitator, care este, de obicei, un caracter punct i virgul (;). Unele implementri permit schimbarea delimitatorului cu un alt caracter. Mai mult, unele

    implementri, cum ar fi cea din Oracle, nu execut o instruciune SQL creia-i lipsete delimitatorul de sfrit, n timp ce alte implementri consider acest delimitator opional.

  • 6

    Instruciunile sunt construite ntr-o manier similar cu propoziiile din limba englez, cu unul sau mai multe spaii pentru separarea elementelor de limbaj. Un element de limbaj, asemntor cu un cuvnt dintr-o propoziie, poate fi un cuvnt cheie (SELECT, FROM, WHERE), numele unui obiect al bazei de date (FILM, FILM_ID,

    NUME_FILM), un operator (=) sau o constant ('PG') care apare ntr-o instruciune.

    Instruciunile sunt scrise ntr-o form liber, ceea ce nseamn c nu exist reguli stricte privind poziia elementelor de limbaj pe o linie sau locul n care se poate face trecerea la o linie nou. Totui, n general nu este o idee bun s mprii un element de limbaj pe mai multe linii. Din punct de vedere logic, instruciunea de mai jos este identic cu cea prezentat la nceputul acestei seciuni, dar nu este la fel de uor de citit i de neles: SELECT film_id, nume_filmFROM filmWHERE rating_cod = 'PG';

    Instruciunile sunt organizate ntr-o serie de clauze i, de obicei, clauzele trebuie s apar ntr-o anumit ordine atunci cnd sunt folosite (multe clauze sunt opionale). n exemplul nostru, exist trei clauze, fiecare ncepnd cu un cuvnt cheie (SELECT, FROM, WHERE).

    Elementele de limbaj SQL pot fi scrise cu litere mari, cu litere mici sau n combinaii. Totui, n majoritatea implementrilor i n conformitate cu standardele ANSI/ISO, toate minusculele sunt

    transformate n majuscule n vederea prelucrrii. Aceasta nu nseamn c datele nu pot conine litere mici, ci c numele obiectelor din baza de date (tabele, coloane etc.) i comenzile trebuie s fie scrise cu litere mari. Excepii notabile sunt Microsoft SQL Server i Sybase, care permit modul de lucru cu diferenierea literelor mari de cele mici, caz n care numele de obiecte scrise diferit sunt tratate ca nume diferite. n MySQL,

    diferenierea literelor mari de cele mici n numele obiectelor este legat de capacitatea sistemului de operare de a face aceast difereniere.

    Virgulele sunt folosite pentru separarea articolelor dintr-o list. n exemplul nostru, numele a dou coloane sunt specificate ntr-o list separat prin virgule (FILM_ID, TITLU_FILM). Spaiile care urmeaz dup virgule sunt opionale - putei aduga orice numr de spaii, inclusiv zero.

    irurile de caractere care apar n instruciunile SQL trebuie s fie ncadrate cu apostrofuri (unele implementri SQL permit i folosirea ghilimelelor). Constantele numerice nu sunt niciodat ncadrate cu apostrofuri. Dac n irul de caractere trebuie s apar un caracter apostrof, sunt inserate dou apostrofuri unul lng cellalt. De exemplu, dac vrei s gsii n baza de date un film numit Sophie's Choice, vei scrie clauza WHERE astfel:

    WHERE nume_film = 'Sophie''s Choice'

  • 7

    Numele obiectelor bazei de date sunt formate folosind numai litere, cifre i liniue de subliniere. Caracterul underscore este folosit, de obicei, ca separator ntre cuvinte, pentru mbuntirea lizibilitii.

    In fiecare implementare SQL este definit un set de cuvinte rezervate, care sunt cuvinte cu o semnificaie specific pentru procesorul SQL al sistemului SGBD i, care urmare, nu trebuie folosite ntr-un alt context - de exemplu ca nume pentru obiectele bazei de date. Scopul

    acestei restricii este de a evita interpretarea greit a instruciunilor SQL de ctre SGBD. Aa cum probabil bnuii, lista cuvintelor rezervate difer semnificativ de la o implementare SQL la alta, aa c este bine s consultai documentaia implementrii pe care o folosii pentru a v familiariza cu aceste cuvinte.

    Un comentariu pe o singur linie ncepe cu dou liniue de desprire (--). Cele dou liniue se pot afla la nceputul unei linii, ceea ce nseamn c ntreaga linie este considerat comentariu, sau oriunde n cadrul liniei, caz n care restul liniei, pn la sfrit, este considerat comentariu.

    De exemplu:

    -- Acesta este un comentariu pe o singur linie n SQL. Un comentariu pe mai multe linii ncepe cu combinaia dintre o

    diagonal la dreapta (slash) i un asterisc (/*) i continu pn la ntlnirea combinaiei invers (*/). Avei grij s terminai corect comentariile, altfel multe linii SQL pe care le-ai scris vor fi tratate de ctre SGBD ca i cum ar fi comentarii. Iat un exemplu de comentariu pe mai multe linii:

    De exemplu:

    /* Acesta este un comentariu pe mai multe linii care ncepe cu

    combinaia /* i continu pn la ntlnirea combinaiei */. */

    Sistemul impune anumite restricii asupra identificatorilor.

    Numele unui obiect nu poate depi 30 de caractere, cu excepia numelui bazei de date care este limitat la 8 caractere i a numelui legturii unei baze care poate ajunge la 128 caractere.

    Nu se face distincie ntre litere mici i litere mari.

    Numele trebuie s nceap printr-un caracter alfabetic i nu poate fi un cuvnt cheie rezervat; poate s conin literele mari i mici ale alfabetului englez, cifrele 0 - 9 i caracterele $, _, #.

    Un utilizator nu trebuie s defineasc dou obiecte cu acelai nume.

    n general este bine ca numele unui obiect s fie descriptiv i fr prescurtri excesive.

  • 8

    Categorii de instruciuni SQL

    Instruciunile SQL sunt mprite n categorii, dup funciile pe care le ndeplinesc. Unii experi consider aceste categorii ca fiind limbaje separate sau sublimbaje. Totui, n SQL acestea au aceeai sintax de baz i respect aceleai reguli, aa c eu le consider categorii de instruciuni din acelai limbaj.

    Categoriile de instruciuni, descrise n seciunile urmtoare, sunt:

    Limbajul de definire a datelor (DDL sau LDD Data Definition Language)

    Limbajul de interogare a datelor (DQL-Data Query Language)

    Limbajul de manipulare a datelor (DML sau LMD - Data Manipulation Language)

    Limbajul pentru controlul datelor (DCL sau LCDData Control Language)

    Comenzile pentru controlul tranzaciilor(Transaction Control Commands)

    Limbajul de definire a datelor (DDL)

    Limbajul de definire a datelor (DDL - Data Definition Language)

    include instruciuni SQL care permit utilizatorului bazei de date s creeze i s modifice structura obiectelor bazei de date, cum ar fi tabele, vizualizri i indexuri. Instruciunile SQL care folosesc comenzile CREATE, ALTER i DROP sunt considerate parte a DDL. Este important s nelegei c instruciunile DDL afecteaz containerele care stocheaz datele n baza de date, nu datele propriu-zise. Ca urmare, exist instruciuni DDL pentru crearea, tergerea i modificarea tabelelor, dar nici una dintre aceste instruciuni nu ofer posibilitatea de a crea sau modifica rnduri de date din tabelele respective.

    Instruciunile LDD sunt permanitazate i au efect imediat asupra bazei de date i nregistreaz informaia n dicionarul datelor. De asemenea, LDD contine instructiunile RENAME, TRUNCATE si

    COMMENT.

    Limbajul de interogare a datelor (DQL)

    Limbajul de interogare a datelor (DQL - Data Query Language)

    include instruciuni SQL care permit obinerea datelor din baza de date. Dei reprezint o parte foarte important a limbajului SQL, DQL este format din instruciuni care folosesc o singur comand: SELECT. Unii

  • 9

    furnizori i autori clasific instruciunile DQL i DML n aceeai categorie.

    Limbajul de manipulare a datelor (DML)

    Limbajul de manipulare a datelor (DML - Data Manipulation

    Language) include instruciuni SQL care permit utilizatorului bazei de date s adauge date n baza de date (sub forma rndurilor din tabele), s tearg date i s modifice datele existente n baza de date. Instruciunile SQL care folosesc comenzile INSERT, UPDATE i DELETE sunt considerate parte a DML.

    Limbajul pentru controlul datelor (DCL)

    Limbajul pentru controlul datelor (DCL Data Control Language) include instruciuni SQL care permit administratorilor s controleze accesul la datele din baza de date i folosirea diferitelor privilegii ale sistemului DBMS, cum ar fi privilegiul de oprire i pornire a bazei de date.

    Comenzile pentru controlul tranzaciilor

    O tranzacie n baza de date este un set de comenzi pe care utilizatorul bazei de date vrea sa le trateze ca pe o unitate funcionala de tip totul sau nimic, ntelegnd prin aceasta c intreaga tranzactie trebuie sa reuseasca sau sa esueze. Comenzile pentru cotrolul tranzaciilor (Transaction Control Commands ) nu respect cu exactitate sintaxa instruciunilor SQL, dar afecteaza puternic comportamentul instructiuunilor SQL incluse n tranzacii.

    Lecia 1:Limbajul de definire a datelor La nivel logic, o baz de date Oracle este alctuit din scheme. O

    schem este o mulime de structuri logice de date, numite obiecte. Ea aparine unui utilizator al bazei de date i poart numele su.

    Specificarea bazelor de date i a obiectelor care le compun se realizeaz prin intermediul limbajului de definire a datelor (DDL). Definirea unui obiect presupune crearea, modificarea i suprimarea sa. Limbajul de definire a datelor cuprinde instruciunile SQL care permit realizarea acestor operaii (CREATE, ALTER, DROP).

  • 10

    Instruciunile DDL au efect imediat asupra bazei de date i nregistreaz informaia n dicionarul datelor.

    De asemenea, DDL contine instructiunile RENAME, TRUNCATE

    si COMMENT.

    n cadrul unei scheme se pot defini obiecte de tip: tabel (table),

    vizualizare (view), vizualizare materializat (materialized view), secven (sequence), index (index), sinonim (synonym), grupare (cluster),

    procedur (procedure) i funcie (function) stocat, declanator (trigger), pachet stocat (package), legtur a bazei de date (database link), dimensiune (dimension) etc.

    Se vor prezenta n continuare instruciunile SQL folosite pentru definirea i gestionarea obiectelor dintr-o baz de date relaional. Instruciunile CREATE, ALTER i DROP formeaz o categorie a limbajului SQL numit limbaj de definire a datelor (DDL Data Definition Language).

    Se prezint DDL naintea DQL, DML deoarece trebuiesc create obiectele bazei de date nainte de a insera date n baza de date.

    Convenii de sintax Instruciunile SQL DDL au mai multe opiuni dect alte

    instruciuni SQL. Urmtoarele convenii sunt pentru a prezenta sintaxa instruciunilor DDL:

    Cuvintele cheie i cuvintele rezervate din SQL sunt scrise cu majuscule, cum ar fi CREATE TABLE.

    Informaiile pe care ar trebui s fie furnizate la scrierea instruciunilor sunt scrise cu italic, cum ar fi nume_coloan.

    Elementele opionale sunt ncadrate n paranteze ptrate, cum ar fi [WITH TIME ZONE].

    Opiunile dintr-o list de elemente posibile sunt separate de o bar vertical (simbolul logic pentru sau"), cum ar fi TABLE | VIEW | INDEX. Se pot ntlni uneori ca list de elemente opionale, cum ar fi [NULL | NOT NULL].

    Elementele de grup care sunt explicate sau analizate ulterior pe componente (de obicei dup descrierea unui tip principal de instruciune) sunt ncadrate de paranteze unghiulare, cum ar fi .

    Un element care se poate repeta este urmat de trei puncte, cum ar fi. [,...].

    Toate celelalte simboluri, n special virgulele i parantezele, fac parte din sintaxa SQL obligatorie i, ca urmare, trebuie s fie incluse aa cum sunt scrise aici.

  • 11

    Tipuri de date O coloan este cea mai mic unitate denumit care poate fi referit

    ntr-o baz de date relaional. Fiecare, coloan trebuie s aib asociate un nume unic i un tip de date. Un tip de date este o categorie pentru formatul folosit de o anumit coloan. Tipurile de date asigur cteva avantaje importante:

    Restricionarea, datelor din coloana respectiv la caracterele care au sens pentru tipul de date specificat.

    Asigurarea unor comportamente utile pentru utilizatorul datelor.

    De exemplu, dac se scade un numr dintr-un alt numr, se obine ca rezultat un numr; dar dac se scade o dat dintr-o alt dat, se obine ca rezultat diferena n zile dintre cele dou date calendaristice.

    Creterea eficienei sistemului SGBD la stocarea datelor din coloane.

    SQL accept trei categorii de tipuri de date: tipuri predefinite, tipuri construite i tipuri definite de utilizator.

    Tipurile de date predefinite sunt cele furnizate de ctre productor ca parte nativ a sistemului SGBD(vor fi tratate n continuare).

    Tipurile de date construite, cunoscute i ca tipuri de colecii, conin matrice sau seturi de tipuri de date predefinite, n scopul reprezentrii n SGBD a construciilor de date orientate spre obiect.

    Tipurile de date definite de utilizator permit utilizatorului bazei de

    date s defineasc propriile tipuri de date, adaptate unor scopuri specifice. Ultimele dou tipuri de date nu vor fi tratate , fiind prea complicate

    pentru inteniile cursului.

    Tipuri de date predefinite din standardul SQL:2003

    Majoritatea implementrilor SQL accept cea mai mare parte parte a tipurilor de date definite de standardul SQL:2003.

    Avem urmtoarele clase de tipuri: Tipuri de date pentru caractere, tipuri de date numerice,

    tipuri de date temporale i tipuri de date pentru obiecte mari.

    Tipuri de date pentru caractere

    Tipurile de date pentru caractere conin iruri de caractere, adic litere, cifre i alte simboluri permise de sistemul de calcul pe care se afl baza de date.

    Tipurile de date stardard pentru caractere sunt:

    Caracter cu lungime fix - Un ir de caractere cu lungime finit.

  • 12

    Sintaxa SQL este:

    CHARACTER(lungime) | CHAR(lungime)

    Exemplu: CNP CHAR(13)

    Caracter naional - Acest tip de date poate fi folosit pentru traducerea irurilor de caractere n diferite limbi. Sintaxa SQL este:

    NATIONAL CHARACTER(lungime) | NCHAR(lungime)

    Exemplu: NUME_FILM NCHAR(50)

    Caracter variabil - Un ir de caractere cu lungime variabil, specificnd lungimea maxim a irurilor de caractere stocate. Sintaxa SQL este:

    CHARACTER VARYING(lungime_maxim) | VARCHAR(lungime_maxim) Exemplu: NUME_CLIENT VARCHAR(125)

    Caracter naional variabil O variant a tipului de date pentru iruri de caractere cu lungime variabil, stocata ntr-un set de caractere al unei anumite limbi. Sintaxa SQL este:

    NATIONAL CHARACTER VARYING(lungime_maxim) | NVARCHAR (lungime_maxim)

    Exemplu: TITLU_FILM NVARCHAR(100)

    Tipuri de date numerice

    Acestea sunt utile mai ales pentru atributele folosite n calcule.

    Toate tipurile numerice au o precizie (un numr de cifre). De asemenea unele tipuri numerice au i o scal (numrul de cifre aflate n dreapta punctului zecimal). Tipurile ntregi i tipurile numerice care include o scal sunt numite tipuri numerice exacte, n timp ce numerele reale care nu include o scal (numerele cu virgul mobil) sunt numite numerice aproximative.

    Tipurile numerice standard sunt:

    Numeric - Un tip numeric exact care include o precizie i o scal. Sintaxa SQL este:

    NUMERIC (precizie, scal) Exemplu: PLATA_PE_ORA_ANGAJAT NUMERIC(5,2)

    Zecimal - Un tip numeric exact care include o precizie i o scal. Diferena fa de Numeric, const n faptul c precizia este mai mare , avnd scopul de a permite maparea tipului peste un tip al

    al platformei pe care ruleaz SGBD. Sintaxa SQL este: DECIMAL(precizie, scal) Exemplu: PLATA_PE_ORA_ANGAJAT DECIMAL(5,2)

    ntreg - Un tip numeric exact care include numai precizia, scris

  • 13

    INTEGER sau INT. Numerele ntregi nu au cifre zecimale, aa c scala nu este necesar, deoarece este ntotdeauna zero. Sintaxa SQL este:

    INTEGER (precizie) | INT (precizie)

    Exemplu: ID_CONT_CLIENT INTEGER

    ntreg mic - O variant a tipului INTEGER, scris SMALLINT, care stocheaz numere mai mici i, ca urmare, ocup mai puin spaiu. Sintaxa SQL este:

    SMALLINT (precizie)

    Exemplu: ID_CONT_CLIENT SMALLINT

    ntreg mare - O variant a tipului INTEGER, scris BIGINT, care stochez numere mai mari i ocup mai mult spaiu.

    Sintaxa SQL este:

    BIGINT (precizie)

    Exemplu: ID_CONT_CLIENT BIGINT

    Numr n virgul mobil - Un tip numeric aproximativ, cu precizia mai mare sau egal cu precizia specificat. Specificarea preciziei este opional. Este scris FLOAT. Sintaxa SQL este:

    FLOAT (precizie)

    Exemple: RATA_DOBANDA FLOAT(16)

    RATA_DOBANDA FLOAT

    Numr real - Un tip numeric aproximativ, cu precizie definit de implementare. Sintaxa SQL este:

    REAL

    Exemplu: RATA_DOBANDA REAL

    Numr real cu precizie dubl - Un tip numeric aproximativ, cu precizie definit de implementare, dar mai mare sau egal cu precizia definit pentru tipul REAL. Sintaxa SQL este:

    DOUBLE PRECISION | DOUBLE

    Exemplu: RATA_DOBANDA DOUBLE PRECISION

    Tipuri de date temporale (tipuri pentru date i ore)

    Aceste tipuri stocheaz date care msoar timpul, ntr-un mod oarecare.

    Tipurile de date temporale conin urmtoarele componente, numite de standard, cmpuri (fields) :

    Numele cmpului (cuvnt cheie

    SQL) Definiie

    YEAR Anul calendaristic, pe dou sau patru cifre

  • 14

    MONTH Luna din an

    DAY Ziua din lun

    HOUR Ora din zi

    MINUTE Minutul din or

    SECOND Secunda din minut

    TIMEZONE_HOUR Valoarea orei cu diferena de fus orar

    TIMEZONE_MINUTE Valoarea minutului cu diferena de fus orar

    Cmpurile TIMEZONE_HOUR i TIMEZONE_MINUTE sunt incluse n toate tipurile de date temporale pentru care este specificat

    cuvntul cheie WITH TIMEZONE.

    Tipurile de date temporale sunt:

    Data - O dat calendaristic, incluznd cmpurile YEAR, MONTH i DAY. Sintaxa SQL este: DATE [WITH TIMEZONE]

    Exemplu: DATA_NASTERE DATE

    Ora - Un tip de date pentru or, incluznd cmpurile HOUR, MINUTE i SECOND. Sintaxa SQL este: TIME [WITH TIMEZONE]

    Exemplu: TIMPUL_DEMARARE TIME

    Marc temporal - Un tip de date combinat pentru dat i or, incluznd cmpurile YEAR, MONTH, DAY, HOUR, MINUTE

    i SECOND. Sintaxa SQL este: TIMESTAMP [WITH TIMEZONE]

    Exemplu: DATA_TIMP_ NASTERE TIMESTAMP

    Interval - Un interval de timp, incluznd cmpurile specificate printr-un calificator de interval (internal qualifier),

    care reprezint precizia intervalului. Sintaxa SQL este: INTERVAL cmp_de_start TO

    cmp_de_sfrit|INTERVAL cmp Exemple:

    DURATA_PROIECT INTERVAL YEAR TO DAY

    TIMP_LUCRU INTERVAL HOUR TO MINUTE

    ZILE_VACANTA INTERVAL DAY

    Tipuri de date pentru obiecte mari- LONG

    Obiectele mari permit stocarea unor date care depesc cu mult posibilitile de stocare ale tipurilor de date prezentate pn acum,

  • 15

    ajungnd deseori la dimensiuni de civa megaoctei. Deoarece manipularea obiectelor mari este un subiect avansat, care nu vace obiectul

    cursului, se vor prezenta aceste tipuri fr sintaxa lor.

    Obiect mare pentru caractere - Un obiect mare pentru caractere, scris n SQL sub foma CLOB.

    Obiect mare pentru caractere, n format naional - Un obiect mare pentru caractere, stocat ntr-o anumit limb, scris n SQL sub forma NLOB.

    Obiect mare binar - Un obiect mare care conine date binare, cum ar fi o imagine sau o secven sonor, scris n SQL sub forma BLOB.

    Exist restricii referitoare la folosirea tipului de date LONG.

    ntr-un tabel poate s fie o singur coloan de tip LONG.

    Nu pot fi comparate dou iruri de caractere de tip LONG.

    O coloan de tip LONG nu poate fi parametru ntr-o procedur.

    O funcie nu poate ntoarce ca rezultat o valoare de tip LONG.

    O coloan de tip LONG nu poate fi folosit n clauzele WHERE, ORDER BY, GROUP BY, CONNECT.

    Operatorii sau funciile Oracle nu pot fi folosii n SQL pentru a modifica coloane de tip LONG.

    O coloan de tip LONG nu poate fi indexat.

    Un alt tip de date

    Exist un tip standard de date care nu este ncadrat n nici una dintre categoriile prezentate anterior:

    Boolean - Stocheaz o valoare logic adevrat sau fals. Sintaxa SQL este:

    BOOLEAN

    Exemplu: CLIENT_PREFERAT BOOLEAN

    Extensii pentru tipuri de date i diferene fa de standard

    Oracle Oracle SQL accept urmtoarele tipuri de date standard:

    BLOB -Obiecte binare mari, cu dimensiunea maxim de (4GB-1) x (dimensiunea unui bloc din baza de date).

    CHAR - iruri de caractere cu lungime fix, coninnd cel mult 2000 de octei.

    CLOB - Obiecte de tip caracter mari, cu dimensiunea maxim de (4GB- 1) x (dimensiunea unui bloc din baza de date).

  • 16

    DATE - Funcioneaz ca tipul standard de date DATE, dar din punct de vedere tehnic seamn mai mult cu tipul DATETIME, deoarece poate stoca att data, ct i ora. Accept date de la 1 ianuarie 4712 .e.n. la 31 decembrie 9999 e.n. Opional, poate fi inclus i ora, n ore, minute i secunde. Dac partea opional este omis, este stocat cu valoarea zero, echivalent cu miezul nopii.

    DECIMAL - Implementat ca NUMBER(precizie,scal).

    DOUBLE PRECISION - Implementat ca NUMBER.

    FLOAT - Implementat ca NUMBER.

    INTEGER - Implementat ca NUMBER(38).

    INTERVAL - Un interval de timp, dar sunt acceptate din standard numai variantele INTERVAL YEAR TO MONTH i INTERVAL DAY TO SECOND.

    NCHAR - iruri de caractere cu lungime fix ntr-o limb naional, cu dimensiunea maxim de 2000 de octei.

    NCLOB - iruri de caractere cu lungime fix ntr-o limb naional, cu dimensiunea maxim de (4GB-1) x (dimensiunea unui bloc din baza de date).

    NUMERIC - Implementat NUMBER(precizie,scal).

    NVARCHAR - Date de tip caracter cu lungime variabil ntr-o limb naional, cu dimensiunea maxim de 4000 de octei .

    REAL - Implementat ca NUMBER.

    SMALLINT - Implementat ca NUMBER(38).

    TIMESTAMP - Data i ora n ani, luni, zile, ore, minute i secunde.

    VARCHAR - Date de tip caracter cu lungime variabil, coninnd cel mult 4000 de caractere.

    Oracle ofer urmtoarele extensii la tipurile de date standard:

    BFILE - O valoare de localizare a unui fiier binar de dimensiuni mari, stocat n afara bazei de date.

    LONG - Date de tip caracter cu lungime variabil, cu dimensiunea maxim de 2GB.

    LONG RAW - Date binare, cu dimensiunea maxim de 2GB.

    NUMBER - Date numerice, cu cel mult 38 de cifre. Poate stoca valori ntregi sau n virgul mobil.

    NVARCHAR2 - Identic cu NVARCHAR.

    RAW - Date binare, cu dimensiunea maxim de 2000 de octeti.

    ROWID - ir de caractere reprezentnd adresa unic a unui rnd n tabelul din care face parte.

  • 17

    VARCHAR2 - Identic cu VARCHAR, dar Oracle recomand folosirea acestui tip n loc de VARCHAR, deoarece Oracle e

    posibil s schimbe la un moment dat implementarea tipului VARCHAR.

    Precizari si exemple

    Pentru memorarea datelor numerice, tipurile cele mai frecvent

    folosite sunt: NUMBER, INTEGER, FLOAT, DECIMAL.

    Pentru memorarea irurilor de caractere, cele mai frecvent tipuri de date utilizate sunt: CHAR, NCHAR, VARCHAR2 , NVARCHAR2 i LONG.

    Informaii relative la timp sau dat calendaristic se obin utiliznd tipul DATE. Pentru fiecare dat de tip DATE sunt depuse: secolul, anul, luna, ziua, ora, minutul, secunda. Pentru o coloan de tip DATE sistemul rezerv 7 bytes, indiferent dac se memoreaz doar timpul, sau doar data calendaristic.

    Formatul implicit al datei se definete cu ajutorul parametrului de iniializare NLS_DATE_FORMAT. n general, acest parametru este setat la forma DD-MON-YY. Dac nu este specificat timpul, timpul implicit este 12:00:00.

    Oracle9i introduce noi tipuri de date pentru timp:

    TIMESTAMP(precizie_fraciuni_secund) cuprinde

    valori pentru anul, luna i ziua unei date calendaristice, dar i valori pentru or, minut, secund

    INTERVAL YEAR (precizie_an) TO MONTH stocheaz o

    perioad de timp specificat n ani i luni, unde precizie_an reprezint numrul de cifre din cmpul YEAR.

    INTERVAL DAY (zi) TO SECOND (prec_frac_sec)

    stocheaz o perioad de timp reprezentat n zile, ore, minute i secunde.

    Exemple

    S se creeze un tabel cu trei coloane, inceput, durata_1, durata_2. Coloana inceput va cuprinde valori ce reprezint momente de timp, inclusiv fraciunile de secund corespunztoare. Valorile coloanei durata_1 vor fi intervale de timp specificate n numr de zile, ore, minute i secunde. Coloana durata_3 va conine intervale de timp precizate n numr de ani i luni. S se insereze o nregistrare n acest tabel.

  • 18

    CREATE TABLE TIMP

    (

    inceput TIMESTAMP,

    durata_1 INTERVAL DAY(2) TO SECOND(3),

    durata_2 INTERVAL YEAR TO MONTH

    );

    Exemple date inserate 1.

    INSERT INTO timp

    VALUES (TIMESTAMP '2009-10-31 09:26:50.30',

    INTERVAL '23 7:44:22' DAY TO SECOND,

    INTERVAL '19-02' YEAR TO MONTH);

    Ex. 2

    INSERT INTO timp

    VALUES (TIMESTAMP '2010-02-20 09:20:40.20',

    INTERVAL '23 7:44:22' DAY TO SECOND,

    INTERVAL '200-02' YEAR TO MONTH);

    INTERVAL '200-02' da eroare, deoarece implicit precizia pentru

    an este 2, iar 200 are 3

    Ex.3

    INSERT INTO timp

    VALUES (TIMESTAMP '2010-01-25 09:26:50.30',

    INTERVAL '23 7:44:22' DAY TO SECOND,

    INTERVAL '20-100' YEAR TO MONTH);

  • 19

    INTERVAL '20-100' eroare, deoarece 100 de luni adauga ani

    Ex.4

    INSERT INTO timp

    VALUES (TIMESTAMP '2010-01-25 09:26:50.30',

    INTERVAL '23 2:2:2' DAY TO SECOND,

    INTERVAL '20-10' YEAR TO MONTH);

    Ex.5

    INSERT INTO timp

    VALUES (TIMESTAMP '2010-01-25 09:26:50.30',

    INTERVAL '23 2:2:2' DAY TO SECOND,

    INTERVAL '20-12' YEAR TO MONTH);

    INTERVAL '20-12' eroare deoarece 12 luni fac un an si depasesc

    intervalul de 20 ani

    Ex.6

    INSERT INTO timp

    VALUES (TIMESTAMP '2010-01-25 09:26:50.30',

    INTERVAL '23 2:2:2' DAY TO SECOND,

    INTERVAL 120 MONTH);

  • 20

    Se observ ca executnd instructiunea: SELECT * from timp ;

    Ca durata_2 are valoarea 10;

    Ex.7

    INSERT INTO timp

    VALUES (TIMESTAMP '2010-01-25 09:26:50.30',

    INTERVAL '360' SECOND,

    INTERVAL 144 YEAR);

    Se observa c inregistrarea introdusa are :

    Durata_1 este de 6 min(360 sec) si

    Durata_2 de 12 ani(144 de luni)

  • 21

    Ex.8

    INSERT INTO timp

    VALUES (TIMESTAMP '2010-01-25 09:00:00.30',

    INTERVAL '20' DAY(2),

    INTERVAL 10 YEAR);

    Se observa c inregistrarea introdusa are :

    Durata_1 de 20 zile si 0 secunde( fiind un INTERVAL DAY TO SECOND) si

    Durata_2 este 10 ani si 0 luni (fiind un INTERVAL YEAR TO MONTH)

    Exemplu

    CREATE TABLE exemplu

    (durata INTERVAL YEAR(3) TO MONTH);

    INSERT INTO exemplu

    VALUES (INTERVAL '360' MONTH);

    SELECT TO_CHAR(SYSDATE+durata, 'Ddsp-Month-Year') data

    2 FROM exemplu;

    --Se face distintie la afisat dta intre litere mari si mici

    DATA

    -----------------------------------------------------------------

    Thirteen-November -Twenty Twenty

    Thirteen-November -Twenty Twenty

    Exemplu

    CREATE TABLE noi_carti

    (codel NUMBER,

    start_data TIMESTAMP);

    INSERT INTO noi_carti

    VALUES (1,TIMESTAMP '2009-10-31 09:26:50.30');

  • 22

    SELECT codel ,start_data

    FROM noi_carti;

    INSERT INTO noi_carti

    VALUES (5, timestamp '12-02-08 0:0:0');

    Pentru informatii de tip TIMESTAMP, numarul maxim de digiti

    pentru fractiuni de secunda este 9, implicit este 6.

    Rezultatele cererii:

    1

    31-OCT-09 09.26.50.300000 AM

    5

    08-FEB-12 12.00.00.000000 AM

    Pentru informatii de tip DATE, formatul implicit ar fi fost DD-

    MON-YY

    Cmp Valori valide pentru date

    calendaristice

    Valori valide pentru

    intervale

    YEAR De la -4712 la 9999 (cu excepia anului 0).

    Orice valoare ntreag.

    MONTH De la 01 la 12. De la 0 la 11.

    DAY

    De la 01 la 31 (limitat de valorile

    cmpurilor MONTH i YEAR, corespunztor regulilor calendarului curent).

    Orice valoare ntreag.

    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 fraciunilor de secund.

    De la 0 la 59.9(n), unde

    9(n) este precizia fraciunilor de secund.

    Sistemul Oracle permite construcia de expresii folosind valori de tip dat calendaristic i interval. Operaiile care pot fi utilizate n aceste

  • 23

    expresii i tipul rezultatelor obinute sunt urmtoarele: Data + Interval, Data Interval, Interval + Data, iar rezultatul

    este de tip dat calendaristic;

    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 ntr-un ir de caractere.

    Atunci cnd se convertete un ir de caractere ntr-o dat calendaristic

    sau ntr-un numr, modelul de format indic sistemului cum s

    interpreteze irul respectiv.

    n instruciunile SQL se poate folosi un model de format ca

    argument al funciilor TO_CHAR i TO_DATE. n felul acesta se poate

    specifica formatul folosit de sistemul Oracle pentru a returna sau a stoca

    o valoare n/din baza de date. Un model de format nu schimb

    reprezentarea intern a valorii n baza de date.

    O parte dintre elementele cel mai frecvent ntlnite ale unui format

    de tip numeric sunt sintetizate n tabelul urmtor.

    Element Exemplu Descriere

    , (virgul) 9,999

    Plaseaz o virgul n poziia specificat. ntr-un model de format numeric pot fi precizate mai multe virgule, dar o

    virgul nu poate aprea n partea dreapt a punctului zecimal.

    . (punct) 99.99 Plaseaz un punct zecimal n poziia specificat. ntr-un format numeric, se poate specifica cel mult un punct

    zecimal.

    $ $9999 Include semnul $ n faa unei valori.

    0 0999;

    9990 Plaseaz zerouri n faa sau la sfritul valorii.

    9 9999 ntoarce valoarea cu numrul specificat de cifre. Valoarea va avea un spaiu, respectiv un minus n fa dac este pozitiv, respectiv negativ.

    C C999 Plaseaz n poziia specificat simbolul ISO pentru monede(valoarea curent a parametrului NLS_ISO_CURRENCY).

    D 99D99

    Plaseaz n poziia specificat caracterul zecimal, care este valoarea curent a parametrului NLS_NUMERIC_CHARACTER. Valoarea implicit este punctul. Se poate specifica cel mult un caracter zecimal

    ntr-un model de format numeric.

    EEEE 9.9EEEE Returneaz o valoare folosind notaia tiinific.

  • 24

    L L999 ntoarce n poziia specificat simbolul monedei locale (valoarea curent a parametrului NLS_CURRENCY).

    MI 9999MI

    Plaseaz semnul minus la sfritul valorilor negative i un spaiu la sfritul celor pozitive. Acest element poate fi specificat numai pe ultima poziie a modelului de format numeric.

    S S9999; 9999S

    Plaseaz semnele plus sau minus la nceputul sau la sfritul valorii. Acest element poate aprea doar pe prima sau ultima poziie a modelului de format numeric.

    SELECT TO_CHAR(salary,' L99999') salariu, last_name nume FROM employees; SALARIU NUME ---------------- -------------- $2600 Grant $4400 Whalen $13000 Hartstein SELECT TO_CHAR(salary,' C99999') salariu, last_name nume FROM employees; SALARIU NUME ------------- ------------- USD2600 Grant USD4400 Whalen USD13000 Hartstein SELECT TO_CHAR(salary,' C99,999') salariu, last_name nume FROM employees; SALARIU NUME -------------- ------------------------ USD2,600 Grant USD4,400 Whalen 13,000 Hartstein SELECT TO_CHAR(commission_pct,'s9.99') comision, last_name nume FROM employees; COMIS NUME ----- ----------------- +.20 Livingston +.15 Grant +.10 Johnson Taylor

  • 25

    Modelele de format pentru date calendaristice pot fi utilizate n cadrul urmtoarelor funcii de conversie:

    TO_DATE, pentru a converti o valoare de tip caracter, care este ntr-un alt format dect cel implicit, ntr-o valoare de tip DATE;

    TO_CHAR, pentru a converti o valoare de tip DATE, care este ntr-un alt format dect cel implicit, ntr-un ir de caractere.

    SYSDATE, pentru aflarea datei curente. De exemplu SELECT SYSDATE FROM dual;

    Un model de format pentru date calendaristice este alctuit dintr-unul sau mai multe elemente specifice. Scrierea cu litere mari sau mici a cuvintelor, abrevierilor sau a numeralelor romane este respectat n elementul de format corespunztor.

    De exemplu, modelul de format DAY produce cuvinte cu majuscule, cum ar fi FRIDAY, iar Day i day au ca rezultat Friday, respectiv friday.

    ntr-un model de format pentru date calendaristice se pot preciza semne de punctuaie i literale caracter, incluse ntre ghilimele. Toate aceste caractere apar n valoarea returnat pe locul specificat n modelul de format.

    Element Explicaie

    AD sau A.D. Indicatorul AD (Anno Domini) cu sau fr puncte.

    BC sau B.C. Indicatorul BC (Before Christ) cu sau fr puncte.

    D Numrul zilei din sptmn (1-7). Duminica este considerat prima zi a sptmnii.

    DAY Numele zilei completat cu spaii, pn la lungimea de 9 caractere.

    DD Numrul zilei din lun (1-31).

    DDD Numrul zilei din an (1-366).

    DY Numele zilei din sptmn, printr-o abreviere de 3 litere.

    DDSP Numele zilei(ex 21 twentyone)

    DDth Cardinalul zilei( 5th fifeth)

    FF Fraciunile de secund.

    HH sau HH12 Ora din zi (1-12).

    HH24 Ora din zi (0-23).

    MI Minutele din or (0-59).

    MM Luna din an (01-12).

    MON Numele lunii, printr-o abreviere de 3 litere.

    MONTH Numele lunii completat cu spaii, pn la lungimea de 9 litere.

  • 26

    RM Luna n cifre romane (I-XII).

    RR Anul cel mai apropiat de data curent.

    RRRR Accept intrarea att cu 2, ct i cu 4 cifre. Dac anul de intrare se d cu 2 cifre, furnizeaz acelai lucru ca i 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 virgul dup prima cifr.

    YEAR sau SYEAR Anul n litere (S prefixeaz anii i.Hr. cu semnul minus).

    YYYY sau SYYYY Anul cu 4 cifre.

    YYY, YY sau Y Ultimele cifre ale anului.

    Modificatorii FM i FX pot fi utilizai n modelele de format din

    cadrul funciei TO_CHAR, controlnd completarea cu spaii i verificarea exact a formatelor. Un modificator poate s apar ntr-un model de format de mai multe ori. n acest caz, efectele sale sunt active pentru poriunea din model care ncepe la prima apariie i apoi dezactivate pentru poriunea din model care urmeaz celei de-a doua apariii .a.m.d.

    Modificatorul FM (Fill Mode) suprim completarea cu spaii n valoarea returnat de funcia TO_CHAR, iar FX (Format eXact) impune corespondena exact dintre argumentul de tip caracter i modelul de format precizat pentru data calendaristic respectiv.

    Exemplu:

    SELECT nume, TO_CHAR(data_ang,Month FMDD,YYYY) angajare FROM angajati WHERE TO_CHAR(data_ang, YYYY)=2009;

    Nume Angajare Pop January 21,2009 Ene October 10,2009

    Exemplu SELECT nume, TO_CHAR(data_ang, DDTH of Month YYYY) angajare FROM angajati WHERE TO_CHAR(data_ang, YYYY)=2009;

    Nume Angajare Pop 21st of January 2009

  • 27

    Ene 10TH of October 2009

    Exemplu SELECT TO_CHAR(data_ang, fmDDspth Month,Year) angajare FROM angajati WHERE id_ang=100;

    Angajare Twenty_Nineth July, Two Thousand Nine Exemplu

    SELECT sesiune incepe pe || TO_DATE(20-09-2010,DD-MM-YYYY) from dual;

    Sesiunea incepe pe 20-09-2010 (Afieaz formatul standard pentru dat) Valoarea null, reprezentnd lipsa datelor, nu este egal sau diferit

    de nici o alt valoare, inclusiv null. Totui, exist dou situaii n care sistemul Oracle consider dou

    valori null ca fiind egale: la evaluarea funciei DECODE i dac valorile null apar n chei compuse. Dou chei compuse care conin valori null sunt considerate identice dac toate componentele diferite de null sunt egale.

    Pseudocoloane

    O pseudocoloan se comport ca i o coloan a unui tabel, dar nu este stocat efectiv ntr-un tabel. Se pot face interogri asupra pseudocoloanelor, dar nu se pot insera, actualiza sau terge valorile acestora.

    LEVEL returneaz nivelul liniilor rezultat ale unei cereri ierarhice.

    CURRVAL i NEXTVAL sunt pseudocoloane utile n lucrul cu secvene i sunt tratate n seciunea corespunztoare acestora.

    ROWID returneaz adresa unei linii din baza de date, furniznd modul cel mai rapid de a accesa linia respectiv. n sistemul Oracle, valorile acestei pseudocoloane conin urmtoarele informaii necesare pentru a localiza o linie: numrul obiectului, blocul de date, fiierul de date, linia n cadrul blocului de date. Valorile pseudocoloanei ROWID sunt de tipul ROWID sau UROWID.

    ROWNUM returneaz numrul de ordine al liniilor rezultate n urma execuiei unei cereri. Pseudocoloana poate fi utilizat pentru a limita numrul de linii returnate. Dac este folosit clauza ORDER BY ntr-o subcerere, iar condiia n care apare ROWNUM este plasat n

  • 28

    cererea de nivel superior, atunci condiia va fi aplicat dup ordonarea liniilor.

    Exemplu:

    S se afieze informaii despre operele de art avnd cele mai mici 10 coduri.

    SELECT *

    FROM (SELECT * FROM opera ORDER BY cod_opera)

    WHERE ROWNUM < 11;

    Sau direct

    SELECT *

    FROM employees

    WHERE ROWNUM < 11

    ORDER BY employee_id;

    EMPLOYEE_ID FIRST_NAME LAST_NAME

    ----------- -------------------- --------------------

    100 Steven King

    101 Neena Kochhar

    102 Lex De Haan

    103 Alexander Hunold

    104 Bruce Ernst

    105 David Austin

    106 Valli Pataballa

    107 Diana Lorentz

    108 Nancy Greenberg

    109 Daniel Faviet