Sunteți pe pagina 1din 123

Nume tip Explicatie Dimensiune Limita minima Limita maxima

bigint Intreg 8 Bytes -2^63 (-9,223,372,036,854,775,808) 2^63-1 (9,223,372,036,854,775,807)


int Intreg 4 Bytes -2^31 (-2,147,483,648) 2^31-1 (2,147,483,647)
smallint Intreg 2 Bytes -2^15 (-32,768) 2^15-1 (32,767)
tinyint Intreg 1 Byte 0 255
binary [ ( n ) ] Stocheaza datele direct in n Bytes 1 byte 8000 bytes
format binar (lungime fixata)
varbinary [ ( n | max) ] Stocheaza datele direct in n Bytes 1 byte 8000 bytes
format binar (lungime
variabila)
bit Intreg 0, 1 sau Null
char [ ( n ) ] Sir de caractere (lungime n Bytes 1 byte 8000 bytes
fixata) non-UNICODE (nu
suporta caractere specifice
anumitor limbi, cum sunt
diacriticile din limba
romana)
varchar [ ( n | max ) ] Sir de caractere (lungime n Bytes 1 byte 8000 bytes
variabila) non-UNICODE
(nu suporta caractere
specifice anumitor limbi,
cum sunt diacriticile din
limba romana)
Date Doar data calendaristica 1/1/0001 31/12/9999
(precizie o zi)
Datetime Data calendaristica si ora 1/1/1753 31/12/9999
(precizie 0,00333 secunde)
Datetime2 Data calendaristica si ora 1/1/0001 31/12/9999
(precizie 100 nanosecunde)
Time Ora (precizie 100 00:00:00.0000000 23:59:59.9999999
nanosecunde)
Decimal[ (p[ , s] )] Numar cu zecimale - 10^38 +1 10^38 - 1
p reprezinta precizia, adica
numarul total de cifre,
inclusiv zecimale
s reprezinta numarul maxim
de zecimale
Nume tip Explicatie Dimensiune Limita minima Limita maxima
Numeric[ (p[ , s] )] Identic cu Decimal
Float Numar cu zecimale - 1.79E+308 to -2.23E-308 0 and 2.23E-308 to 1.79E+308
Real Numar cu zecimale - 3.40E + 38 to -1.18E - 38 0 and 1.18E - 38 to 3.40E + 38
Money Numar cu zecimale (max 4 8 Bytes -922,337,203,685,477.5808 922,337,203,685,477.5807
zecimale)
Smallmoney Numar cu zecimale (max 4 4 Bytes - 214,748.3648 214,748.3647
zecimale)
nchar [ ( n ) ] Sir de caractere (lungime 1 4000
fixata) UNICODE (suporta
caractere specifice anumitor
limbi, cum sunt diacriticile
din limba romana)
nvarchar [ ( n | max ) ] Sir de caractere (lungime 1 4000
variabila) UNICODE
(suporta caractere specifice
anumitor limbi, cum sunt
diacriticile din limba
romana)
Ntext Tipuri de date care nu mai
Text exista in vesiunea SQL
Image Server 2012. Se recomada
utilizarea celorlalte tipuri.
Uniqueidentifier Tip de date de forma
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
unde fiecare caracter se specifica in hexazecimal. Exemplu de valoare:
6F9619FF-8B86-D011-B42D-00C04FC964FF
Utilizabil pentru chei primare.
Xml Stocheaza date in format XML
Note de curs – Baze de date

ht
y r ig
o p
C
BIBLIOGRAFIE
Andrei Stanciu, Baze de date –
Introducere în SQL Server
Pavel Năstase,
– Editura Infomega,
Florin Mihai Bucureşti, 2008
Louis Pro SQL Server 2012
Relational Database
Davidson,
Design And
Jessica Moss Implementation Ed.
Apress, 2008
msdn.microsoft.com Documentaţie Microsoft SQL
Server

Cătălin Tudor 1
Note de curs – Baze de date

Prezentarea generală a cursului

Baze de date avansate –obiective:


Însuşirea cunoştinţelor necesare privind utilizarea
avansată a bazelor de date în mediile organizaţionale
din domeniile financiar-contabil şi de audit, precum
şi în domeniile conexe acestora.

t
 Dobândirea abilităţilor practice pentru dezvoltarea şi utilizarea bazelor
de date folosind SGBD SQL Server.

h
 Dobândirea cunoştinţelor privind expunerea informaţiilor pe internet.

ig
 Dobândirea cunoştinţelor privind interogarea bazelor de date existente la
nivelul unei organizaţii şi interpretarea rezultatelor obţinute

r
 Asigurarea securităţii informaţiei stocate în baze de date organizaţionale.

p y
C o
Prezentarea generală a cursului – conţinut (I)

• Concepte generale legate de bazele de date:


▫ Modele de organizare a datelor. Tipuri de date
şi modalități de stocare a datelor în cadrul unei
baze de date.
▫ Modelul relaţional, normalizarea bazelor de
date.
• Noţiuni de bază privind arhitectura client-
server
• Tipuri de date SQL Server. Descrierea
tabelelor şi a asocierilor utilizând interfaţa
SSMS.

Cătălin Tudor 2
Note de curs – Baze de date

Prezentarea generală a cursului – conţinut (II)

• Facilităţi privind integritatea referenţială, ştergere


în casacadă, etc.
• Reguli de validare pe tabele.
• Prezentarea declanşatorilor (triggers).
• Utilizarea obiectelor de tip vedere în filtrarea
datelor unei baze de date avansate.
• Utilizarea procedurilor stocate în vederea
automatizării unor procese din cadrul bazei de

t
date;

h
• Tehnici avansate de interogare a datelor: cursoare,

ig
variabile de tip tabel, interogări recursive.

y r
o p
C
Prezentarea generală a cursului – conţinut (III)

• Metode de asigurare a securităţii datelor utilizând


SQL Server
• Facilităţi SQL Server privind asigurarea integrităţii
bazelor de date organizaţionale: restaurarea
bazelor de date, replicarea, planuri de mentenanţă.
• Metode de gestionare a mesajelor electronice (e-
mail) prin intermediul bazelor de date avansate.
• Tehnici avansate de raportare a datelor dintr-o
bază de date SQL Server: utilizarea Reporting
Services

Cătălin Tudor 3
Note de curs – Baze de date

Fără calculator

Cu calculator,
fără baze de date
Cu baze de date

ht
y r ig
o p
C
BAZE DE DATE – Concept general

Organizarea datelor în baze de date


 Conceptul de bază de date:
Baza de date = un ansamblu de structuri de
date corelate logic şi funcţional, memorate pe
suporturi adresabile, ce pot fi accesate simultan de mai
mulţi utilizatori, în mod selectiv şi în timp real.
 Scop: regăsirea rapidă a informației de orice
tip, prin stabilirea de criterii de interogare
definite de utilizatori.
 Utilizatorii bazei de date:
 Administratorul bazei de date
 Analistul/proiectantul bazei de date
 Programatorii de aplicații
 Utilizatorii finali

Cătălin Tudor 4
Note de curs – Baze de date

Structuri de date:

• O structură de date corespunde unei clase


(grupări) de obiecte reale sau conceptuale şi are
ca atribute caracteristicile acestor obiecte.
• Se identifică printr-un nume unic şi se
reprezintă în planul datelor printr-o mulţime de

t
realizări (înregistrări).

h
• Gestiunea datelor se focalizează pe precizarea

ig
structurilor de date şi a relaţiilor care există

r
între realizările acestora.

p y
C o
BAZE DE DATE – generalităţi

Cerinţe pentru gestiunea corectă a


datelor
• Independenţa datelor faţă de programele de
aplicaţii:
 Baza de date trebuie să aibă o structură de sine-
stătătoare, a cărei existenţă să nu depindă de alte
programe care o utilizează.
• Asigurarea unei structuri cât mai puţin redundante:
 Informaţiile din cadrul unei baze de date trebuie să fie
unice (să nu se repete) în cadrul bazei de date.
• Integritatea datelor:
 Datele trebuie să respecte diverse restricţii şi corelaţii
logice între ele, restricţii ce împiedică apariţia erorilor
logice sau structurale la nivelul bazei de date.

Cătălin Tudor 5
Note de curs – Baze de date

MODELUL RELAŢIONAL – Logica structurării în tabele

Principiul non-redundanţei datelor


• Redundanţă = duplicarea inutilă a
datelor dintr-unul sau mai multe câmpuri
sau repetarea aceloraşi valori în două
câmpuri din tabele diferite.
• Inconvenient principal: o singură
actualizare a unei date redundante
necesită modificări multiple în cadrul
aceluiaşi câmp sau la nivelul mai multor

t
câmpuri (anomalii de actualizare).

ig h
y r
o p
C
Valori redundante ale
informaţiilor legate
de furnizori
Valori unice ale
facturilor emise de
furnizori

Cătălin Tudor 6
Note de curs – Baze de date

• Anomalii la adăugare: anumite date ce urmează a fi


adăugate pot face parte din înregistrări incomplete
(pentru care nu se cunosc toate datele);
• Anomalii de modificare: constă în dificultatea de a
modifica o valoare a unui câmp atunci când aceasta se
repetă în mai multe înregistrări;
• Anomalii de ştergere: ştergerea anumitor date

t
poate conduce la ştergerea altora (utile în continuare)
ce fac parte din aceeaşi înregistrare.

ig h
y r
o p
C
Eliminarea redundanţei datelor prin modelul
relaţional - exemplu

Tabela Facturi
Tabela Furnizori

Cătălin Tudor 7
Note de curs – Baze de date

Eliminarea redundanţei datelor prin modelul relaţional -


exemplu
Tabela Facturi
Tabela Furnizori
Tabele
nelegate

Tabela Facturi
Tabela Furnizori

t
Tabele asociate

ig h
r
Asocierea Cheie Externă – Cheie Primară

p y
C o
Soluționarea asocierilor de tip N-N
• Unei înregistrări dintr-un tabel îi pot corespunde una sau mai multe
înregistrări din cel de-al doilea tabel, dar şi o înregistrare din cel de-
al doilea tabel poate avea mai multe înregistrări corespondente în
primul tabel.

Cătălin Tudor 8
Note de curs – Baze de date

Soluționarea asocierilor de tip N-N

ht
y r ig
o p
C
Soluționarea asocierilor de tip N-N

Cătălin Tudor 9
Note de curs – Baze de date

ht
y r ig
o p
C
Considerente în alegerea unei soluţii pentru
managementul datelor:
• volumul de date ce urmează a fi stocat şi procesat
• gradul de expunere la riscuri
• tipul de aplicaţii care vor exploata datele (aplicaţii
web, aplicaţii de tip business intelligence, sisteme
informatice clasice, etc)
• previziunile de extindere pe termen mediu în
privinţa volumului de date din cadrul organizaţiei
• costurile de licenţiere şi politica de licenţiere a
producătorului

Cătălin Tudor 1
Note de curs – Baze de date

Sisteme de gestiune a bazelor de date (S.G.B.D.)

Conceptul de SGBD
SGBD = pachet de programe constituind o interfaţă între
utilizatori şi bazele de date, ce permite crearea, actualizarea
şi consultarea acestora.
SGBD-urile pun la dispoziţia utilizatorilor limbaje distincte pentru:
 descrierea bazei de date
(Limbaj de Descriere a Datelor  DDL)
 utilizarea bazelor de date
(Limbaj de Manipulare a Datelor  DML)

t
 controlul datelor
(Limbaj de Control al Datelor DCL)

h
Limbajele de manipulare a bazelor de date pot fi:
- declarative - permit utilizatorului să declare de ce

ig
informaţii are nevoie.
- procedurale - obligă utilizatorul să descrie procedura

r
pentru obţinerea informaţiilor.

p y
C o
Sisteme de gestiune a bazelor de date (S.G.B.D.)

Funcţiile îndeplinite de un SGBD:


• descrierea bazei de date (prin LDD)
• coerenţa datelor (menţinerea unor relaţii logice între
date);
• securitatea datelor (confidențialitatea și remedierea
daunelor);
• partajarea datelor (tratare acces concurent);
• controlul şi administrarea datelor prin drepturi diferite
acordate utilizatorilor;
• repararea bazei de date;
• salvarea şi restaurarea datelor etc.

Cătălin Tudor 2
Note de curs – Baze de date

ht
y r ig
o p
C
Server de date: un SGBD avansat instalat, de
regulă, pe o staţie de lucru mai puternică, cu rolul
de a furniza informaţii într-o organizaţie.

Pentru volum mare de date (server database) • Flexibilitate


• Performate crescute in procesarea datelor
► Microsoft SQL Server • Facilitati complexe de administrare
• Instrumente specifice pentru analiza datelor
► Oracle (implementarea tehnologiilor Datawarehouse si
► IBM DB2 Dataminining)
• Securitate sporita a datelor
► Sybase • Scalabilitate

Cătălin Tudor 3
Note de curs – Baze de date

 Desemnează relaţia dintre două entităţi


software care partajează sarcini comune
într-o reţea de calculatoare.
 Un program care poartă denumirea de
client, iniţiază o cerere informaţională
către un alt program, denumit server,
capabil să furnizeze răspunsul la cererea
clientului .

t
 Avantajul principal:

h
• accesul permanent la date din orice locaţie a unei

ig
instituții sau organizații, prin conectarea tuturor

r
aplicaţiilor client la o singură bază de date.

p y
 Clientul
C o
– este entitatea care
• asigură interfaţa cu utilizatorul,
• lansează cereri de executare a unor operaţii către o
entitate server
• afişează datele primite de la server într-un format
inteligibil pentru utilizator.

 Serverul – este entitatea care


• Recepţionează cererile lansate de clienţi,
• interpretează comenzile,
• execută operaţiile necesare
• furnizează răspunsul către client.

Cătălin Tudor 4
Note de curs – Baze de date

Exemplificarea generică a relației


Client-Server

ht
y r ig
o p
C
Exemplu de utilizare a tehnologiei
Client – Server într-o organizaţie

Cătălin Tudor 5
Note de curs – Baze de date

 Client-Server se bazează pe trei


componente:
• logica prezentării (responsabilă cu interfaţa grafică expusă
utilizatorilor);
• logica procesării (responsabilă cu gestionarea şi aplicarea
tuturor regulilor legate de managementul şi prelucrarea
datelor);
• logica stocării datelor (ce va gestiona păstrarea şi
extragerea datelor).

t
 În funcție de modul de grupare a

h
componentelor Client-Server, există:
• Arhitectura client-server pe două nivele (two tiers)

ig
• Arhitectura client-server pe trei nivele (three tiers)

r
• Arhitectura client-server multi-nivel (n tiers)

p y
C o
Tipologia sistemelor Client-Server

Arhitectura client-server pe două nivele (two tiers)

•Logica prezentării: Calculatorul Client


•Logica datelor: Calculatorul Server
•Logica procesării: împărțită între Client și Server

Cătălin Tudor 6
Note de curs – Baze de date

