Documente Academic
Documente Profesional
Documente Cultură
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
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)
Cătălin Tudor 2
Note de curs – Baze de date
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)
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
Cătălin Tudor 4
Note de curs – Baze de date
Structuri de date:
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
Cătălin Tudor 5
Note de curs – Baze de date
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
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
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
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
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.)
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.
Cătălin Tudor 3
Note de curs – Baze de date
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.
Cătălin Tudor 4
Note de curs – Baze de date
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
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
Cătălin Tudor 6
Note de curs – Baze de date
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)
Cătălin Tudor 7
Note de curs – Baze de date
• 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
• 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
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
Cătălin Tudor 10
Note de curs – Baze de date
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
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
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
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
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
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
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
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
);
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:
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
ht
y r ig
o p
C
Functia GETDATE()
returneaza data si ora serverului
Exemplu: data si ora serverului
Functia CONVERT
coverteste rezultatul unei expresii intr-un anumit timp de date
Sintaxa:
CONVERT (tip_date_rezultat [(lungime)], expresie [, stil_coversie])
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
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
ht
y r ig
o p
C
Functia DATEPART
Sintaxa:
DATEPART (informatie_calendaristica, expresie_data/ora)
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)
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
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
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
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.
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.
Cătălin Tudor 1
Gestiunea bazelor de date relaționale – 10/31/2021
Suport de curs
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 ,
Cătălin Tudor 2
Gestiunea bazelor de date relaționale – 10/31/2021
Suport de curs
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
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.
Cătălin Tudor 4
Gestiunea bazelor de date relaționale – 10/31/2021
Suport de curs
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
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
Cătălin Tudor 6
Gestiunea bazelor de date relaționale – 10/31/2021
Suport de curs
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
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,…)
Cătălin Tudor 8
Gestiunea bazelor de date relaționale – 10/31/2021
Suport de curs
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.
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
DELETE
FROM Clienti
WHERE Localitate=‘Braila’
Cătălin Tudor 9
Gestiunea bazelor de date relaționale – 10/31/2021
Suport de curs
Varianta 1:
TRUNCATE TABLE Parteneri
Varianta 2:
DELETE FROM Parteneri
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 …]
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
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
Cătălin Tudor 11
Gestiunea bazelor de date relaționale – 10/31/2021
Suport de curs
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
A n
Cătălin Tudor 12
Gestiunea bazelor de date relaționale – 10/31/2021
Suport de curs
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ă
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
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
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
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
A n
Cătălin Tudor 2
Suport de curs GBDR
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ă
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
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
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
Cătălin Tudor 5
Suport de curs GBDR
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
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
A
ON [dbo].[Furnizori]
FOR UPDATE,DELETE
AS
BEGIN
if @@ROWCOUNT=0 return
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:
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
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
Tabel 1
Vedere user 1
Tabel 2
Vedere user 2
Cătălin Tudor 9
Suport de curs GBDR
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
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
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
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
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
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
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
Cătălin Tudor 15
GBDR SQL Server – Note de curs 07.11.2021
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
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:
Cătălin Tudor 2
GBDR SQL Server – Note de curs 07.11.2021
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
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
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
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
u i
s t rib
d i
a u
a s
p i
c o
s e
Utilizare structură alternativă - Exemplu
A nu
Cătălin Tudor 8
GBDR SQL Server – Note de curs 07.11.2021
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 … :
Cătălin Tudor 9
GBDR SQL Server – Note de curs 07.11.2021
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
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
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ă:
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
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.
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
Cursul 9
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
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] )
• 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.
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
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
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.
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
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
3
12/10/2021
4
12/10/2021
5
12/10/2021
FETCH
[ NEXT | PRIOR | FIRST | LAST | ABSOLUTE n| RELATIVE n]
FROM
Nume_cursor
[ INTO @nume_variabilă_1 [ ,...@Nume_variabilă_n ] ]
6
12/10/2021
7
12/10/2021
8
12/10/2021
9
12/10/2021
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
10
12/10/2021
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.
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
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 ]
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 selecţie pe toate obiectele schemei cu
numele schema_Vederi utilizatorului usr_Popescu:
GRANT SELECT ON Schema::schema_Vederi TO usr_Popescu
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
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:
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;
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
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
Etapa 1: Se va crea un rol în care se vor specifica drepturile relativ la fiecare obiect vizat;
Cătălin Tudor 9
Suport de curs GBDR 1/14/2022
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:
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