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