Tipologia sistemelor Client-Server

Arhitectura client-server pe trei nivele (three tiers)

ht
•Logica prezentării: Calculatorul Client

ig
•Logica datelor: Calculatorul Server

r
•Logica procesării: Serverul de aplicație

p y
C o
Tipologia sistemelor Client-Server
• Arhitectura client-server multi-nivel (n tiers)

•Logica prezentării: Calculatorul Client


•Logica datelor: Calculatorul Server
•Logica procesării: Server de aplicație și Server Web

Cătălin Tudor 7
Note de curs – Baze de date

SQL SERVER– Prezentare generală

• SQL Server:
▫ o suită software oferind posibilitatea gestionării bazelor
de date de foarte mari dimensiuni.
▫ compatibil cu cele mai recente tehnologii existente.
• SQL Server este disponibil în mai multe ediţii ce diferă
prin:
▫ facilităţile oferite,

t
▫ resursele hardware capabile să le exploateze (număr de

h
procesoare, memorie RAM, etc.)

ig
▫ politica de licenţiere (număr de utilizatori, costuri
licenţe, etc)

y r
o p
C
SQL SERVER – Versiuni (I)
• Enterprise
▫ toate instrumentele necesare privind administrarea şi
securitatea datelor precum şi un set complet de instrumente
pentru dezvoltarea aplicaţiilor business intelligence.
• Standard
▫ toate instrumentele pentru administrarea bazelor de date şi
pentru programare
• Developer
▫ dedicat dezvoltatorilor de aplicaţii. Prezintă toate facilităţile
disponibile în varianta Enterprise dar nu este destinată
utilizării ca server productiv, ci doar pentru teste şi
programare.
• SQL Server 2012 Business Intelligence Edition
destinată în special pentru a deservi aplicațiile pentru asistarea
deciziei în cadrul unei companii.

Cătălin Tudor 8
Note de curs – Baze de date

SQL SERVER 2012 – Versiuni(II)

• Web
▫ indicată pentru administrarea bazelor de date ce
urmează a fi exploatate în mediul online.
• SQL Server Express
▫ soluţie oferită gratuit pentru utilizatorii ce doresc să
realizeze aplicaţii client pentru sisteme de mici

t
dimensiuni sau pentru a învăţa
• Compact

h
▫ soluţie gratuită pentru gestionarea bazelor de date

ig
destinate aplicaţiilor de tip desktop, a aplicaţiilor
pentru dispozitive mobile sau de tip client web pe

r
platforme Windows.

p y
C o
SQL Server– Componente
• SQL Server Database Engine
▫ este componenta nucleu
▫ responsabilă cu memorarea, procesarea datelor stocate
şi asigurarea securităţii acestora
• Analysis Services
▫ Suită de instrumente software pentru analiza datelor şi
interpretarea rezultatelor
• Reporting Services
▫ componentele necesare pentru crearea şi gestionarea
rapoartelor
• Integration Services
▫ set de aplicaţii şi obiecte programabile ce pot fi utilizate
în copierea, mutarea sau transformarea datelor între
diferite destinaţii

Cătălin Tudor 9
Note de curs – Baze de date

Tipuri de date în SQL Server


 Categorii de tipuri de date:
 Numere exacte
 Şiruri de caractere non-Unicode
 Şiruri de caractere Unicode
 Numere aproximative
 Şiruri de caractere binare
 Dată și oră

t
 Alte tipuri de date

ig h
y r
o p
C
Tipuri de date în SQL Server
 Numere exacte
 Numere întregi
 bigint
 Numere aproximative
 Float
 Real
 int
 Şiruri de caractere non-
 smallint
 tinyint
Unicode
 bit  char

 Numere cu zecimale  varchar


 Decimal  text
 Numeric  Şiruri de caractere Unicode
 Money  nchar
 Smallmoney  nvarchar
 ntext

Cătălin Tudor 10
Note de curs – Baze de date

Tipuri de date în SQL Server


 Şiruri de caractere  Alte tipuri de date
binare  cursor
 binary  uniqueidentifier
 varbinary  xml
 image  table

 Dată și oră
 date
 datetime

t
 datetime2
 smalldatetime

h
 time

y r ig
o p
C

Cătălin Tudor 11
Note de curs – Baze de date

ht
ig
Conf. univ. dr. Cătălin Tudor

y r
o p
C
Limbajul Transact-SQL (T-SQL)

Cătălin Tudor 1
Note de curs – Baze de date

un limbaj standardizat de interogare a bazelor de date


relaționale (ANSI SQL-89)
 Este un limbaj declarativ:
 utilizatorul trebuie să descrie informațiile pe care vrea să le
obțină, fără a preciza algoritmii necesari pentru obținerea
rezultatelor.
 nu sunt necesare cunoștințe de programare.
 Poate fi utilizat prin apelarea unui vocabular specific,
recunoscut de toate bazele de date relaționale: Oracle,

t
Access, SQL Server, Informix, Ingres, DB2, Sybase, etc.

h
T-SQL: dialect al limbajului SQL pentru bazele de date

ig
SQL Server

y r
o p
C
Vocabularul SQL:
Instrucţiuni – permit execuţia anumitor acţiuni (CREATE,
ALTER, SELECT, UPDATE, DELETE, etc.)
Clauze – specifică argumentele unei instrucțiuni (FROM,
WHERE, ORDER BY, etc.)
Funcții – efectuează prelucrări asupra datelor (care devin
argumente sau parametrii) în scopul afișării unor rezultate
specifice (SUM, ROUND, UPPER, LEFT, GETDATE, ISNULL
etc.).
Operatori – acționează asupra datelor (care devin operanzi),
permițând definirea unor expresii, calcule, etc. (aritmetici, de
comparare, logici, de concatenare, etc.).

Cătălin Tudor 2
Note de curs – Baze de date

 instrucţiuni de definire a datelor (permit descrierea


structurii bazei de date):
 CREATE, ALTER, DROP
 instrucţiuni de selecţie a datelor (permit consultarea
bazei de date):
 SELECT
 instrucțiuni de manipulare a datelor (permit
adăugarea, modificarea și ștergerea înregistrărilor):
 INSERT, UPDATE, DELETE

t
 instrucţiuni privind controlul accesului la date

h
(permit acordarea sau revocarea drepturilor de acces
pe utilizatori):

ig
 GRANT, REVOKE

y r
o p
C
Crearea tabelelor în SQL Server (II)
 Instrucţiuni pentru crearea tabelelor SQL Server:
 Forma minimalistă:
CREATE TABLE Nume_tabel
(
nume_câmp1 tip_dată(dimensiune) [restricţie câmp],
nume_câmp2 tip_dată(dimensiune) [restricţie câmp],
nume_câmp3 tip_dată(dimensiune) [restricţie câmp],
....,
Nume_câmp_cheie_externă tip_dată(dimensiune) [restricţie câmp],
CONSTRAINT cheie_externă REFERENCES nume_tabel_extern (cheie
primară tabel extern)
);

Cătălin Tudor 3
Note de curs – Baze de date

Crearea tabelelor în SQL Server 2014 (III)


 Exemplu:

CREATE TABLE [dbo].[Produse](


[IdProdus] [int] NOT NULL,
[CodIntern] [nvarchar](255) NULL,
[Denumire] [nvarchar](255) NULL,
[Cantitate per unitate masura] [nvarchar](255) NULL,
[Descriere] [nvarchar](255) NULL,
[TermenValabilitate(zile)] [int] NULL,
[Perisabil] [bit] NOT NULL,

t
[CodCategorie] [int] NULL,

h
CONSTRAINT PK_Produs PRIMARY KEY (IdProdus),
CONSTRAINT FK_Categorie FOREIGN KEY (CodCategorie)

ig
REFERENCES dbo.CategoriiProduse (CodCategorie)
)

y r
o p
C
Instrucţiuni pentru modificarea şi
ştergerea tabelelor din baza de date
 Instrucţiunea ALTER TABLE – modificarea structurii sau
definiţiei tabelului:
ALTER TABLE [dbo].[Produse]
ADD CONSTRAINT [Produse_FK] FOREIGN KEY([CodCategorie])
REFERENCES [dbo].[CategoriiProduse] ([CodCategorie])
ON DELETE CASCADE
GO
 Intrucţiunea DROP TABLE– elimină definitiv o tabelă din cadrul
bazei de date
DROP TABLE dbo.Produse;

Cătălin Tudor 4
Note de curs – Baze de date

Tipuri de tabele într-o bază de date


SQL Server
 Tabele permanente ale bazei de date – sunt cele obţinute în urma
definirii modelului relaţional formând baza de stocare pentru datele
reţinute pe server;
 Tabele temporare – sunt tabele locale ce au existenţă de viaţă
scurtă, definită pe perioada sesiunii în care utilizatorul care le
creează este conectat.
 Sunt automat distruse (implicit) la terminarea procedurii în care au fost
utilizate temporar.

t
 Se regăsesc în baza de date cu numele tempdb implicit definită pe
server

h
 Tipuri de tabele temporare:

ig
 globale (disponibile tuturor utilizatorilor şi tuturor sesiunilor de lucru)
 locale (disponibile doar utilizatorului curent şi sesiunii în care acesta lucrează)

y r
o p
C
Tabele temporare - exemple
 Crearea unui tabel temporar local:
create table #Enumerare
(
NumeDepartament varchar(20),
CodDepartament int
)
 Crearea unui tabel temporar global:
create table ##SesiuniDeLucru
(
NumeUtilizator nvarchar(50),
IdSesiune int
)

Cătălin Tudor 5
Note de curs – Baze de date

Asocieri între tabele


 Obiecte care grupează totalitatea legăturilor ce se creează între
entităţile (tuplurile) a două tabele (asocieri binare) sau
aparţinând unei singure tabele (asocieri unare).
 Au rolul de a permite accesarea mai multor tabele în acelaşi
timp.
 Asocierile pot avea:
 caracter permanent: completează structura bazei de date şi sunt

t
ataşate tabelelor existente, introducând restricţia de integritate

h
referenţială.
 caracter temporar: utilizate în extragerea datelor din baza de

ig
date, fiind prezente doar în obiectele de tip cerere (interogare).

y r
o p
C

Cătălin Tudor 6
Note de curs – Baze de date relaţionale 17.10.2021

Sisteme de gestiune a bazelor de date


relaţionale

Cursul 4
Implementarea restricțiilor de domeniu în SQL Server
Interogarea datelor prin limbajul T-SQL (funcții predefinite,
tehnici de interogare)

ht
y r ig
o p
C
Restricţii privind integritatea referenţială
Note de curs – Baze de date relaţionale 17.10.2021

Specificarea vizuală a restricţiilor de domeniu la


nivelul tabelelor

ht
y r ig
o p
C
Exemplu: Implementarea restricţiei privind
datele din factură
Note de curs – Baze de date relaţionale 17.10.2021

Declararea restricţiilor de domeniu la nivelul


tabelelor utilizând T-SQL(I)
Adăugarea la crearea unui nou tabel:
CREATE TABLE <NumeTabel>
(
<nume_coloană1> <tip_dată> [ NULL | NOT NULL ],
<nume_coloană2> <tip_dată> [ NULL | NOT NULL ],
...
CONSTRAINT <NumeRestricție>
CHECK (<condiție>)

);
Exemplu:

t
CREATE TABLE Factura
(IdFactura int, NrFactura smallint, SerieFactura varchar(10),

h
DataFactura date, DataScadenta date,CodFurnizor varchar(20),
CONSTRAINT ck_VerificaSerie

ig
CHECK (len([SerieFactura])=3)
)

y r
o p
C
Declararea restricţiilor de domeniu la nivelul
tabelelor utilizând T-SQL(II)
Adăugarea la modificarea unui tabel:
ALTER TABLE <NumeTabel>
ADD CONSTRAINT <NumeRestrictie>
CHECK (<conditie>);

Exemplu:

ALTER TABLE Facturi


ADD CONSTRAINT ck_VerificaSerie
CHECK (len([SerieFactura])=3);
Note de curs – Baze de date relaţionale 17.10.2021

Declararea restricţiilor de domeniu la nivelul


tabelelor utilizând T-SQL(III)
Verificarea la crearea restricției a datelor existente :
ALTER TABLE <NumeTabel>
WITH CHECK | WITH NOCHECK ADD CONSTRAINT
<NumeRestrictie>
CHECK (<NumeColoană> <conditie>);
• WITH CHECK (implicit) – datele existente sunt verificate dacă
răspund restricției impuse
• WITH NOCHECK – datele existente nu sunt verificate,
considerându‐se valide. Doar cele noi vor fi validate.

t
Exemplu:

h
ALTER TABLE Facturi

ig
WITH NOCHECK ADD CONSTRAINT ck_VerificaSerie
CHECK (len([SerieFactura])=3);

y r
o p
C
Declararea restricţiilor de domeniu la nivelul
tabelelor utilizând T-SQL(IV)
Eliminarea unei restricții existente:
ALTER TABLE <NumeTabel>
DROP CONSTRAINT <NumeRestrictie>;

Exemplu:
ALTER TABLE Facturi
DROP CONSTRAINT ck_VerificaSerie;
Note de curs – Baze de date relaţionale 17.10.2021

Funcții predefinite uzuale

ht
y r ig
o p
C
Functia GETDATE()
 returneaza data si ora serverului
Exemplu: data si ora serverului

Exemplu: data serverului

Exemplu: ora serverului


Note de curs – Baze de date relaţionale 17.10.2021

Functia CONVERT
 coverteste rezultatul unei expresii intr-un anumit timp de date

Sintaxa:
CONVERT (tip_date_rezultat [(lungime)], expresie [, stil_coversie])

 tip_date_rezultat – tipul de date in care se converteste expresie


 lungime – lungimea tipului de date, doar pentru tipurile de date care suporta
 expresie – orice expresie admisibila SQL, al carei rezultat se va converti in
tip_date_rezultat
 stil_conversie – cod folosit atunci cand se doreste utilizarea unor modele de conversie SQL;

Cateva coduri uzuale pentru stil_conversie pentru conversia in/din data/ora:

t
Cod Format data/ora rezultat

h
101 mm/dd/yyyy
103 dd/mm/yyyy

ig
108 hh:mi:sec

r
113 dd mon yyyy hh:mi:ss:mmm

p y
C
Functia CONVERT (exemple)
o
Nota: In acest caz codul 103 indica in ce
mod este specificata data in sirul de
caractere (dd/mm/yyyy) pentru a fi
corect convertita in formatul datei
serverului !
Daca se doreste afisarea in formatul
dd/mm/yyyy, o data calendaristica
trebuie convertita in sir de caractere, cu
cod 103, asa cum este in primul
exemplu, altfel se afiseaza in formatul
serverului.
Note de curs – Baze de date relaţionale 17.10.2021

Functia CONVERT (exemple)

ht
y r ig
o p
C
Functia NEWID()
 returneaza o valoare de tip UNIQUEIDENTIFIER
