Sunteți pe pagina 1din 6

Ministerul Educaţiei, Culturii şi Cercetarii al Republicii Moldova

Universitatea Tehnică a Moldovei

Facultatea Calculatoare, Informatică şi Microelectronică

Departamentul Ingineria Software si Automatica

RAPORT
Lucrare de laborator nr.2
Disciplina: Baze de date
Tema: Transact-SQL: instrucțiuni procedurale

A efectuat: Caraman Eliza


A verificat: asis.univ. G.Cebotari

Chişinău 2024
DECLARE @TotalNota INT
SELECT @TotalNota = SUM(Nota) FROM studenti_reusita
PRINT 'Valoarea totală a notelor tuturor studenților: ' + CAST(@TotalNota AS VARCHAR)

Result:

DECLARE @NumarGrupe INT


SELECT @NumarGrupe = COUNT(Id_Grupa) FROM grupe
PRINT 'Numărul de grupe la facultate: ' + CAST(@NumarGrupe AS VARCHAR)

Result:

DECLARE @N1 INT, @N2 INT, @N3 INT;


DECLARE @MAI_MARE INT;
SET @N1 = 60 * RAND();
SET @N2 = 60 * RAND();
SET @N3 = 60 * RAND();

IF (@N1 >= @N2 AND @N1 >= @N3)


SET @MAI_MARE = @N1;
ELSE IF (@N2 >= @N1 AND @N2 >= @N3)
SET @MAI_MARE = @N2;
ELSE
SET @MAI_MARE = @N3;

PRINT @N1;
PRINT @N2;
PRINT @N3;
PRINT 'Mai mare = ' + CAST(@MAI_MARE AS VARCHAR(2));

Result:

DECLARE @NotaTest1 INT = 0; -- Inițializați variabila pentru nota testului 1


SET @NotaTest1 = (SELECT TOP 1 Nota
FROM studenti_reusita sr
INNER JOIN discipline d ON sr.Id_Disciplina = d.Id_Disciplina
WHERE d.Disciplina = 'Baze de date'
AND Tip_Evaluare = 'Testul 1'
AND Nota NOT IN (6, 8)
ORDER BY Data_Evaluare); -- Obțineți nota testului 1

IF @NotaTest1 IS NOT NULL


BEGIN
SELECT TOP 10 s.Nume_Student, s.Prenume_Student
FROM studenti_reusita sr
INNER JOIN studenti s ON sr.Id_Student = s.Id_Student
INNER JOIN discipline d ON sr.Id_Disciplina = d.Id_Disciplina
WHERE d.Disciplina = 'Baze de date'
AND Tip_Evaluare = 'Testul 1'
AND sr.Nota = @NotaTest1
ORDER BY sr.Data_Evaluare;
END
ELSE
BEGIN
PRINT 'Nu există note disponibile pentru testul 1 al disciplinei Baze de date cu
excepția notelor 6 și 8.';
END

Result:
DECLARE @NotaTest1 INT;

SELECT TOP 1 @NotaTest1 = sr.Nota


FROM studenti_reusita sr
INNER JOIN discipline d ON sr.Id_Disciplina = d.Id_Disciplina
WHERE d.Disciplina = 'Baze de date'
AND Tip_Evaluare = 'Testul 1'
AND sr.Nota NOT IN (6, 8)
ORDER BY sr.Data_Evaluare;

SELECT TOP 10 s.Nume_Student, s.Prenume_Student


FROM studenti_reusita sr
INNER JOIN studenti s ON sr.Id_Student = s.Id_Student
INNER JOIN discipline d ON sr.Id_Disciplina = d.Id_Disciplina
WHERE d.Disciplina = 'Baze de date'
AND Tip_Evaluare = 'Testul 1'
AND sr.Nota =
CASE
WHEN @NotaTest1 IS NOT NULL THEN @NotaTest1
ELSE NULL
END
ORDER BY sr.Data_Evaluare;

Result:

BEGIN TRY
DECLARE @NotaTest1 INT;

-- Obțineți nota pentru primul test al disciplinei Baze de date (excluzând notele
6 și 8)
SELECT TOP 1 @NotaTest1 = sr.Nota
FROM studenti_reusita sr
INNER JOIN discipline d ON sr.Id_Disciplina = d.Id_Disciplina
WHERE d.Disciplina = 'Baze de date'
AND Tip_Evaluare = 'Testul 1'
AND sr.Nota NOT IN (6, 8)
ORDER BY sr.Data_Evaluare;
-- Afișați primele zece date (numele, prenumele studentului) pentru primul test al
disciplinei Baze de date folosind IF...ELSE
IF @NotaTest1 IS NOT NULL
BEGIN
SELECT TOP 10 s.Nume_Student, s.Prenume_Student
FROM studenti_reusita sr
INNER JOIN studenti s ON sr.Id_Student = s.Id_Student
INNER JOIN discipline d ON sr.Id_Disciplina = d.Id_Disciplina
WHERE d.Disciplina = 'Baze de date'
AND Tip_Evaluare = 'Testul 1'
AND sr.Nota = @NotaTest1
ORDER BY sr.Data_Evaluare;
END
ELSE
BEGIN
PRINT 'Nu există note disponibile pentru primul test al disciplinei Baze de
date cu excepția notelor 6 și 8.';
END
END TRY
BEGIN CATCH
-- Procesați erorile folosind CATCH și RAISEERROR
DECLARE @ErrorMessage NVARCHAR(4000);
DECLARE @ErrorSeverity INT;
DECLARE @ErrorState INT;

SELECT @ErrorMessage = ERROR_MESSAGE(),


@ErrorSeverity = ERROR_SEVERITY(),
@ErrorState = ERROR_STATE();

RAISERROR(@ErrorMessage, @ErrorSeverity, @ErrorState);


END CATCH;

Result:
Concluzii:
În procesarea datelor din baza de date a universității, este esențial să avem în vedere atât
operațiunile de bază, cum ar fi calculul valorii totale a notelor sau determinarea numărului de
grupe, cât și gestionarea posibilelor erori care ar putea interveni în timpul execuției codului.
Prin utilizarea blocurilor TRY...CATCH și funcției RAISERROR, putem asigura o
manipulare adecvată a excepțiilor și o gestionare eficientă a erorilor pentru a menține
integritatea și fiabilitatea sistemului de gestionare a bazelor de date universitare.

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