· 8 years ago · Jan 26, 2018, 12:10 AM
1--WIDOK
2CREATE VIEW Warszawiacy(email, kategoria) AS (
3 SELECT K.email, P.kategoria FROM Klient K
4 INNER JOIN Zakup Z ON K.id = Z.idKlienta
5 INNER JOIN Produkt P ON Z.idKlienta = P.id
6 WHERE K.kodpocztowy LIKE '%Warszawa'
7 GROUP BY K.email, P.kategoria
8);
9GO
10SELECT * FROM Warszawiacy;
11DROP VIEW Warszawiacy;
12--PROCEDURA RAPORTUJĄCA
13
14
15--PROCEDURY WSTAWIAJĄCA DANE
16--DODAJ PRODUCENTA
17CREATE PROC dodajProducenta @nazwa VARCHAR(80)
18AS
19 IF NOT EXISTS (SELECT * FROM Producent WHERE nazwa = @nazwa)
20 INSERT INTO Producent VALUES (@nazwa);
21 ELSE RAISERROR ('wybrany producent istnieje juz w naszej bazie', 11, 1);
22dodajProducenta 'BenQ';
23DROP PROC dodajProducenta;
24--DODAJ KLIENTA
25CREATE PROC dodajKlienta(
26 @imie VARCHAR(20),
27 @nazwisko VARCHAR(30),
28 @adres VARCHAR(100),
29 @kodpocztowy VARCHAR(50),
30 @email VARCHAR(40))
31AS
32 IF NOT EXISTS (SELECT * FROM Klient WHERE email = @email)
33 INSERT INTO Klient VALUES (@imie, @nazwisko, @adres, @kodpocztowy, @email);
34 ELSE RAISERROR ('podany mail jest już zarejestrowany w naszym sklepie', 11, 1);
35dodajKlienta'Kajetan', 'Kajetanowicz', 'ul. Kajetanowa 2', '00-123 Kajetanowo', 'kajetan@kajetanowicz.kj';
36DROP PROC dodajKlienta;
37
38--PROCEDURY USUWAJĄCA DANE
39--USUŃ PRODUCENTA
40CREATE PROC usunProducenta @nazwa VARCHAR(80)
41AS
42 IF EXISTS (SELECT * FROM Producent WHERE nazwa = @nazwa)
43 DELETE FROM Producent WHERE nazwa = @nazwa;
44 ELSE RAISERROR ('wybrany producent nie istnieje juz w naszej bazie', 11, 1);
45usunProducenta 'BenQ';
46DROP PROC usunProducenta;
47--USUŃ KLIENTA
48CREATE PROC usunKlienta @id INT
49AS
50 IF EXISTS (SELECT * FROM Klient WHERE id = @id)
51 DELETE FROM Klient WHERE id = @id;
52 ELSE RAISERROR ('klient o podanym id nie istnieje w naszej bazie', 11, 1);
53usunKlienta 27;
54DROP PROC usunKlienta;
55
56--PROCEDURA MODYFIKUJĄCA DANE
57
58
59--PROCEDURA OPERUJĄCA
60
61
62--FUNKCJA SKALARNA
63CREATE FUNCTION LiczDni (
64 @data DATE
65 )
66 RETURNS INT
67AS
68BEGIN
69 RETURN DATEDIFF(dd,@data,GETDATE())
70END;
71GO
72SELECT p.nazwa, dbo.LiczDni(z.data) AS dni FROM Zakup z
73JOIN Produkt p ON z.idProduktu = p.id;
74DROP FUNCTION LiczDni;
75
76--FUNKCJA TABLICOWA
77CREATE FUNCTION ProduktyKategorii (
78 @s VARCHAR(20)
79)
80RETURNS TABLE
81AS
82 RETURN SELECT nazwa
83 FROM Produkt
84 WHERE kategoria = @s;
85GO
86SELECT * FROM ProduktyKategorii('Telewizor');
87DROP FUNCTION ProduktyKategorii;
88
89--WYZWALACZ INSTEAD OF
90CREATE TRIGGER Blokada ON Produkt
91INSTEAD OF INSERT, UPDATE, DELETE
92AS
93 PRINT 'uzytkownik ' + USER_NAME() + ' probowal usunac produkty:';
94 SELECT * FROM deleted;
95
96 PRINT 'uzytkownik ' + USER_NAME() + ' probowal dodac produkty:';
97 SELECT * FROM inserted;
98
99 ROLLBACK;
100GO
101
102SELECT so1.name
103FROM sysobjects so1
104 JOIN sysobjects so2
105 ON so1.parent_obj = so2.id
106WHERE so1.type = 'TR'
107 AND so2.name = 'Produkt';
108
109DROP TRIGGER Blokada;
110
111--WYZWALACZ AFTER
112CREATE TRIGGER Kupiono ON Zakup
113AFTER INSERT, UPDATE, DELETE
114AS
115 PRINT 'uzytkownik ' + USER_NAME() + ' dokonal zakupu:';
116 SELECT * FROM inserted;
117
118 ROLLBACK;
119GO
120
121SELECT so1.name
122FROM sysobjects so1
123 JOIN sysobjects so2
124 ON so1.parent_obj = so2.id
125WHERE so1.type = 'TR'
126 AND so2.name = 'Zakup';
127
128DROP TRIGGER Kupiono;