Note de curs – Baze de date relaţionale 17.10.2021

Functiile DAY, MONTH, YEAR


Sintaxa:
 DAY (expresie)
 MONTH(expresie)
 YEAR(expresie)

ht
y r ig
o p
C
Functia DATEPART
Sintaxa:
 DATEPART (informatie_calendaristica, expresie_data/ora)

Extrage dintr-o data calendaristica/ora o anumita informatie calendaristica,


identificata printr-un cod
Informatie_calendaristică Rezultat
(valori uzuale)
year An
month Luna
day Zi
dayofyear Numar zi din an
quarter Trimestru
week Numar saptamana din an
hour Ora
minute Minutele
second Secundele
Note de curs – Baze de date relaţionale 17.10.2021

Functia DATEPART (exemplu)

ht
y r ig
o p
C
Functia DATEDIFF
Sintaxa:
 DATEDIFF (informatie_calendaristica, data/ora start, data/ora final)

Calculeaza diferenta dintre doua date calendaristice (data/ora final si data/ora start). Rezultatul
este furnizat intr-un anumit tip de informatie calendaristica, identificata printr-un cod
Note de curs – Baze de date relaţionale 17.10.2021

Functia DATEADD
Sintaxa:
 DATEADD (informatie_calendaristica, n, data/ora start)

Calculează o data calendaristică, pornind de la o anumită dată de referinţă la care se


adaugă un număr n de fracţiuni ale datei (în format informaţie calendaristică)

ht
y r ig
o p
C
Functiile LTRIM, RTRIM
 LTRIM(expresie) – elimina spatiile nesemnificative de la
stanga unei expresii de tip sir de caractere

 RTRIM(expresie) – elimina spatiile nesemnificative de la


dreapta unei expresii de tip sir de caractere
Note de curs – Baze de date relaţionale 17.10.2021

Functiile LEN, LOWER, UPPER


 LEN(expresie) – returnează numărul de caractere dintr-o
expresie
 LOWER(expresie) – returnează şirul de caractere din expresie
scris cu litere mici
 UPPER (expresie) – returnează şirul de caractere din expresie
scris cu litere mari

ht
y r ig
o p
C
Functiile LEFT, RIGHT, SUBSTRING
 LEFT(expresie, n) – returneaza n caractere de la stanga unei expresii sir de
caractere

 RIGHT(expresie, n) – returneaza n caractere de la dreapta unei expresii


sir de caractere

 SUBSTRING (expresie, start, n) – returneaza n caractere dintr-o expresie


sir de caractere, incepand de la pozitia start
Note de curs – Baze de date relaţionale 17.10.2021

Agregarea datelor în limbajul T-SQL


Funcții de agregare utilizate pentru grupuri de date:
AVG ( [ DISTINCT ] expression )
COUNT ([ DISTINCT ] expression | * } )
SUM ( [DISTINCT ] expression )
MAX (expression),MIN (expression )
• DISTINCT - valorile identice să fie luate în considerare o
singură dată în momentul efectuării calculelor.
• Simbolul * - numărarea tuturor valorilor domeniului pe care
se aplică funcţia, inclusiv a valorilor nule (NULL).

ht
y r ig
o p
C
Considerente generale privind agregarea
datelor
 Rezultatul unei interogări de agregare va afișa doar realizările
câmpului/câmpurilor de grupare și valorile agregate ale
câmpului/câmpurilor de sintetizat.
 Funcțiile de agregare pot fi utilizate pentru unul sau mai multe
câmpuri din cadrul sursei de date, dar și pentru câmpuri calculate.
 Gruparea se poate realiza pentru mai multe câmpuri ale sursei de date
sau calculate. Ordinea de grupare este cea a selectării câmpurilor
necesare pentru afișare.
 În cazul în care intervin condiţii de filtrare, mai întâi are loc filtrarea și
apoi vor fi agregate datele rezultate în urma acesteia.
 Câmpurile folosite doar pentru a stabili condiţii de filtrare nu sunt
niciodată afișate în rezultatul final.
Note de curs – Baze de date relaţionale 17.10.2021

Considerente generale privind agregarea datelor


Exemplu de agregare cu condiții de filtrare:
Care este prețul cel mai mic la care a fost achiziționat fiecare produs în parte, afișând doar
produsele facturate într-o cantitate mai mică de 24?

Pasul 1: Filtrarea
înregistrărilor

t
Pasul 2: Gruparea

h
și agregarea
datelor

y r ig
o p
C
Grupări de date şi funcţii de grup
1. Funcții de agregare aplicate tuturor înregistrărilor, fără a fi
necesară gruparea:
Să se afișeze câte facturi au fost emise în luna februarie, anul 2012.

SELECT Count(*) AS [Numar de facturi]


FROM Facturi
WHERE Month([DataFactura])=2 AND Year([DataFactura])=2012
2. Funcții de agregare aplicate pe grupuri de înregistrări:
Să se afișeze pentru fiecare denumire de furnizor câte facturi au fost emise de
acesta.
SELECT DenumireFz, Count(*) AS [Numar de facturi]
FROM Facturi INNER JOIN Furnizori
ON Furnizori.CodFiscal=Facturi.CodFiscal
GROUP BY DenumireFz
Gestiunea bazelor de date relaționale – 10/31/2021
Suport de curs

Sisteme de gestiune a bazelor de date


relaţionale

Cursul 5
Intrucțiuni T-SQL specific limbajului de manipulare a
datelor (DML)

u i
s t
Conf. Univ. Dr. Cătălin Tudor
rib
d i
a u
a s
p i
o
Grupări de date şi funcţii de grup
c
e
1. Funcții de agregare aplicate tuturor înregistrărilor, fără a fi

s
necesară gruparea:

u
A n Să se afișeze câte facturi au fost emise în luna februarie, anul 2012.

SELECT Count(*) AS [Numar de facturi]


FROM Facturi
WHERE Month([DataFactura])=2 AND Year([DataFactura])=2012
2. Funcții de agregare aplicate pe grupuri de înregistrări:
Să se afișeze pentru fiecare denumire de furnizor câte facturi au fost emise de
acesta.
SELECT DenumireFz, Count(*) AS [Numar de facturi]
FROM Facturi INNER JOIN Furnizori
ON Furnizori.CodFiscal=Facturi.CodFiscal
GROUP BY DenumireFz

Cătălin Tudor 1
Gestiunea bazelor de date relaționale – 10/31/2021
Suport de curs

Grupări de date şi funcţii de grup


3. Funcții de agregare aplicate grupurilor, cu criterii de filtrare:
Să se afișeze câte facturi au fost emise în luna februarie anul 2012, de
fiecare furnizor.
SELECT Count(*) AS [Numar de facturi]
FROM Facturi INNER JOIN Furnizori
ON Furnizori.CodFiscal=Facturi.CodFiscal
WHERE Month([DataFactura])=2 AND Year([DataFactura])=2012
GROUP BY DenumireFz

4. Funcții de agregare aplicate pe grupuri cu filtrare pe expresii:


Să se afișeze care sunt furnizorii care au emis mai mult de 3 facturi în luna
februarie a anului 2012.
SELECT DenumireFz

u i
rib
FROM Facturi INNER JOIN Furnizori
ON Furnizori.CodFiscal=Facturi.CodFiscal

t
WHERE Month([DataFactura])=2 AND Year([DataFactura])=2012
GROUP BY DenumireFz
HAVING Count(*)>3
d is
a u
a s
p i
o
Grupări de date şi funcţii de grup
c
s e
5. Funcții de agregare aplicate progresiv (running totals):
Să se afișeze totalul încasărilor la finalul fiecărei zi de vânzări de

n u produse .
SELECT IdPlata, TipPlata, DataOraPlata, SumaPlatita ,

A SUM(SumaPlatita) OVER (ORDER BY convert(Date, DataOraPlata, 102)) as


TotalProgresiv
FROM Plati

Cătălin Tudor 2
Gestiunea bazelor de date relaționale – 10/31/2021
Suport de curs

Grupări de date şi funcţii de grup


6. Funcții de agregare aplicate progresiv pe grupuri de înregistrări:
Să se afișeze totalul încasărilor la finalul fiecărei zi de vânzări de
produse pe fiecare tip de plată .
SELECT IdPlata, TipPlata, DataOraPlata, SumaPlatita ,
SUM(SumaPlatita) OVER (PARTITION BY TipPlata
ORDER BY convert(Date, DataOraPlata, 102)) as TotalProgresiv
FROM Plati

u i
s t rib
d i
a u
a s
Grupări de date şi funcţii de grup
p i
c o
Afişaţi numărul total de plăţi, numărul total de bonuri de casă şi numărul distinct al bonurilor de

s e
casă, ştiind că anumite bonuri de casă sunt achitate prin mai multe tipuri de plăţi şi alte bonuri de
casă nu sunt achitate încă.

n u
A
Select Count(*) as NrTotalInregistrari,
COUNT( P.NrBonCasa ) as NrBonuriCasa,
COUNT(Distinct P.NrBonCasa ) as NrBonuriCasaDistincte
FROM BonuriDeCasa BC
LEFT JOIN Plati P on P.NrBonCasa=BC.NrBonCasa

Cătălin Tudor 3
Gestiunea bazelor de date relaționale – 10/31/2021
Suport de curs

Funcţiile de clasificare Row_Number(),


Rank(), NTile(NrGrupe)
Apelare:
<Nume_Funcţie> OVER ([PARTITION BY
<câmp_partiţionare>] ORDER BY <câmp_ordonare> )

 Row_Number()
 Atribuie un număr de ordine fiecărei înregistrări în funcţie de un
criteriu de ordonare specificat în clauza OVER.

u i
s t rib
d i
a u
a s
p i
c o
Funcţiile de clasificare Row_Number(),
e
Rank(), NTile(NrGrupe)
s
nu
 RANK()

A
 Atribuie un rang fiecărei înregistrări în funcţie de un criteriu de
ordonare. Înregistrările cu aceleaşi valori pe câmpul după care se face
ordonarea vor avea acelaşi rang.
 NTile(NrGrupe)
 Permite distribuirea înregistrărilor dintr-un set de rezultate pe N
intervale în funcţie de un criteriu de ordonare.

 Clauza PARTITION BY – divide setul


de rezultate în partiţii sau
subseturi asupra cărora se va aplica
mai departe funcţia de clasificare
respectivă.

Cătălin Tudor 4
Gestiunea bazelor de date relaționale – 10/31/2021
Suport de curs

Funcţiile de clasificare - Exemplificare


SELECT Nume, Prenume, SalariuIncadrare,
Row_Number() over (order by SalariuIncadrare) as OrdineSalariu,
RANK() over (order by SalariuIncadrare) as RangSalariu,
NTILE(3) over (order by SalariuIncadrare) as IncadrareSalariuPeGrupe
FROM Vanzatori

u i
s t rib
d i
a u
a s
p i
Funcţiile deoclasificare
e c - Exemplificare
s
Select IdPlata, SumaPlatita,YEAR(DataOraPlata) as An,

nu
Row_Number() over (partition by YEAR(DataOraPlata) order by
SumaPlatita DESC) as OrdonarePlata

A FROM Plati
Order by year(DataOraPlata)

Cătălin Tudor 5
Gestiunea bazelor de date relaționale – 10/31/2021
Suport de curs

Alte funcţii uzuale


ISNULL ( expresie , valoare de înlocuit )
 evaluează dacă o expresie conţine valoarea NULL şi, în cazul în care
condiţia este îndeplinită, înlocuieşte expresia cu valoarea specificată
ca al doilea argument .
ISDATE (expresie )
 evaluează dacă o expresie poate fi evaluată ca o dată calendaristică
validă. În cazul în care condiţia este îndeplinită returneză valoarea 1,
în caz contrar 0.
ISNUMERIC(expresie)

u i
rib
 evaluează dacă o expresie poate fi evaluată ca valoare numerică. În
cazul în care condiţia este îndeplinită returneză valoarea 1, în caz
contrar 0.

is t
u d
s a
Căutarea în cadrulp
i a
c o şirurilor de caractere pe

s e
baza şabloanelor definite prin operatorul de

n u
comparaţie LIKE

A
Sintaxa:  <expresie> [NOT] LIKE <sir de caractere>
 <expresie> nume de câmp dintr-un tabel sau orice altă expresie SQL validă
ce poate fi evaluată drept şir de caractere
 <sir de caractere> şirul sau tiparul ce urmează a fi regăsit în cadrul expresiei
pe care se efectuează căutarea
 Caractere speciale utilizabile la căutare:
% ţine locul unui şir de zero sau mai multe caractere

_ ţine locul unui singur caracter

[] orice caracter din enumerarea sau intervalul cuprins între paranteze

[^ ] - orice caracter în afară de cele din enumerarea sau intervalul specificat


după simbolul ^ intre paranteze.

Cătălin Tudor 6
Gestiunea bazelor de date relaționale – 10/31/2021
Suport de curs

Utilizare operator LIKE în expresii


 Să se afişeze toţi vânzătorii al căror nume încep cu litere de la N
la R.
SELECT * FROM Vanzatori
WHERE Nume LIKE '[N-R]%‘
 Să se selecteze doar vânzătorii de sex masculin care sunt născuţi în
luna ianuarie.
SELECT * FROM Vanzatori

i
WHERE CNPVanzator LIKE '1__01%‘
 Să se afle care sunt vânzătorii care nu sunt născuţi în anul 1978.
u
Select * from Vanzatori

s t rib
WHERE CNPVanzator like '_[^7][^8]%'

d i
a u
a s
p i
o
Structura alternativă CASE
c
s e
 Se folosește pentru a afișa o valoare în funcție de rezultatul

u
evaluării unei condiţii în clauza SELECT.

A n CASE expresieA
WHEN expresieB1 THEN expresie_Rezultat
[WHEN expresieB2 THEN expresie_Rezultat]

[ELSE expresie_Rezultat_F]
END

CASE
WHEN expresie_logica1 THEN expresie_Rezultat
[WHEN expresie_logica2] THEN expresie_Rezultat

[ELSE expresie_Rezultat_F]
END

Cătălin Tudor 7
Gestiunea bazelor de date relaționale – 10/31/2021
Suport de curs

Structura alternativă CASE: exemple


SELECT NrBonCasa , SumaPlatita,
CASE NTILE(3)over(order by SumaPlatita)
when 1 then 'Valoare mica'
when 2 then 'Valoare medie'
else 'Valoare mare'
end as TipIncasare
FROM Plati

SELECT NrBonCasa , SumaPlatita,


CASE
when NTILE(3)over(order by SumaPlatita)=1 then 'Valoare mica'

i
when NTILE(3)over(order by SumaPlatita)=2 then 'Valoare medie'

u
else 'Valoare mare'

rib
end as TipIncasare
FROM Plati

is t
u d
s a
p i a
o
Interogări SQL pentru adăugarea de noi înregistrări
c
s e
Varianta 1: Adăugarea pe baza unor valori noi
INSERT INTO nume-tabela (nume-atribut1, nume-atribut2,…)

