· 8 years ago · Dec 14, 2017, 06:04 PM
1= Lab. 10 =
2=== Zad. 1 ===
3
4{{{
5DECLARE @zdanie VARCHAR(1000) = 'Ala ma kota i psa';
6DECLARE @zdaniepier VARCHAR(1000) = 'Ala ma kota i psa';
7DECLARE @separator CHAR(1) = ' ';
8DECLARE @tab TABLE
9(
10 slowo VARCHAR(20)
11);
12DECLARE @liczba INT
13SET @liczba = LEN(@zdanie)
14DECLARE @zmiennik INT
15DECLARE @out INT
16DECLARE @sum INT
17SET @sum = LEN(@zdanie)
18SET @out = 1
19WHILE (@liczba >3)
20BEGIN
21 SET @zmiennik = CHARINDEX(' ', @zdanie)
22 IF((left(@zdanie,@zmiennik))!= ' ') INSERT INTO @tab VALUES (left(@zdanie,@zmiennik))
23 SET @sum = @sum - @zmiennik
24 SET @zdanie = (right(@zdaniepier,@sum))
25 SET @out = @out + 1
26 SET @liczba = @liczba - @zmiennik
27END
28INSERT INTO @tab VALUES (left(@zdanie,@zmiennik+1))
29SELECT * FROM @tab
30}}}
31=== Zad. 2 ===
32
33{{{
34CREATE PROCEDURE Wstaw_pracownika (
35 @nazwisko VARCHAR(50),
36 @stanowisko VARCHAR(50) = NULL,
37 @szef VARCHAR(50),
38 @placa MONEY,
39 @zatrudniony DATETIME = NULL)
40AS
41 IF @stanowisko IS NULL
42 SET @stanowisko = 'doktorant'
43 --1. Zadeklaruj nowe zmienne @szef_id i @pracownik_id typu INT
44 DECLARE @szef_id INT
45 DECLARE @pracownik_id INT
46
47 --2. Jeśli nazwisko szefa nie jest prawidłowe wywołaj bląd i zakończ procedurę
48 IF NOT EXISTS (SELECT nazwisko FROM Pracownicy WHERE nazwisko = @szef)
49 BEGIN
50 RAISERROR (N'Bledne nazwisko szefa: %s', -- Message text.
51 16, -- Severity, severity 11-19 will cause execution to jump to CATCH block
52 1 -- State
53 )
54 END
55
56 --3. Jeżeli nazwa stanowiska nie jest prawidłowa wywołaj bląd i zakończ procedurę
57 IF NOT EXISTS (Select stanowisko FROM Pracownicy WHERE stanowisko = @stanowisko)
58 BEGIN
59 RAISERROR (N'Bledne numer oddziału: %d', -- Message text.
60 16, -- Severity, severity 11-19 will cause execution to jump to CATCH block
61 1 -- State
62 )
63 END
64
65 --4. Ustal ID szefa na podstawie nazwiska
66 SET @szef_id = (SELECT id FROM Pracownicy WHERE nazwisko = @szef)
67
68 --5. Ustal nowe ID pracownika. Nowe ID jest równe MAX istniejących ID + 10
69 SET @pracownik_id = (SELECT ISNULL(MAX(ID),0)+10 AS mx FROM Pracownicy)
70
71 --6. Jeśli data zatrudnienia nie została podana (jest NULL), pobierz datę dzisiejszą
72 IF @Zatrudniony IS NULL
73 SET @Zatrudniony = GETDATE()
74
75 --7. Wstaw nowego pracownika:
76 INSERT INTO Pracownicy (ID, Nazwisko, szef, placa, stanowisko, Zatrudniony)
77 VALUES (@pracownik_id, @nazwisko,@szef_id,@placa,@stanowisko,@zatrudniony)
78GO
79}}}
80=== Zad. 3 ===
81
82{{{
83CREATE PROCEDURE Podwyzka
84 @proc TINYINT = 10,
85 @kwota MONEY OUTPUT
86AS
87DECLARE @a INT
88SET @a = (SELECT count(*) FROM Pracownicy)
89DECLARE @id INT
90SET @id= 1
91DECLARE @kwotzm INT
92SET @kwotzm = 0
93BEGIN
94 WHILE (@a > 0)
95 BEGIN
96 SET @a = @a -1
97 IF (SELECT placa FROM Pracownicy WHERE id = @id)<2000
98 BEGIN
99 SET @kwotzm = @kwotzm + ((SELECT placa FROM Pracownicy WHERE @id = id)*@proc)/100
100 PRINT @kwotzm
101 SET @id = @id +1
102 CONTINUE
103 END
104 ELSE
105 BEGIN
106 SET @id = @id +1
107 CONTINUE
108 END
109 END
110 SET @kwota = @kwotzm
111 PRINT @kwota
112END
113}}}