n u
VALUES (valoare1, valoare2,…)

A Exemplu: Să se adauge un nou client în baza de date cu codul fiscal R101221 și


denumirea SC GAMA SA
INSERT INTO Clienti (CodFiscal, Denumire) VALUES (‘R101221’, ‘SC GAMA SA’)

Varianta 2: Adăugarea pe baza valorilor preluate dintr-un tabel


INSERT INTO nume-tabela SELECT nume-atribut1, nume-atribut2, …
FROM nume-tabela-sursa [WHERE Conditii …]
Exemplu: Să se adauge în tabela Parteneri toți Furnizorii din localitatea
București

INSERT INTO Parteneri SELECT * FROM Furnizori WHERE Localitate=‘București’

Cătălin Tudor 8
Gestiunea bazelor de date relaționale – 10/31/2021
Suport de curs

Interogări SQL pentru modificarea valorilor câmpurilor

UPDATE nume-tabel
SET nume-atribut1=valoare1, nume-atribut2=valoare2, …
WHERE Condiții
Exemplul 1: Să se transforme în KG toate unitățile de măsură ale produselor cu
codul mai mare decât 3.

UPDATE Produse SET UnitateMasura=‘KG’ WHERE CodProdus>3

Exemplul 2: Să se majoreze cu 5% toate prețurile din facturile emise după data de

i
12.09.2012.

u
UPDATE ProduseFacturate

rib
SET PretFacturat=[PretFacturat]+[PretFacturat]*5/100
WHERE IDFactura IN

s t
(Select IDFactura FROM Facturi WHERE DataFactura>’2012-09-12’)

i
u d
s a
p i a
o
Interogări SQL pentru ștergerea înregistrărilor
c
s
DELETE *
e
n u
FROM nume-tabel
WHERE Condiție

A Exemplu: Să se șteargă toți clienții din localitatea Brăila

DELETE
FROM Clienti
WHERE Localitate=‘Braila’

Cătălin Tudor 9
Gestiunea bazelor de date relaționale – 10/31/2021
Suport de curs

Ştergerea tuturor înregistrărilor unui tabel


TRUNCATE TABLE NumeTabel

Exemplu: Să se șteargă toate înregistrările tabelului Parteneri

Varianta 1:
TRUNCATE TABLE Parteneri
Varianta 2:
DELETE FROM Parteneri

Diferenţe între cele două comenzi:


• Instrucţiunea DELETE înregistrează în jurnalul de tranzacţii al bazei de date

i
starea fiecărei înregistrări, TRUNCATE doar specifică numărul de înregistrări
şterse
• Comanda DELETE este mult mai lentă din punctul de vedere al execuţiei
u
t
Important: Ambele comenzi ţin cont de restricţiile legate de integritatea

s rib
i
bazei de date (chei externe) sau restricţii definite de utilizator privind

d
ştergerea înregistrărilor

a u
a s
p i
o
Interogări SQL pentru crearea de tabele rezultat
c
s e
SELECT nume-atribut1, nume-atribut2, …

n u
INTO nume-tabel-rezultat
FROM listă-tabele-sursă

A [WHERE Condiții …]

Exemplu: Să se creeze un nou tabel denumit ProduseFacturateOctombrie care să


afișeze denumirile de produse facturate în luna curentă

SELECT DenumireProdus
INTO ProduseFacturateOctombrie
FROM Produse, ProduseFacturate, Facturi
WHERE Produse.CodProdus=ProduseFacturate.CodProdus AND
ProduseFacturate.IDFactura=Facturi.IDFactura AND
Month(DataFactura)=Month(Date())

Cătălin Tudor 10
Gestiunea bazelor de date relaționale – 10/31/2021
Suport de curs

Tranzacții în cadrul bazelor de date


relaţionale

u i
s t rib
d i
a u
a s
p i
c o
Conceptul de tranzacţie (I)
s e
n u  O tranzacție este o singură operațiune sau set de

A operațiuni care se comportă ca un întreg,


executându-se fie toate, fie niciuna, asigurând
astfel coerența datelor.
 Rolul tranzacţiilor: ar trebui să prevină apariția
unor circumstanțe neprevăzute la nivelul datelor.
 Operaţiile cuprinse într-o tranzacţie nu pot
fi executate parţial: dacă una dintre ele
eşuează atunci toate celelalte sunt anulate.

Cătălin Tudor 11
Gestiunea bazelor de date relaționale – 10/31/2021
Suport de curs

Conceptul de tranzacţie (II)


O tranzacţie poate fi:
 Salvată (commited) – când toate
operaţiile tranzacţiei au fost
încheiate cu succes, iar baza de
date este actualizată cu noile
modificări.

i
 Derulată înapoi (rollback) – toate
operaţiile tranzacţionate sunt
u
rib
anulate, iar baza de date revine la
starea dinaintea tranzacţiei.

is t
u d
s a
Tranzacţiio p i a
- Exemplificare
e c
 Să se efectueze ştergerea unei categorii de produse

u sprin mutarea produselor ei într-o altă categorie:

A n

Cătălin Tudor 12
Gestiunea bazelor de date relaționale – 10/31/2021
Suport de curs

Comenzi SQL uzuale în cadrul tranzacţiilor


@@ROWCOUNT - numărul de înregistrări afectate de o interogare
Exemplu:

ROLLBACK TRANSACTION – anulează o tranzacţie (care include şi


operaţia de actualizare).

RAISERROR (‘mesaj de afişat’, nivel de severitate al erorii,

i
cod de identificare)
 Se afişează un mesaj de eroare
u
rib
 Nivelul de severitate poate fi specificat între 0 si 25 (>20  erori

t
fatale)

is
 Codul de identificare poate fi atribuit de utilizator între 0 şi 255 şi e
folosit pentru depanarea procedurilor

d
a u
a s
p i
c o
s e
 Atomicitatea: Operaţiile se încheie cu succes sau eşuează

n u împreună. Doar dacă toate operaţiile din cadrul tranzacţiei sunt

A
efectuate cu succes tranzacţia este considerată completă.
 Consistenţa: Operaţiile unei tranzacţii lasă întotdeauna baza de
date într-o stare consistentă, fără a se încălca reguli implicit sau
explicit definite pentru asigurarea integrităţii bazei de date.
 Izolarea: Orice tranzacţie este independentă faţă de celelalte. O
tranzacţie nu va afecta nicio altă tranzacţie care se execută în
acelaşi timp.
 Durabilitatea: Principiile de executare a unei tranzacţii nu pot fi
afectate de problemele sistemului în care rezidă serverul SQL.

Cătălin Tudor 13
Gestiunea bazelor de date relaționale – 10/31/2021
Suport de curs

 Tranzacţii autosalvate (Autocommit):


 SQL Server asigură integritatea execuţiei unei interogări, indiferent
de tipul acţiunilor din cadrul acesteia.
 Este starea implicită de execuţie a interogărilor în SQL Server.
 Tranzacţii implicite:
 Oferă posibilitatea salvării modificărilor aduse la nivelul tabelelor
bazei de date doar când se cere explicit să fie salvate şi nu în mod
automat.
 Schimbarea modului de executare a unei tranzacţii din Autocommit
în Implicit se poate face prin comanda:
SET IMPLICIT_TRANSACTIONS {ON | OFF}
 În acest mod, tranzacţia este automat pornită la apariţia unei
u i
rib
instrucţiuni de modificare a stării tabelelor.
 Pentru finalizarea tranzacţiei se utilizează în mod explicit fie
comanda COMMIT, fie ROLLBACK.
is t
u d
s a
p i a
c o
s e
n u Tranzacţii explicite:

A
 Se utilizează atunci când mai mult de o singură operaţie de actualizare a
tabelelor sau a structurii acestora se execută în acelaşi timp.
 Pot fi utilizate specificând lista operaţiunilor dorite în interiorul blocului de
instrucţiuni BEGIN TRAN|TRANSACTION şi COMMIT|ROLLBACK
TRAN|TRANSACTION
 Pot fi imbricate pe mai multe niveluri, numărul de tranzacţii deschise
putând fi verificat prin utilizarea variabilei @@TRANCOUNT.
 Dacă instrucţiunea ROLLBACK survine la finalul mai multor tranzacţii,
toate acestea vor fi derulate înapoi, valoarea variabilei @@TRANCOUNT
devenind 0.

Cătălin Tudor 14
Suport de curs GBDR

Sisteme de gestiune a bazelor de date


relaţionale

Cursul 6
Declanşatori – utilitate şi scenarii de utilizare
Vederi în cadrul unei baze de date SQL Server

u i
s t rib
d i
a u
a s
p i
c o
Conceptul de tranzacţie
s e
n u  O tranzacție este o singură operațiune sau set de

A operațiuni care se comportă ca un întreg,


executându-se fie toate, fie niciuna, asigurând
astfel coerența datelor.
 Rolul tranzacţiilor: ar trebui să prevină apariția
unor circumstanțe neprevăzute la nivelul datelor.
 Operaţiile cuprinse într-o tranzacţie nu pot
fi executate parţial: dacă una dintre ele
eşuează atunci toate celelalte sunt anulate.

Cătălin Tudor 1
Suport de curs GBDR

Conceptul de tranzacţie
O tranzacţie poate fi:
 Salvată (commited) – când toate
operaţiile tranzacţiei au fost
încheiate cu succes, iar baza de
date este actualizată cu noile
modificări.

i
 Derulată înapoi (rollback) – toate
operaţiile tranzacţionate sunt
u
rib
anulate, iar baza de date revine la
starea dinaintea tranzacţiei.

is t
u d
s a
Tranzacţiio p i a
- Exemplificare
e c
 Să se efectueze ştergerea unei categorii de produse

u s prin mutarea produselor ei într-o altă categorie:

A n

Cătălin Tudor 2
Suport de curs GBDR

Comenzi SQL uzuale în cadrul tranzacţiilor


@@ROWCOUNT - numărul de înregistrări afectate de o interogare
Exemplu:

ROLLBACK TRANSACTION – anulează o tranzacţie (care include şi


operaţia de actualizare).

RAISERROR (‘mesaj de afişat’, nivel de severitate al erorii,

i
cod de identificare)
 Se afişează un mesaj de eroare
u
rib
 Nivelul de severitate poate fi specificat între 0 si 25 (>20  erori

t
fatale)

is
 Codul de identificare poate fi atribuit de utilizator între 0 şi 255 şi e
folosit pentru depanarea procedurilor

d
a u
a s
p i
c o
s e
 Atomicitatea: Operaţiile se încheie cu succes sau eşuează

n u împreună. Doar dacă toate operaţiile din cadrul tranzacţiei sunt

A
efectuate cu succes tranzacţia este considerată completă.
 Consistenţa: Operaţiile unei tranzacţii lasă întotdeauna baza de
date într-o stare consistentă, fără a se încălca reguli implicit sau
explicit definite pentru asigurarea integrităţii bazei de date.
 Izolarea: Orice tranzacţie este independentă faţă de celelalte. O
tranzacţie nu va afecta nicio altă tranzacţie care se execută în
acelaşi timp.
 Durabilitatea: Principiile de executare a unei tranzacţii nu pot fi
afectate de problemele sistemului în care rezidă serverul SQL.

Cătălin Tudor 3
Suport de curs GBDR

 Tranzacţii autosalvate (Autocommit):


 SQL Server asigură integritatea execuţiei unei interogări, indiferent
de tipul acţiunilor din cadrul acesteia.
 Este starea implicită de execuţie a interogărilor în SQL Server.
 Tranzacţii implicite:
 Oferă posibilitatea salvării modificărilor aduse la nivelul tabelelor
bazei de date doar când se cere explicit să fie salvate şi nu în mod
automat.
 Schimbarea modului de executare a unei tranzacţii din Autocommit
în Implicit se poate face prin comanda:
SET IMPLICIT_TRANSACTIONS {ON | OFF}
 În acest mod, tranzacţia este automat pornită la apariţia unei
u i
rib
instrucţiuni de modificare a stării tabelelor.
 Pentru finalizarea tranzacţiei se utilizează în mod explicit fie
comanda COMMIT, fie ROLLBACK.
is t
u d
s a
p i a
c o
s e
n u Tranzacţii explicite:

A
 Se utilizează atunci când mai mult de o singură operaţie de actualizare a
tabelelor sau a structurii acestora se execută în acelaşi timp.
 Pot fi utilizate specificând lista operaţiunilor dorite în interiorul blocului de
instrucţiuni BEGIN TRAN|TRANSACTION şi COMMIT|ROLLBACK
TRAN|TRANSACTION
 Pot fi imbricate pe mai multe niveluri, numărul de tranzacţii deschise
putând fi verificat prin utilizarea variabilei @@TRANCOUNT.
 Dacă instrucţiunea ROLLBACK survine la finalul mai multor tranzacţii,
toate acestea vor fi derulate înapoi, valoarea variabilei @@TRANCOUNT
devenind 0.

Cătălin Tudor 4
Suport de curs GBDR

 Tip special de procedură (SQL) care intervine atunci când


asupra bazei de date se cere executarea unei instrucţiuni
de modificare, ştergere sau adăugare (UPDATE, DELETE,
INSERT).
 Rol principal: implementarea restricțiilor complexe

 Rol secundar: actualizarea mai multor tabele în acelaşi timp


potrivit unor scenarii aparte.

i
 Declanşatorul este un obiect al bazei de date legat de un anumit
tabel şi este executat în mod automat. Un tabel poate avea mai
u
rib
mulţi declanşatori.

s t
 Pot fi vizualizaţi în baza de date în secţiunea Triggers a
tabelului pentru care au fost realizaţi.
i
u d
s a
p i a
c o
s e
n u
 Restricţiile de integritate referenţială au

A prioritate în faţa declanşatorilor. Dacă o operaţie


de actualizare are ca rezultat încălcarea integrităţii
referenţiale, se anulează execuţia declanşatorilor.
 Modificarea şi ştergerea în cascadă pot schimba
comportamentul declanşatorilor.
 Modul de funcţionare: Comenzile declanşatorului
sunt puse într-o singură tranzacţie împreună cu
operaţiunile de actualizare care l-au lansat.

Cătălin Tudor 5
Suport de curs GBDR

 Pentru adăugare: tabelul INSERTED - memorează


temporar înregistrările ce urmează a fi adăugate în
baza de date
 Pentru ştergere: tabelul DELETED - memorează
temporar înregistrările ce urmează a fi şterse
 Pentru modificare: tabelul DELETED memorează
temporar vechile valori din înregistrările ce urmează
a fi modificate, iar tabelul INSERTED noile valori ale
u i
rib
acestor înregistrări.

is t
u d
s a
p i a
c o
s e
n u CREATE TRIGGER nume_trigger ON nume_tabel
{FOR|INSTEAD OF} {INSERT|UPDATE|DELETE}

A AS
Begin
Instrucţiuni SQL
End
 FOR poate fi înlocuit cu AFTER – comenzi în cadrul
aceleiaşi tranzacţii

 INSTEAD OF - instrucţiunile SQL din cadrul triggerului


înlocuiesc operaţia de tip INSERT, UPDATE sau DELETE
care nu se mai execută

Pentru modificare se utilizează ALTER TRIGGER, iar pentru


ştergere DROP TRIGGER

Cătălin Tudor 6
Suport de curs GBDR

IF conditii
BEGIN
{INSTRUCŢIUNI}

END
ELSE
BEGIN
{INSTRUCŢIUNI}

u i
rib

END

is t
u d
s a
p i a
o
Exemplificare:
c
s e Niciun furnizor din Bucureşti nu trebuie să se şteargă
şi nici să poată fi modificat

n u Create TRIGGER [dbo].[trStergereFurnizoridinBucuresti]

A
ON [dbo].[Furnizori]
FOR UPDATE,DELETE
AS
BEGIN
if @@ROWCOUNT=0 return

if EXISTS(SELECT * FROM deleted WHERE Localitate='Bucuresti')


begin
raiserror ('Un furnizor nu poate fi sters daca are sediul in Bucuresti!', 16,1)
rollback transaction
end
END

Cătălin Tudor 7
Suport de curs GBDR

Exemplificare (2):
Definiţi un trigger care sa nu permită modificarea
salariului unui angajat la o valoare mai mică decât
salariul pe care îl are în momentul actualizării:

CREATE TRIGGER trMODIFICARE_SAL ON ANGAJATI


FOR UPDATE
AS

IF EXISTS(SELECT *
FROM DELETED, INSERTED
WHERE DELETED.CodAngajat=INSERTED.CodAngajat

BEGIN
AND DELETED.SALARIU>INSERTED.SALARIU)

u i
rib
RAISERROR('NU SE POATE STABILI UN SALARIU MAI MIC', 18,2)

t
ROLLBACK TRANSACTION
END

d is
a u
a s
p i
c o
Nu se poate face o plată mai mare decât restul de plată pentru o
anumită factură.

s e
n u Restul de plată pe fiecare Totalul pe fiecare factură

A
factură

Cătălin Tudor 8
Suport de curs GBDR

Obiecte de tip vedere (View)


 Categorie aparte de obiecte ale unei baze de date SQL Server

 Un obiect View: o reprezentare virtuală a unuia sau mai multor tabele


afişând datele din cadrul acestora dintr-o anumită perspectivă asociată,
cel mai adesea, unui rol al unui utilizator.

 View = tabelă virtuală, afişând câmpuri şi înregistrări din


tabelul/tabelele sursă, fără a stoca aceste date.

 Utilizată pentru a simplifica şi personaliza percepţia pe care fiecare


utilizator o va avea asupra bazei de date.

u i
rib
 Poate fi consultată prin interogarea ei cu ajutorul limbajului SQL.

is t
u d
s a
p i a
c o
e
Roluri

s
utilizatori

n u Server

A Câmp T1 Câmp R1 Câmp R2 Câmp T3

Tabel 1

Vedere user 1

Câmp R1 Câmp R2 Câmp R3

Câmp T2 Câmp T3 Câmp R2

Tabel 2

Vedere user 2

Cătălin Tudor 9
Suport de curs GBDR

Motivaţii în utilizarea obiectelor VIEW


 Distribuirea informaţiei pe roluri de utilizatori:
 Mecanism de securitate pentru restricţionarea accesului utilizatorilor la
datele incompatibile rolului ce le-a fost alocat.
 Utilizatorii vor vedea doar datele care îi interesează şi pe care le pot
manipula pentru realizarea sarcinilor asociate rolului fiecăruia.
 Simplificarea procesului de manipulare a datelor:
 O vedere deja regrupează date din mai multe tabele
 Interogarea unei vederi este mai simplă decât interogarea tuturor tabelelor
sursă ale acesteia.
 Personalizarea datelor:
 Utilizatorii vor vedea aceleaşi date, dar prezentate din perspective diferite.

u i
rib
 Combinarea datelor din baze de date distribuite:

t
 Tabele partiţionate prin distribuirea bazelor de date pot fi regrupate printr-
o vedere ce poate fi ulterior interogată cu mai mare uşurinţă.

d is
a u
a s
p i
c o
Tipuri de vederi:
s e
 Vederi de tip sistem: utilizate pentru a fi interogate în vederea

n u obţinerii informaţiilor privind structura bazei de date.

A
 Vederi Information Schema
o Exemplu:
SELECT * FROM INFORMATION_SCHEMA.COLUMNS Where
TABLE_NAME=‘Angajati'
 Vederi tip Catalog
o Exemplu:
SELECT * FROM sys.tables
 Vederi pentru managementul dinamicii datelor (Data Management View):
o Exemplu:
SELECT session_id, client_net_address
FROM sys.dm_exec_connections
 Vederi definite de utilizator: utilizate potrivit scenariilor enunţate
anterior.

Cătălin Tudor 10
Suport de curs GBDR

Crearea şi manipularea vederilor


 Două moduri de definire a unei vederi:
 Grafic, prin interfaţa SSMS: definirea câmpurilor şi a condiţiilor de
filtrare a datelor se poate realiza vizual;
 Utilizând limbajul SQL în gestionarea obiectelor de tip View
(CREATE | ALTER | DROPView …)

 Manipularea unei vederi:


 Datele dintr-un View pot fi invocate cu uşurinţă prin aceleaşi metode

i
prin care sunt manipulate tabelele bazei de date (SELECT, UPDATE,

u
DELETE, INSERT)

rib
 La interogarea unei vederi atât datele cât şi câmpurile (structura)

t
acesteia sunt obţinute în mod DINAMIC prin execuţia interogării care
stă la baza ei.

d is
a u
a s
p i
c o
Crearea unei vederi prin interfaţa SSMS

s e
n u
A
Selectare
tabele
sursă

Cătălin Tudor 11
Suport de curs GBDR

Panoul surselor de date

Grila de câmpuri

u i
rib
Transpunerea în limbajul
SQL

is t
u d
s a
p i a
c o
s e
n u
A Selectarea câmpurilor ce
formează vederea

Cătălin Tudor 12
Suport de curs GBDR

Denumirea câmpurilor afişată


Opţiuni privind sortarea
în cadrul vederii

Câmp calculat introdus


suplimentar:
Cantitate*PretVanzare

u i
rib
Criteriu de filtrare a datelor
afişate

is t
u d
s a
p i a
o
Agregarea datelor - exemplu
c
s e
Să se creeze o vedere a tabelelor care să afişeze pentru fiecare bon de casă emis în anul 2011
valoarea totală şi numărul de produse din cadrul acestuia.

n u Pasul 1: Selectarea

A
tabelelor sursă

Cătălin Tudor 13
Suport de curs GBDR

Agregarea datelor - exemplu


Să se creeze o vedere a tabelelor care să afişeze pentru fiecare bon de casă emis în anul 2011
valoarea totală şi numărul de produse din cadrul acestuia.

Pasul 2: Selectarea
câmpurilor necesare,
definirea formulelor de
calcul şi stabilirea
condiţiilor de filtrare

u i
s t rib
d i
a u
a s
p i
o
Agregarea datelor - exemplu
c
s e
Să se creeze o vedere a tabelelor care să afişeze pentru fiecare bon de casă emis în anul 2011
valoarea totală şi numărul de produse din cadrul acestuia.

n u
A
Pasul 3: Precizarea
grupărilor de date şi
aplicarea funcţiilor de
grupare specifice

Cătălin Tudor 14
Suport de curs GBDR

Gestionarea vederilor prin limbaj SQL


CREATE VIEW numeView As CREARE VIEW
fraza_SQL_SELECTIE

ALTER VIEW numeView As MODIFICARE VIEW


fraza_SQL_SELECTIE

DROP VIEW numeView ŞTERGERE VIEW

Exemplu creare:
CREATE VIEW vwProduse As
SELECT * FROM Produse

i
WHERE UM=‘Buc’

u
rib
Exemplu modificare:

t
ALTER VIEW vwProduse As

is
SELECT * FROM Produse

d
WHERE UM=‘kg’ or UM=‘Buc’

a u
a s
p i
o
Manipulare vederi prin limbaj SQL

c
s e
Selectarea informaţiilor din cadrul unei vederi:

n u
SELECT
FROM
numeCâmp1, numeCâmp2, …
numeView

A
Where Condiţii de filtrare
Group by Câmpuri de Grupare
Having Condiţii grupare
Order by Câmpuri de sortare ASC|DESC

Exemplu de interogare a unei vederi:


SELECT Denumire as DenumireProdus
FROM vwProduse
Where CodIntern in (1,3,4)

Exemplu de interogare a unei vederi prin compunere cu alte tabele:


Select Denumire as DenumireProdus
FROM vwProduse P inner join CategorieProdus CP
On P.CodCategorie = CP.CodCategorie
Where CP.Denumire=‘Dulciuri’

Cătălin Tudor 15
GBDR SQL Server – Note de curs 07.11.2021

Manipularea seturilor de rezultate în


SQL Server
GBDR - Cursul 7
u i
s t rib
d i
a u
a s
Elemente deo p i
e c control pentru manipularea

s
seturilor de date în T-SQL

nu
 Manipularea procedurală a datelor în SQL Server:

A 


Variabile valorice;
Variabile de tip tabel;
Structuri de control:
 Alternative;
 Repetitive.
 Instrucţiuni procedurale;
 Definirea de blocuri de instrucțiuni.
 Tipuri de date definite de utilizator
 Manipularea valorilor nule în SQL Server

Cătălin Tudor 1
GBDR SQL Server – Note de curs 07.11.2021

Declararea şi utilizarea variabilelor valorice


locale în SQL Server (I)
 Variabilă locală: un obiect T-SQL care are capacitatea de a
reţine (temporar) o singură valoare de un anumit tip
explicit precizat.
 Scenarii de utilizare:
 Pe post de contor pentru a reţine numărul de iteraţii executate
prin structurile de control;
 Reţinerea unei valori în urma interogării tabelelor printr-o
instrucţiune SQL care returnează un singur rezultat;
Salvarea valorilor care sunt returnate de către o funcţie sau de

i

u
către o procedură cu parametri de ieșire.

s t rib
d i
a u
a s
p i
c o
Declararea şi utilizarea variabilelor valorice

s e
locale în SQL Server (II):

nu
 Declararea unei variabile valorice:

A DECLARE @NumeVariabilă TIP_DATĂ


Exemple:
DECLARE @NumePersoana nvarchar(100);
DECLARE @NumarMatricol int, @NumeStudent nvarchar(50)
 Clauza DECLARE:
 Stabilește un nume (unic la nivel de interogare) variabilei valorice;
 Definește tipul de dată al variabilei valorice locale;
 Alocă de la început valoarea NULL variabilei locale declarate.

Cătălin Tudor 2
GBDR SQL Server – Note de curs 07.11.2021

Declararea şi utilizarea variabilelor valorice


locale în SQL Server (III):
 Atribuirea de valoare unei variabile locale:
1. SET @NumeVariabila=Valoare
2. Select @NumeVariabila=Valoare
Exemple:
SET @NumePersoana=‘Ionescu Mircea’
SELECT @NumarMatricol=451789, @NumeStudent=‘Popescu
George’

SET @NumePersoana=(Select Nume From Persoana Where


CNP=‘2851210100035’)
Select @NumePersoana=Nume FROM Persoana Where
u i
rib
LocalitateDomiciliu=‘Bucuresti’

is t
u d
s a
p i a
c o
s e de tip tabel
Variabile

nu
 Sunt alocări de memorie ce permit stocarea de seturi de

A
înregistrări definite sub forma unui tabel virtual
 Pot fi utilizate pentru a reţine temporar, în vederea
prelucrării, date distribuite pe mai multe câmpuri definite
în prealabil.
 Pot fi utilizate în operaţii de compunere cu alte tabele
(JOIN), de actualizare (INSERT, UPDATE, DELETE) sau
pot fi interogate separat (SELECT).
 Constituie o modalitate eficientă de prelucrare a datelor
prin operaţii ale algebrei relaţionale.

Cătălin Tudor 3
GBDR SQL Server – Note de curs 07.11.2021

Variabile de tip tabel – declarare şi utilizare


 Sintaxa:
Declare @NUME_VARIABILĂ_TABEL TABLE
(
Nume_Câmp_1 Tip_Dată_1,
Nume_Câmp_2 Tip_Dată_2

Nume_Câmp_n Tip_Dată_n
)

Insert into @NUME_VARIABILĂ_TABEL (Nume_Camp1,


Nume_Camp2, …) values (Valoare1,Valoare2, …)

u i
rib
Select * FROM @Nume_Variabilă_Tabel

t
Where Condiţii

d is
a u
a s
p i
c o
s e de tip tabel - utilizare
Variabile

A nu

Cătălin Tudor 4
GBDR SQL Server – Note de curs 07.11.2021

Clauza OUTPUT
 Returnează informaţii bazate pe fiecare rând afectat de o
operaţiune de actualizare a unui tabel.
 Se bazează pe tabelele temporare DELETED și INSERTED.
 Utilizată împreună cu clauza INTO permite încărcarea
înregistrărilor adăugate, modificare sau șterse printr-o
instrucţiune INSERT, UPDATE sau DELETE într-o variabilă de
tip tabel pentru prelucrarea ulterioară.
Exemplu:
DELETE FROM Furnizori WHERE Denumire like ‘%LTD%’
u i
rib
OUTPUT DELETED INTO @Furnizori

is t
u d
s a
p i a
c o
Variabile de tip tabel – utilizare în clauza OUTPUT

s e
n u
A

Cătălin Tudor 5
GBDR SQL Server – Note de curs 07.11.2021

Tipuri de date definite de utilizator


 Scop: reutilizarea unui anumit tip de dată personalizat
pentru mai multe câmpuri ale unui tabel sau din tabele
diferite
 Mod de definire:
CREATE Type NumeTipData
FROM TipDataDeBaza restricţii
Exemplu:

u i
s t rib
d i
a u
a s
p i
c o
Tipuriede tabele definite de utilizator
s
nu
 User defined table type: un tip de dată care are la bază

A
o structură tabelară
 Scop: Definirea unei structuri de tip tabel și reutilizarea sa
ulterioară.
 Un tip de dată tabelar definit de utilizator poate fi folosit
pentru
 a declara parametri de tip tabel pentru proceduri sau funcţii
 pentru a declara variabile de tip tabel ce pot fi utilizate în
diverse blocuri de interogare a bazei de date.

Cătălin Tudor 6
GBDR SQL Server – Note de curs 07.11.2021

Tipuri de tabele definite de utilizatori


 Exemplu de definire și utilizare

u i
s t rib
d i
a u
a s
p i
c o
Sintaxa pentru controlul fluxului execuţiei

s e
nu
 Reprezintă totalitatea structurilor, funcţiilor sau

A
declaraţiilor care permit interconectarea, corelaţiile și
interdependenţa instrucţiunilor SQL din cadrul unei
interogări.
 Fără limbajul de control al fluxului de execuție
instrucțiunile se pot executa doar în ordine secvențială.
 Acțiunea structurilor de control se întinde doar în
perimetrul interogării în care sunt declarate, și nu pentru
mai multe interogări diferite.

Cătălin Tudor 7
GBDR SQL Server – Note de curs 07.11.2021

Structuri de control în instrucţiuni SQL


 Structura alternativă IF… ELSE… :
IF CONDIŢIE
BEGIN
Instrucţiuni_SQL
END
ELSE
BEGIN
Instrucţiuni_SQL
END

Observație: Atunci când mai multe instrucțiuni trebuie să se execute ca


acțiune a îndeplinirii sau neîndeplinirii unei condiții se impune gruparea
lor în cadrul unui bloc prin încadrarea lor în interiorul sintaxei: BEGIN …
END

u i
s t rib
d i
a u
a s
p i
c o
s e
Utilizare structură alternativă - Exemplu

A nu

Funcția PRINT – permite afișarea unui mesaj precizat de utilizator

Cătălin Tudor 8
GBDR SQL Server – Note de curs 07.11.2021

Imbricarea structurilor alternative - Exemplu


Să se definească un procent de primă din vânzări pentru angajatul cu marca 14123 în funcție
de valoarea totală a vânzărilor anului 2013.

u i
s t rib
d i
a u
a s
p i
Structuri deocontrol
e c în instrucţiuni SQL

s Structura repetitivă WHILE … :

A nu WHILE Expresie condiţională


BEGIN
Instrucţiuni_SQL
[BREAK | CONTINUE]
Instrucţiuni_SQL
END

BREAK – cauzează ieșirea din structura repetitivă înainte de


terminarea iteraţiei specifice.
CONTINUE – ignoră toate instrucțiunile care urmează după
execuţia sa și reia iteraţia
DECLARE @v int=1
WHILE @v<4
BEGIN
Print ‘Valoarea lui v este: ‘ + convert(char(1),@v)
Set @v=@v+1
END

Cătălin Tudor 9
GBDR SQL Server – Note de curs 07.11.2021

Structura repetitivă WHILE - Exemplu


Să se efectueze majorări succesive ale salariilor angajaţilor cu câte 50 lei până când media salariilor
depășește suma de 1800 lei., Dacă salariul maxim este mai mare de 2000 lei în urma majorării,
operaţia se va sista.

u i
s t rib
d i
a u
a s
p i
c o
s e
n u
A

Cătălin Tudor 10
Gestiunea bazelor de date relaţionale –Note de curs 19.11.2021

u i
s t rib
d i
a u
a s
p i
c o
s e
n u
A
Variabilă locală: un obiect T‐SQL care are 
capacitatea de a reţine (temporar) o singură 
valoare de un anumit tip explicit precizat.
Scenarii de utilizare:
Pe post de contor pentru a reţine numărul de 
iteraţii executate prin structurile de control;
Reţinerea unei valori în urma interogării tabelelor 
printr‐o instrucţiune SQL care returnează un singur 
rezultat;
Salvarea valorilor care sunt returnate de către o 
funcţie sau de către o procedură cu parametri de 
ieşire.

Cătălin Tudor 1
Gestiunea bazelor de date relaţionale –Note de curs 19.11.2021

Declararea unei variabile valorice: 

DECLARE @NumeVariabilă TIP_DATĂ
Exemple:
DECLARE @NumePersoana nvarchar(100);
DECLARE @NumarMatricol int, @NumeStudent nvarchar(50)
Clauza DECLARE:
Stabileşte un nume (unic la nivel de interogare) variabilei 
valorice;
Defineşte tipul de dată al variabilei valorice locale;
u i
rib
Alocă de la început valoarea NULL variabilei locale declarate.

is t
u d
s a
p i a
c o
s e
n u Atribuirea de valoare unei variabile locale: 
A 1. SET @NumeVariabila=Valoare
2. Select @NumeVariabila=Valoare
Exemple:
SET @NumePersoana=‘Ionescu Mircea’
SELECT @NumarMatricol=451789, 
@NumeStudent=‘Popescu George’

SET @NumePersoana=(Select Nume From Persoana
Where CNP=‘2851210100035’)
Select @NumePersoana=Nume FROM Persoana Where 
LocalitateDomiciliu=‘Bucuresti’ 

Cătălin Tudor 2
Gestiunea bazelor de date relaţionale –Note de curs 19.11.2021

Definiţie: O procedură stocată este un obiect al


bazei de date SQL Server conţinând una sau mai
multe clauze SQL care permit efectuarea de
modificări asupra bazei de date sau extragerea
informaţiilor din cadrul ei.
Procedurile stocate:
Pot conţine instrucţiuni privind modificarea structurală a
bazei de date;
Pot conţine parametri de intrare şi pot returna valori

i
multiple prin definirea unor parametri de ieşire;
Pot returna o valoare care să indice starea executării
u
rib
procedurii în ansamblul ei.

t
Pot conţine structuri de control de diverse feluri.

d is
a u
a s
p i
c o
s e
n u Flexibilitate sporită în programarea structurilor

A SQL de selectare sau actualizare a datelor;


O procedură poate fi executată de oricâte ori şi
în paralel de mai mulţi utilizatori, permiţând
reutilizarea ei în funcţie de necesităţi;
Elimină o mare parte din codul redundant la
nivelul unei aplicaţii;
Reduce traficul în reţeaua de calculatoare la
apelarea datelor stocate pe server;
Pot deţine, asemănător obiectelor de tip
Vedere, atribute de securitate ce pot îmbunătăţi
politicile de acces la datele senzitive.

Cătălin Tudor 3
Gestiunea bazelor de date relaţionale –Note de curs 19.11.2021

Proceduri de sistem: au caracter administrativ şi 
informaţional în legătură cu obiectele bazei de 
date, fiind stocate de baza de date generică 
numită Master.
Proceduri definite de utilizator: sunt create în 
scopul de a realiza diverse operaţii în cadrul 
bazei de date ca necesitate a unui grup de 
utilizatori:
SELECT, INSERT, UPDATE, DELETE;
Prelucrări asupra datelor din diferite tabele şi 
u i
rib
afişarea rezultatului;
Introducerea de restricţii de validare suplimentare;
Trimiterea de mesaje prin e‐mail, etc.
is t
u d
s a
p i a
c o
s e
n u• sp_databases
• permite afişarea listei bazelor de date de pe server

A • sp_columns
• permite afişarea informaţiilor privind coloanele unui tabel 
specificat ca parametru
• sp_executesql
• permite executarea unor instrucţiuni SQL specificate ca 
parametru
• sp_help
• afişează toate informaţiile disponibile privind un anumit obiect 
din baza de date
• sp_rename
• permite redenumirea obiectelor din baza de date
• sp_spaceused
• afişează numărul de înregistrări şi spaţiul utilizat de un anumit 
tabel sau view pe server

Cătălin Tudor 4
Gestiunea bazelor de date relaţionale –Note de curs 19.11.2021

Crearea unei proceduri stocate:
Vizual, prin interfaţa SSMS;
Prin comanda SQL:
CREATE PROC | Procedure <<NumeProcedură>>
[ListăParametri]
AS
Instrucţiuni SQL
Modificarea unei proceduri stocate:

i
Prin comanda SQL: ALTER PROC | Procedure …
Ştergerea unei proceduri stocate:
u
rib
Prin comanda SQL: DROP PROC | Procedure …

is t
u d
s a
p i a
c o
e
Pasul 1: Generarea unei noi 

u s proceduri stocate

n
CTRL+SHIFT+M

Cătălin Tudor 5
Gestiunea bazelor de date relaţionale –Note de curs 19.11.2021

Pasul 2: Precizarea 
instrucţiunilor SQL aferente 
procedurii stocate

u i
s t rib
d i
a u
a s
p i
c o
s e
u
Selectarea tabelelor sursă

A n

Cătălin Tudor 6
Gestiunea bazelor de date relaţionale –Note de curs 19.11.2021

Construirea interogării de selecţie 
aferente procedurii stocate

u i
s t rib
d i
a u
a s
p i
c o
s e Executarea codului de creare a 
procedurii stocate pe server

n u
A

Cătălin Tudor 7
Gestiunea bazelor de date relaţionale –Note de curs 19.11.2021

Procedura parametrizată: 
prezintă abilitatea de a transmite valoarea unei 
condiţii prin intermediul unui parametru;
Permite printr‐o singură definiţie acoperirea nevoilor 
informaţionale ale mai multor utilizatori.
Mod de definire:
CREATE PROC <nume_procedura>
@<Nume_parametru> <tip_de_date> [OUTPUT] 

i

AS
u
rib
<instrucţiuni SQL>

is t
u d
s a
p i a
c o
s e
n u
Să se creeze o procedură stocată prin care să se afişeze  toţi 
vânzătorii angajaţi într‐un an precizat ca parametru:

A CREATE PROC usp_VanzatoriParametru
@AnAngajare smallint
AS
BEGIN
Select Nume, Prenume, DataAngajarii
FROM Vanzatori
WHERE
YEAR(DataAngajarii)=@AnAngajare

END

Cătălin Tudor 8
Gestiunea bazelor de date relaţionale –Note de curs 19.11.2021

Declarare:
Declare @NumeVariabilă as TipDeDate

Atribuire valori variabilă:

Set @NumeVariabilă = Valoare

sau

i
Select @NumeVariabilă=Valoare

u
s t rib
d i
a u
a s
p i
c o
s e
n u
Să se realizeze o procedură stocată care să afişeze suma comisioanelor 

A
totale cuvenite unui vânzător a cărui marcă se va preciza prin parametru.

Cătălin Tudor 9
Gestiunea bazelor de date relaţionale –Note de curs 19.11.2021

Să se realizeze o procedură stocată care să afişeze într‐o variabilă de 
ieşire procentul comisionului unui vânzător specificat în prealabil

u i
s t rib
d i
a u
a s
p i
c o
s e
EXEC nume_procedură

A nu EXEC nume_procedură [val_param1, 
val_param2, …..]

Exec usp_ListaVanzari

Exec usp_VanzatoriParametru 2007

Exec usp_VanzatoriParametru 2005


Identic cu
Exec usp_VanzatoriParametru @AnAngajare= 2005

Cătălin Tudor 10
Gestiunea bazelor de date relaţionale –Note de curs 19.11.2021

Definire:
CREATE Procedure NUME_PROCEDURĂ_STOCATĂ
@NUME_PARAMETRU TIP_DATA = ValoareImplicită
AS
Instrucţiuni_SQL

Apelare:
Când procedura stocată este executată valoarea implicită este utilizată 
dacă nici o valoare nu este specificată în mod explicit.

Varianta 1: Precizarea valorii parametrului


Exec NUME_PROCEDURĂ_STOCATĂ Valoare_Parametru
u i
t
Varianta 2: Păstrarea valorii implicite a parametrului de intrare

s rib
i
Exec NUME_PROCEDURĂ_STOCATĂ

u d
s a
p i a
c o
Parametri opţionali în proceduri stocate Exemple
s
Definire: e
n u
A
Apelare:

Cătălin Tudor 11
Gestiunea bazelor de date relaţionale –Note de curs 19.11.2021

Reguli:
Enumerarea parametrilor de intrare se va face prin 
separarea acestora prin virgulă;
Definirea parametrilor de intrare se poate realiza prin 
imbricarea parametrilor obligatorii cu cei opţionali;
La executarea procedurii stocate se va ţine cont de 
ordinea în care parametrii au fost precizaţi doar dacă 
nu se va specifica în mod explicit numele parametrului.
Când un parametru opţional apare înaintea altor 
parametri obligatorii, nespecificarea unei valori pentru 
acesta determină utilizarea numelor celorlalţi 
u i
rib
parametri în precizarea valorilor acestora sub forma:
@NumeParametru=Valoare.
is t
u d
s a
p i a
c o
Utilizarea mai multor parametri simultan
s
Definire: e
n u
A
Apelare:

Cătălin Tudor 12
Gestiunea bazelor de date relaţionale –Note de curs 19.11.2021

Reprezintă soluţia SQL Server pentru trimiterea 
unui întreg set de date, grupate într‐o structură 
tabelară, în vederea utilizării ca variabilă de tip 
tabel în corpul procedurii stocate;
Tipul parametrului de tip tabel trebuie să fie 
declarat în prealabil ca tip de dată tabelar 
definit de utilizator;
La executarea procedurii stocate, parametrul de 
tip tabel va fi o variabilă din acelaşi tip definit de 
u i
rib
utilizator ce trebuie declarată în prealabil.

is t
u d
s a
p i a
c o
s e
n u
A
Pasul 1. Crearea tipului de dată tabelar:
Create TYPE NumeTipTabel as Table (Camp1 tip_dată, câmp2
tip_dată,…)
Pasul 2. Crearea procedurii stocate cu 
parametru de tip tabel
Create Proc NumeProcedură @NumeParametruTabel NumeTipTabel
READONLY
Pasul 3. Apelarea procedurii stocate
Declare @tVariabilă as NumeTipTabel
Exec NumeProcedură @tVariabilă

Cătălin Tudor 13
Gestiunea bazelor de date relaţionale –Note de curs 19.11.2021

Cerinţă: Să se creeze o procedură stocată prin care să se adauge un 
bon de casă cu toate produsele din cadrul său

u i
s t rib
d i
a u
a s
p i
c o
s e
u
Executarea procedurii stocate cu parametru de tip tabel

A n

Cătălin Tudor 14
Autor:Cătălin Tudor

Sisteme de gestiune a bazelor de date


relaţionale

Cursul 9

Funcții definite de utilizator în SQL Server

u i
s t rib
d i
a u
a s
p i
c o
s e
nu Funcţia utilizator: defineşte un set de instrucţiuni
şi secvenţe de control SQL aplicat pentru

A prelucrarea datelor din tabele sau alte obiecte


interogabile returnând o valoare.
Se constituie într-un obiect SQL de sine stătător
ce poate fi apelat prin precizarea numelui şi
parametrilor săi ori de câte ori este nevoie în
cadrul altor obiecte SQL Server.
Poate fi utilizată în cadrul obiectelor de tip View sau al
procedurilor stocate diminuând considerabil
dimensiunea codului SQL şi facilitând o mai bună
structurare a acestuia.
Poate fi utilizată pentru simularea unor tabele virtuale ce
pot fi interogate asemănător tabelelor bazei de date.

1
Autor:Cătălin Tudor

Funcţii de tip scalar (scalar functions)
Realizează o prelucrare conform unui algoritm 
conceput de utilizator ţinând cont de valorile 
parametrilor specifici. 
Returnează o singură valoare prezentând un tip de 
dată scalar (predefinit sau definit de utilizator)
Funcţii de tip tabelar (table valued functions)
returnează un set de înregistrări ce poate fi asimilat 
unui tabel virtual.
În funcţie de tipul în care sunt definite pot fi:
u i
rib
Funcţii de tip tabel în linie (inline): returnează un tabel ca rezultat al 
unei instrucţiuni SQL fără a fi nevoie definirea acestuia.

s t
Funcţii tabel de tip multi‐instrucţiune: necesită definirea explicită a 
tabelului rezultat.
i
u d
s a
p i a
c o
s e
u
Acceptă zero sau mai mulţi parametri 

A n Constă în două părţi: 
Returnează o singură valoare
Antetul funcţiei în care se definesc numele funcţiei, lista parametrilor şi 
tipul de dată returnat de funcţie.
Corpul funcţiei în care este definit algoritmul de calcul al valorii rezultat 
care se termină cu clauza RETURN.
Apelarea funcţiei poate fi făcută în cadrul 
instrucţiunilor SQL în clauze precum SELECT, 
WHERE , GROUP BY, HAVING sau ORDER BY.
Se recomandă atunci când un anumit cod sau 
secvenţă SQL este utilizat/ă în mai multe 
proceduri.
Pentru apelarea ei se va utiliza inclusiv numele 
proprietarului.

2
Autor:Cătălin Tudor

Funcţii de tip scalar (scalar 
functions)
• CREATE FUNCTION [numeproprietar.] nume_funcţie ([ @parametru_1 AS
tip_de_date], …. [ @parametrul_n AS tip_de_date] )

RETURNS tip_de date


AS
BEGIN
INSTRUCŢIUNI SQL
RETURN valoare de returnat
END

• Pentru modificare:

u i
rib
• ALTER FUNCTION .....
• Pentru ştergere:
• DROP FUNCTION .....
is t
u d
s a
p i a
c o
s e Funcţii de tip scalar ‐ Exemplu 

nu
A

3
Autor:Cătălin Tudor

Funcţii de tip tabelar (table valued functions)
A. Varianta INLINE.
• se returnează un tabel ca rezultat, fără a fi nevoie
să se definească structura acestuia
• nu sunt permise BEGIN ….END
• este permisă o singură frază SQL de tip SELECT
• fiecare câmp din interogarea sursă trebuie să aibă
un nume
• clauza ORDER BY este permisă numai dacă se
utilizează împreună cu TOP
• nu sunt permise prelucrări complexe

u i
rib
• Coloanele pe care funcţia de tip tabel le va
returna sunt dictate de instrucţiunea SELECT care
stă la baza ei,

is t
u d
s a
p i a
c o
s e
nu Funcţii de tip tabelar (table valued functions)

A • A. Varianta INLINE.

CREATE FUNCTION [numeproprietar.] nume_funcţie ([ @parametru_1 AS


tip_de_date], … [ @parametrul_n AS tip_de_date] )

RETURNS TABLE
As
RETURN (fraza_SQL_SELECT)

4
Autor:Cătălin Tudor

Funcţii tabel de tip INLINE ‐ exemple

u i
s t rib
d i
a u
a s
p i
c o
s e
n uFuncţii de tip tabelar (table valued functions)

A B. varianta MULTI-INSTRUCŢIUNE
• se returnează un tabel rezultat
• este necesar să se definească explicit structura tabelului
rezultat
• poate include prelucrări complexe

5
Autor:Cătălin Tudor

Funcţii de tip tabelar (table valued functions)
B. varianta MULTI-INSTRUCŢIUNE

CREATE FUNCTION [numeproprietar.] nume_funcţie


([ @parametru_1 AS tip_de_date], …. [ @parametrul_n AS
tip_de_date] )

RETURNS @variabila_ieşireTABLE
(câmp_1 tip de date, …câmp_N tip de date)

AS
BEGIN
INSTRUCŢIUNI SQL
RETURN
END
u i
s t rib
d i
a u
a s
p i
c o
e
Funcţii de tip tabelar ‐ Exemplu

u s
A n

6
Autor:Cătălin Tudor

Clauza Cross Apply
• Permite transmiterea unei valori dinamice (valoarea
aferentă unui câmp al interogării) funcţiei de tip
utilizator ca valoare a unui parametru.
• Se utilizează atunci când valoarea unui parametru
nu este o valoare scalară (cunoscută şi specificată
la momentul apelării funcţiei de tip tabel) ci este
specificată prin valorile pe care un anumit câmp
dintr-un set de date le deţine.
• Forma generală:

i
Select Nume_Câmp1

u
FROM Tabel1

rib
Cross Apply nume_funcţie_tabel(Tabel1.Nume_Câmp1) 

is t
u d
s a
p i a
c o
s e
Clauza Cross Apply ‐ Exemplu 
u
• Să se definească o funcţie de tip tabel care să permită
afişarea tuturor bonurilor de casă pe care apare un anumit

A n produs şi a valorii acestuia din cadrul bonului respectiv.

7
Autor:Cătălin Tudor

Cerinţe exemplificare
• Realizaţi o funcţie de tip scalar care să afişeze starea de
plată a unui bon de casă comparând totalul bonului cu
totalul încasat pentru acel bon. Funcţia trebuie să
returneze textul ‘neachitat’ sau ‘achitat’, după caz.
o Să se apeleze această funcţie pentru un singur bon de casă.
o Să se apeleze funcţia într-o interogare care să afişeze lista bonurilor de casă din
luna curentă, precizând numărul bonului, data şi starea de plată a acestuia.

• Să se realizeze o funcţie de tip tabel care să afişeze pentru


un anumit casier precizat printr-o marcă şi pentru o
anumită dată care este lista bonurilor de casă din ziua
respectivă emise de casier şi totalul încasat pentru fiecare
dintre acestea. Să se apeleze această funcţie printr-o

i
procedură stocată care va afişa date despre vânzător şi

u
lista bonurilor emise de acesta.

s t rib
d i
a u
a s
p i
c o
s e
nu
A

8
12/10/2021

Manipularea seturilor de rezultate


în SQL Server
Valori nule, cursoare, expresii tabelare, tratarea erorilor

Valori nule în SQL Server
• O valoare NULL indică faptul că acea valoare nu este
cunoscută.
• O valoare nulă este diferită de valoarea 0 sau de un şir de
caractere de lungime 0.
• Valoarea NULL apare atunci când valoarea nu este cunoscută,
nu este aplicabilă, sau se va adăuga mai târziu.
• Comparaţiile care implică drept operand valoarea NULL
returnează o eroare dacă se utilizează comparaţia prin
operatorii de comparaţie cunoscuţi.
• Pentru a se testa dacă un câmp are sau nu valoarea nulă într‐
o interogare se pot folosi operatorii IS sau IS NULL în clauza
WHERE sau într‐o structură CASE.
• O valoare nulă poate fi explicit inserată sau atribuită prin
modificare unui câmp prin neincluderea câmpului respectiv
într‐o clauză INSERT sau UPDATE.

1
12/10/2021

Funcţii pentru tratarea valorilor nule în 
SQL Server
• Funcţia ISNULL – înlocuieşte valoarea NULL cu o
valoare cunoscută precizată.
• Sintaxă:
ISNULL (Expresie de verificat, Valoare de înlocuit)
Exemplu:
Select DenumireProdus, ISNULL(PretMinVanzare,0.00)
FROM Produse.
• Funcţia COALESCE ‐ evaluează mai multe valori
precizate ca argument şi returnează prima valoare
care nu este nulă.
• Sintaxă:
COALESCE (Expresie1, Expresie2, …)

Exemplu de utilizare a funcţiei 
COALESCE

2
12/10/2021

Exemplu de utilizare a funcţiei COALESCE

Utilizarea cursoarelor SQL


 Cursor SQL - o modalitate de parcurgere secvențială a unui
set de înregistrări returnat de o frază SQL de tip SELECT
 Permite descompunerea setului de înregistrări aferent clauzei
SELECT în vederea unei prelucrări unitare independente a
datelor din fiecare înregistrare.
 Tehnica poate fi utilizată când se dorește efectuarea de
prelucrări complexe care se repetă pentru fiecare înregistrare
din cadrul setului de date.
 Constă într-o structură repetitivă de extragere a unei singure
înregistrări din setul de date care se va efectua până în
momentul în care toate înregistrările au fost epuizate.

3
12/10/2021

Logica utilizării cursoarelor SQL


Pasul 1: alocarea unei zone de memorie în
vederea reţinerii datelor stocate de cursor

Pasul 2: deschiderea cursorului (setul de


înregistrări se încarcă în memorie)

Pasul 3: extragerea unei înregistrări din set

Pasul 4: Precizarea operaţiilor care urmează


a fi efectuate în mod repetat până la
epuizarea înregistrărilor

Pasul 5: Închiderea cursorului

Pasul 6: Eliberarea zonei de memorie


ocupate de cursor

Declararea unui cursor (I)


 Sintaxă:

DECLARE nume_cursor CURSOR


[ FORWARD_ONLY | SCROLL ]
[ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ]
[ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ]
FOR instructiune_SQL_SELECT
[ FOR UPDATE [ OF nume_coloana [ ,...n ] ] ]

 Opţiuni de deplasare prin înregistrări:


 SCROLL – permite operațiile FIRST, LAST, PRIOR, NEXT,
RELATIVE, ABSOLUTE pentru deplasarea în cadrul
înregistrărilor cursorului
 FORWARD_ONLY – permite deplasarea numai în modul
“înainte” în cadrul înregistrărilor cursorului.

4
12/10/2021

Declararea unui cursor (II)


 Opţiuni de parcurgere și actualizare a datelor:
 STATIC – determină realizarea unei copii temporare a setului de
înregistrări pe care se lucrează. În cazul în care se fac modificări în
tabelele folosite ca sursă de către cursor, acestea nu se reflectă în
cadrul setului de înregistrări virtual, asociat cursorului. Cursorul nu
este actualizabil.
 DYNAMIC – permite ca orice modificare efectuată în tabelele
sursă ale cursorului să se reflecte automat în setul de înregistrări
asociat acestuia. În acest tip de cursor nu se poate utiliza
ABSOLUTE.
 FAST_FORWARD – se utilizează pentru a optimiza accesul la
înregistrările cursorului (numai “înainte”).
 KEYSET – specifică faptul că înregistrările din cursor sunt deschise
într-o anumită ordine.

Declararea unui cursor (III)


 Opţiuni de blocare a accesului la setul de date:
 SCROLL_LOCKS – blochează înregistrările care se citesc
(pentru ceilalţi utilizatori), în așa fel încât orice operaţie de
actualizare pe înregistrările cursorului să se efectueze cu
succes.
 OPTIMISTIC – nu blochează înregistrările citite, însă în cazul
în care alţi utilizatori efectuează actualizări pe aceleași
înregistrări cu cele din cursor, iar cel care utilizează cursorul
încearcă și el modificări, se citesc datele privind versiunea
înregistrării, iar în cazul în care se detectează că s-au efectuat
actualizări de către alţi utilizatori, atunci actualizarea iniţiată în
cursor va eșua.
 READ ONLY – nu sunt permise modificările/ștergerile în
cadrul înregistrărilor cursorului.

5
12/10/2021

Deschiderea cursorului şi extragerea


înregistrărilor
 OPEN nume_cursor
 Execută instrucţiunile T-SQL declarate în cursor și încarcă în
memorie setul de înregistrări rezultat.
 FETCH
 Accesează o înregistrare din cursor și permite încărcarea valorilor
câmpurilor acesteia în variabile declarate în prealabil.
 Sintaxa:

FETCH
[ NEXT | PRIOR | FIRST | LAST | ABSOLUTE n| RELATIVE n]
FROM
Nume_cursor
[ INTO @nume_variabilă_1 [ ,...@Nume_variabilă_n ] ]

În clauza INTO se va specifica un set de variabile în care se vor încărca valorile


din coloanele rândului accesat din cursor. Variabilele se vor preciza în aceeași
ordine ca și câmpurile din cadrul cursorului.

Exemplu de utilizare – extragerea unei singure


înregistrări

6
12/10/2021

Verificarea continuării operaţiei de extragere


a înregistrărilor cursorului
 Variabila @@FETCH_STATUS
 Determină dacă mai există înregistrări de accesat în cursor.
 Valori posibile:
 0 – instrucţiunea FETCH pentru accesarea unei înregistrări s-a
executat cu succes
 -1– instrucţiunea FETCH pentru accesarea unei înregistrări a
eșuat
 -2 – instrucţiunea FETCH nu a găsit nicio înregistrare

Exemplu de utilizare – parcurgerea unui set de înregistrări

7
12/10/2021

Expresii tabelare – Common Table


Expressions
 Reprezintă un set de rezultate temporare, păstrat în
memorie cu un nume unic, ce poate fi referit în operaţii
de selecţie a datelor (SELECT) sau de actualizare (INSERT,
UPDATE, DELETE).
 Poate fi utilizat și în definirea unei noi vederi (CREATE
VIEW).
 Clauza WITH:
 Permite definirea uneia sau mai multor expresii tabelare,
pentru fiecare din acestea specificându-se setul de instrucţiuni
SELECT în funcţie de care se stabilește setul de rezultate.

Definirea unei expresii tabelare:


WITH
Nume_Expresie [(Nume_Camp1, Nume_Camp2, …)]
AS
(Instrucţiunea de selecţie a datelor)
Instrucţiuni SQL de utilizare a expresiei tabelare

8
12/10/2021

Utilizarea unei expresii tabelare - Exemplu


 Să se afișeze toate bonurile de casă prin care s-a
comercializat produsul vândut de cele mai multe ori în
anul curent

Expresii tabelare în cascadă


Mod de utilizare:
;WITH cte_NumeExpresie1 as
( SELECT …
FROM …

)
, cte_NumeExpresie2 as
( Select …
FROM cte_NumeExpresie1 INNER JOIN …
)
Select * FROM cte_NumeExpresie2

9
12/10/2021

Tehnici SQL Server pentru tratarea erorilor


TRY
Instrucţiuni SQL
END TRY
CATCH
Mesaje pentru erorile întâmpinate
END CATCH

 Funcţii utile:
 ERROR_NUMBER() – furnizează numărul erorii captate
 ERROR_LINE() – numărul liniei din codul procedurii unde a fost
captată eroarea
 ERROR_SEVERITY – descrie severitatea erorii cuprinsă între 11 și 16.
 ERROR_MESSAGE() – Textul complet al mesajului de eroare

Tratarea erorilor – exemplu:

10
12/10/2021

Tratarea erorilor în tranzacţii


BEGIN TRY
BEGIN TRANSACTION – pornirea tranzacţiei
-- instrucţiuni INSERT, UPDATE, DELETE

-- Dacă instrucţiunile au fost finalizate, success!


COMMIT – finalizarea tranzacţiei
END TRY
BEGIN CATCH
-- Mesaje prin care sunt afișate informaţii despre eroare
IF @@TRANCOUNT > 0
ROLLBACK
END CATCH

Cerinţe exemplificare
 Utilizând expresiile tabelare în cascadă, să se afișeze, printr-o
singură instrucţiune SQL, lista bonurilor de casă pentru care
totalul acestora este mai mic decât cel încasat.

 Să se definească o procedură stocată prin care să se adauge


împreună o categorie de produse și toate produsele pe care
aceasta le conţine. Se va urmări tratarea erorilor la nivelul
tranzacţiei, cu afișarea mesajelor aferente în cazul în care
acestea vor surveni.

11
Suport de curs GBDR 1/14/2022

u i
s t rib
d i
a u
a s
p i
c o
s e
n u
O schemă de bază de date reprezintă o metodă
A de a grupa logic obiecte din cadrul acesteia
(tabele, vederi, proceduri stocate, etc.)
Când unui anumit utilizator i se asociază o
anumită schemă acesta poate avea acces doar
la obiectele specifice schemei.
Proprietarul unei scheme este tot un utilizator
cu rolul de a adăuga sau şterge obiecte în cadrul
schemei.
O schemă poate fi creată (Create), modificată
(Alter) sau ştearsă (Drop) iar utilizatorilor li se
pot acorda dreptul de acces la această schemă.

Cătălin Tudor 1
Suport de curs GBDR 1/14/2022

Crearea unei scheme:


CREATE SCHEMA Nume_Schemă [AUTHORIZATION Nume_Proprietar]

Transferarea unui obiect securizabil în cadrul


unei scheme:
ALTER SCHEMA VanzariPersoaneFizice TRANSFER
dbo.CategoriiProduse

Schimbarea proprietarului unei scheme:


ALTER USER UserTest WITH DEFAULT_SCHEMA Vederi;

Selectarea datelor unui tabel având o schemă


u i
rib
diferită de cea implicită:
Select * FROM Vederi.Clienti;

is t
u d
s a
p i a
c o
s e
n u Obiectele securizabile ‐ resurse pentru care SQL 
Server controlează accesul prin intermediul 
A permisiunilor.
Sunt grupate în trei domenii ierarhice imbricate:
domeniul severului ‐obiecte precum utilizatori de 
autentificare sau baze de date;
domeniul bazei de date: utilizatori ai bazei de date, 
roluri, sau scheme ale bazei de date; 
domeniul unei scheme de securitate, controlând 
obiecte securizabile precum tabele, vederi, funcții 
sau proceduri. 

Cătălin Tudor 2
Suport de curs GBDR 1/14/2022

Acordarea, anularea sau revocarea drepturilor 
unui utilizator pentru un obiect sau un grup de 
obiecte securizabile:
GRANT|DENY|REVOKE Permisiune_1 [,... Permisiune_n ] TO
utilizator_beneficiar_1 [,... utilizator_beneficiar_n ]ON
[grup_obiecte::]obiect_securizabil [ WITH GRANT OPTION]
[CASCADE] [ AS utilizator_donator ]

• GRANT‐ permisiunea este acordată,


• DENY – permisiunea este explicit refuzată,

i
• REVOKE – aprobarea sau refuzul se elimină, astfel încât nicio permisiune nu

u
este definită.

rib
• WITH GRANT OPTION – beneficiarul are permisiunea să acorde la rândul său
permisiunea/permisiunile acordate și altor utilizatori.

s t
• CASCADE – dacă beneficiarul unei permisiuni a acordat acea permisiune şi
altora, tuturor li se va anula acea permisiune.
i
u d
s a
p i a
c o
s e
n u
Nume permisiune
ALTER
Descriere
Permisiunea de a modifica definiţia unui obiect

A CONNECT
DELETE
EXECUTE
Permisiunea de a accesa o bază de date
Permisiunea de a șterge
Permisiunea de a executa o procedură stocată sau o funcţie
IMPERSONATE Permisiunea de a lua identitatea unui utilizator prin intermediul 
comenzii EXECUTE AS.
INSERT Permisiunea de a adăuga date
REFERENCES Permisiunea de a referi un obiect într‐o definiţie a unei chei externe, 
sau de a declara o vedere sau funcţie cu declaraţia WITH 
SCHEMABINDING
SELECT Permisiunea de a selecta date 
TAKE OWNERSHIP Permisiunea de  a deveni proprietar al acelui obiect
UPDATE Permisiunea de a modifica
VIEW DEFINITION Permisiunea de a vizualiza definiția obiectului respectiv.

Cătălin Tudor 3
Suport de curs GBDR 1/14/2022

Acordarea dreptului de execuţie pentru procedura stocată


usp_AfisareBonuri utilizatorului usr_Ionescu, cu posibilitatea ca
acesta să poată distribui acest drept altor utilizatori:
GRANT EXECUTE ON dbo.usp_AfisareBonuri TO usr_Ionescu WITH
GRANT OPTION

Acordarea dreptului de selecţie pe toate obiectele schemei cu 
numele schema_Vederi utilizatorului usr_Popescu:
GRANT SELECT ON Schema::schema_Vederi TO usr_Popescu

Respingerea dreptului de a modifica structura unui obiect al


schemei schema_Vederi utilizatorului usr_Popescu şi tuturor
utilizatorilor cărora le‐a acordat această permisiune:

u i
rib
DENY ALTER ON Schema::schema_Vederi TO usr_Popescu CASCADE

is t
u d
s a
p i a
c o
s e
n u
Revocarea tuturor permisiunilor de executare sau vizualizare a
structurii procedurii stocate cu numele usp_AfisareBonuri acordate

A utilizatorului usr_Ionescu şi tuturor utilizatorilor cărora acesta le‐a


acordat sau le‐a interzis aceste permisiuni:

REVOKE EXECUTE, VIEW DEFINITION ON dbo.usp_AfisareBonuri TO usr_Ionescu CASCADE

Interzicerea explicită a dreptului de selectare a datelor din câmpul 
SalariuIncadrare al tabelului Vanzatori pentru utilizatorul UserTest:

DENY SELECT ON dbo.Vanzatori(SalariuIncadrare) TO UserTest;

Cătălin Tudor 4
Suport de curs GBDR 1/14/2022

Un rol defineşte ceea ce poate face sau nu un utilizator 
în cadrul unei baze de date;
Când un utilizator este asociat unui rol va moşteni toate 
drepturile şi permisiunile aferente acelui rol.
Mai mulţi utilizatori pot partaja acelaşi rol în acelaşi 
timp.
Rolurile fac parte din modelul de securitate dispus pe 
mai multe niveluri:

i
Securitatea autentificării—Conectarea la serverul SQL
Securitatea bazei de date—Accesul la baza de date
u
rib
Securitatea obiectelor bazei de date— Primirea dreptului de a 

acestora
is t
accesa diferitele obiecte ale bazei de date şi datele asociate 

u d
s a
p i a
c o
s e
n u
A
Roluri aplicate serverului de baze de date 
(Server roles)
Orice permisiuni acordate se aplică la nivel de 
server şi nu la nivel de bază de date individuală;
Roluri aplicate la nivel de bază de date 
(Database Roles)
Definesc permisiuni pentru obiectele unei singure 
baze de date.
Pot fi roluri predefinite (generate odată cu crearea 
bazei de date) sau roluri definite de utilizator.

Cătălin Tudor 5
Suport de curs GBDR 1/14/2022

Roluri de server:
SysAdmin: Poate realiza orice acţiune pe server.
ServerAdmin: Poate efectua operaţiuni de configurare pe 
server.
SetupAdmin: Poate gestiona legături între servere, opţiuni ş 
sarcini la pornirea SQL Server;
SecurityAdmin: Poate gestiona securitatea serverului.
ProcessAdmin: Poate gestiona procese pe server.
DbCreator:  Poate crea, modifica, şterge sau restaura baze 
de date pe server.

i
DiskAdmin: Poate gestiona fişiere fizice privind bazele de 

u
date SQL Server.

rib
BulkAdmin: Poate efectua comenzi de încărcare a unor 

t
fişiere fizice în cadrul bazelor de date SQL Server.

d is
a u
a s
p i
c o
s e
n u
Roluri predefinite de bază de date:

A
db_owner: Acces deplin la obiectele bazei de date.
db_accessadmin: Gestionarea grupurilor din Windows şi a 
utilizatorilor de autentificare SQL Server.
db_datareader: Citirea datelor din baza de date.
db_datawriter:  Adăugare, modificarea şi ştergerea datelor din 
tabele.
db_ddladmin: Posibilitatea de a executa instrucţiuni  incluse în 
biblioteci de tip DLL (Dynamic Link Library).
db_securityadmin: Posibilitatea de a modifica apartenenţa la 
roluri şi de a gestiona permisiunile la accesarea obiectelor.
db_backupoperator: Posibilitatea de a crea copii de siguranţă.
db_denydatareader: Inhibarea accesului la vazualizarea datelor 
din cadrul bazei de date.
db_denydatawriter:  Inhibarea accesului la actualizarea datelor.

Cătălin Tudor 6
Suport de curs GBDR 1/14/2022

Să se creeze un nou rol de server care să permită vizualizarea 
oricărei baze de date din cadrul instanței SQL Server, precum şi
vizualizarea structurii oricărui obiect din cadrul acesteia:

CREATE SERVER ROLE RolVizualizareBazeDate;


GRANT VIEW ANY DEFINITION TO RolVizualizareBazeDate;
GRANT VIEW ANY DATABASE TO RolVizualizareBazeDate;
GO

Să se adauge utilizatorului SQLTest toate permisiunile rolului cu


numele RolVizualizareBazeDate.
ALTER SERVER ROLE RolVizualizareBazeDate ADD MEMBER SQLTest;

Să se obţină o listă a tuturor rolurilor de server din cadrul unei instanțe:


u i
rib
SELECT * FROM sys.sysusers WHERE issqlrole=1

is t
u d
s a
p i a
c o
s e
n u
Să se creeze un nou rol de bază de date cu numele Rol_Vederi:

A
CREATE ROLE Rol_Vederi;

Să se adauge utilizatorul UserTest la grupul de membri ai rolurilor


predefinite db_datawriter şi db_datareader..
ALTER ROLE db_datawriter
ADD MEMBER [UserTest];
ALTER ROLE db_datareader
ADD MEMBER [UserTest];
GO

Să se obțină corespondența dintre roluri şi utilizatorii unei baze de date:

SELECT R.name as NumeRol, U.name as NumeUtilizator


FROM sys.database_principals R
INNER JOIN sys.database_role_members RM on
RM.role_principal_id=R.principal_id
INNER JOIN sys.database_principals U on
U.principal_id=RM.member_principal_id

Cătălin Tudor 7
Suport de curs GBDR 1/14/2022

Scenariul 1: Pentru mai multe obiecte ale bazei 
de date se doreşte ca un utilizator să dețină 
aceleaşi drepturi asupra fiecăruia dintre aceste 
obiecte.
Se va crea o schemă în care se vor acorda 
permisiunile dorite utilizatorului în cauză;
Se va introduce în această schemă toate obiectele 

i
pentru care va funcţiona restricţionarea în raport 
cu utilizatorul în cauză.
u
s t rib
d i
a u
a s
p i
c o
s e
n GOu
IF EXISTS (SELECT * FROM sys.server_principals WHERE name='SQLUserTest')
DROP LOGIN SQLUserTest

A
CREATE LOGIN SQLUserTest WITH PASSWORD='ParolaTest', DEFAULT_DATABASE=Vanzari
GO
USE Vanzari
IF EXISTS (SELECT * FROM sys.database_principals WHERE name='DBUserTest')
DROP USER DBUserTest
GO
CREATE USER DBUserTest FOR LOGIN SQLUserTest;
GO
IF EXISTS (SELECT * FROM sys.schemas WHERE name='sch_PermiteSelect')
DROP SCHEMA sch_PermiteSelect;
GO
-- crearea schemei al cărei proprietar este un utilizator cu rol de administrator
CREATE SCHEMA sch_PermiteSelect AUTHORIZATION Admin1
GO
--definirea permisiunilor acordate utilizatorului nou creat la nivelul schemei
GRANT SELECT, EXECUTE ON SCHEMA::sch_PermiteSelect TO DBUserTest

ALTER SCHEMA sch_PermiteSelect TRANSFER dbo.Vanzatori


ALTER SCHEMA sch_PermiteSelect TRANSFER dbo.CategoriiProduse
ALTER SCHEMA sch_PermiteSelect TRANSFER dbo.vwProduseVandute
ALTER SCHEMA sch_PermiteSelect TRANSFER dbo.usp_ComisionVanzari

Cătălin Tudor 8
Suport de curs GBDR 1/14/2022

Scenariul 2: Pentru mai mulţi utilizatori ai bazei 
de date se doreşte aplicarea aceloraşi restricţii 
pentru diverse obiecte ale acesteia.
Se va crea un rol în care se vor specifica drepturile 
utilizatorilor relativ la fiecare obiect vizat;
Se vor asocia utilizatorii în cauză la rolul creat.

u i
s t rib
d i
a u
a s
p i
c o
s e
u
Pentru mai mulți utilizatori ai bazei de date se dorește aplicarea acelorași permisiuni pentru

n
diverse obiecte ale acesteia. Pentru exemplificare considerăm următoarele permisiuni: drept
de selectare a fiecărui obiect vizat, interzicerea vizualizării structurii acestora. Aceste

A permisiuni vor fi valabile doar pentru tabelele BonuriDeCasa si Plati.

Etapa 1: Se va crea un rol în care se vor specifica drepturile relativ la fiecare obiect vizat;

IF EXISTS (SELECT * FROM sys.database_principals WHERE


type='R'and name='rol_Select' )
DROP ROLE rol_Select
GO
CREATE ROLE rol_Select
GO
GRANT SELECT ON BonuriDeCasa TO rol_Select
GRANT SELECT ON Plati TO rol_Select

DENY VIEW DEFINITION ON BonuriDeCasa TO rol_Select


DENY VIEW DEFINITION ON Plati TO rol_Select

Cătălin Tudor 9
Suport de curs GBDR 1/14/2022

Etapa 2: Se vor asocia utilizatorii în cauză la rolul creat.

Crearea unui nou utilizator al bazei de date pe baza unui utilizator de autentificare nou:
IF EXISTS (SELECT * FROM sys.server_principals WHERE name='SQLUserTest2')
DROP LOGIN SQLUserTest2
GO
CREATE LOGIN SQLUserTest2 WITH PASSWORD='ParolaTest2', DEFAULT_DATABASE=Vanzari
GO
USE Vanzari
IF EXISTS (SELECT * FROM sys.database_principals WHERE name='DBUserTest2')
DROP USER DBUserTest2
GO
CREATE USER DBUserTest2 FOR LOGIN SQLUserTest2;
GO

Asocierea utilizatorilor DBUserTest şi DBUserTest2 rolului nou creat pentru a primi 
permisiunile definite la nivelul acestuia pentru tabelele vizate:

ALTER ROLE rol_Select

u i
rib
ADD MEMBER DBUserTest

t
ALTER ROLE rol_Select

is
ADD MEMBER DBUserTest2

u d
s a
p i a
c o
s e
n u
A

Cătălin Tudor 10

S-ar putea să vă placă și