Advertisement
olekturbo

Bazy

May 24th, 2017
153
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.62 KB | None | 0 0
  1. //1
  2. SET DATEFORMAT ymd;
  3. GO
  4.  
  5. --1A.1
  6. --Etap 1
  7. CREATE TABLE customer(
  8. id_klient INT IDENTITY(1,1) PRIMARY KEY,
  9. imie VARCHAR(20) NOT NULL CHECK(LEN(imie)>0),
  10. nazwisko VARCHAR(30) NOT NULL CHECK(LEN(nazwisko)>0),
  11. data_urodzenia DATETIME NOT NULL CHECK(data_urodzenia>'1945-01-01'),
  12. pesel VARCHAR(11) NOT NULL CHECK(LEN(PESEL)=11),
  13. );
  14. GO
  15.  
  16. INSERT INTO customer(imie,nazwisko,data_urodzenia,pesel) VALUES
  17. ('Jan','Kowalski','1970-05-12','70051212345'),
  18. ('Paweł','Nowak','1975-06-13','75061312345'),
  19. ('Mariusz','Kolokwium','1980-07-14','80071412345'),
  20. ('Mateusz','Baza','1985-08-15','85081512345'),
  21. ('Tomasz','Danych','1990-09-16','90091612345'),
  22. ('Ireneusz','Uniwerek','1990-01-10','90010112345');
  23. GO
  24.  
  25. DROP TABLE customer;
  26. SELECT * FROM customer;
  27.  
  28. --Etap 2
  29. DROP FUNCTION ilu_w_danym_roku;
  30.  
  31. CREATE FUNCTION ilu_w_danym_roku(
  32. @p_rok_urodzenia INT
  33. ) RETURNS INT
  34. BEGIN
  35. RETURN (SELECT COUNT(*) FROM customer WHERE DATEPART(YEAR,data_urodzenia) = @p_rok_urodzenia)
  36. END;
  37. GO
  38.  
  39. --Etap 3
  40. SELECT dbo.ilu_w_danym_roku(1990) AS ilosc
  41.  
  42. --1A.2
  43. --Etap 1
  44. DROP PROC add_customer
  45.  
  46. CREATE PROC add_customer
  47. @imie VARCHAR(20),
  48. @nazwisko VARCHAR(30),
  49. @data_urodzenia DATETIME,
  50. @pesel VARCHAR(11)
  51. AS
  52. INSERT INTO customer(imie,nazwisko,data_urodzenia,pesel)
  53. VALUES (@imie,@nazwisko,@data_urodzenia,@pesel)
  54. GO
  55.  
  56. --Etap2
  57. EXEC add_customer 'Mateusz','Soroka','1996-12-01','96120112345'
  58.  
  59. SELECT * FROM customer;
  60.  
  61. --1A.3
  62. --Etap 1
  63. DROP TRIGGER one_pesel
  64.  
  65. CREATE TRIGGER one_pesel ON customer
  66. AFTER INSERT AS
  67. DECLARE @pesel VARCHAR(11)
  68. SELECT @pesel=pesel FROM inserted
  69. IF (SELECT COUNT(*) FROM customer WHERE @pesel=pesel)>1
  70. BEGIN
  71. RAISERROR('Nie wolno dodać klientów o tym samym numerze PESEL',1,2)
  72. ROLLBACK
  73. END
  74. GO
  75.  
  76. --Etap 2
  77. INSERT INTO customer(imie,nazwisko,data_urodzenia,pesel) VALUES
  78. ('Jan','TEST','1970-05-12','70051212345');
  79. GO
  80.  
  81. SELECT * FROM customer WHERE pesel='70051212345';
  82.  
  83.  
  84.  
  85. //2
  86. SET DATEFORMAT ymd;
  87. GO
  88.  
  89. --1B.1
  90. --Etap 1
  91. DROP TABLE filia;
  92.  
  93. CREATE TABLE filia(
  94. id_filia INT IDENTITY(1,1) PRIMARY KEY,
  95. nazwa VARCHAR(30) CHECK(LEN(nazwa)>0),
  96. miasto VARCHAR(40) CHECK(LEN(miasto)>0),
  97. data_zalozenia DATETIME CHECK(data_zalozenia>='2010-01-01')
  98. );
  99. GO
  100.  
  101. INSERT INTO filia(nazwa,miasto,data_zalozenia) VALUES
  102. ('Intel','Gdańsk','2011-01-01'),
  103. ('AMD','Warszawa','2012-02-02'),
  104. ('Nvidia','Poznań','2013-03-03'),
  105. ('Asus','Szczecin','2013-04-04'),
  106. ('ASRock','Kraków','2015-05-05'),
  107. ('Dell','Łódź','2016-06-06');
  108. GO
  109.  
  110. --Etap 2
  111. DROP FUNCTION ile_w_roku;
  112.  
  113. CREATE FUNCTION ile_w_roku(
  114. @p_rok_zalozenia INT
  115. ) RETURNS INT
  116. BEGIN
  117. RETURN (SELECT COUNT(*) FROM filia WHERE DATEPART(YEAR,data_zalozenia) = @p_rok_zalozenia)
  118. END;
  119. GO
  120.  
  121. --Etap 3
  122. SELECT dbo.ile_w_roku(2013) AS ilosc
  123.  
  124. --1B.2
  125. --Etap 1
  126. DROP PROC dodaj_filie
  127.  
  128. CREATE PROC dodaj_filie
  129. @p_nazwa VARCHAR(30),
  130. @p_miasto VARCHAR(40),
  131. @p_data_zalozenia DATETIME
  132. AS
  133. INSERT INTO filia(nazwa,miasto,data_zalozenia)
  134. VALUES (@p_nazwa,@p_miasto,@p_data_zalozenia)
  135. GO
  136.  
  137. --Etap 2
  138. EXEC dodaj_filie 'UG','Gdańsk','2017-01-01'
  139.  
  140. SELECT * FROM filia WHERE nazwa='UG'
  141.  
  142. --1B.3
  143. --Etap 1
  144. DROP TRIGGER same_name
  145.  
  146. CREATE TRIGGER same_name ON filia
  147. AFTER INSERT AS
  148. DECLARE @nazwa VARCHAR(30)
  149. SELECT @nazwa=nazwa FROM inserted
  150. IF (SELECT COUNT(*) FROM filia WHERE @nazwa=nazwa)>1
  151. BEGIN
  152. RAISERROR('Nie może być filii o tych samych nazwach',1,2)
  153. ROLLBACK
  154. END
  155. GO
  156.  
  157. --Etap 2
  158. INSERT INTO filia(nazwa,miasto,data_zalozenia) VALUES
  159. ('UG','TEST','2011-01-01');
  160. GO
  161.  
  162. SELECT * FROM filia WHERE nazwa='UG';
  163.  
  164.  
  165.  
  166. //3
  167. --Gr. AN-8:30a
  168. --Data: 18-05-2017
  169. --Imie: Karol
  170. --Nazwisko: Tomczyk
  171. --Semestr: II
  172.  
  173. DROP TABLE telefon
  174. DROP PROCEDURE zmiana_rabatu
  175. DROP FUNCTION dbo.zmiana_ceny
  176.  
  177. --1. Dana jest tabela telefon(id_tel,marka,cena,rabat).
  178. --Napisa� funkcj� posiadaj�c� jeden parametr p_cena i zwracaj�c� ilo�� telefon�w
  179. --o cenie ni�szej ni� warto�� parametru.
  180. --(warto�� kolumny id_tel ma by� nadawana automatycznie)
  181. --Etap 1: Utw�rz tabel� telefon i dodaj 7 przyk�adowych rekord�w.
  182.  
  183. CREATE TABLE telefon(
  184. id_tel INT IDENTITY(1,1) PRIMARY KEY,
  185. marka VARCHAR(30),
  186. cena FLOAT,
  187. rabat FLOAT
  188. );
  189. GO
  190.  
  191. INSERT INTO telefon(marka,cena,rabat) VALUES ('tel1',700,0.01),('tel2',800,0.02),('tel3', 900, 0.03),('tel4', 1000, 0.04),
  192. ('tel5', 1100, 0.05),('tel6', 1200, 0.06),('tel7', 1300, 0.07)
  193. GO
  194. --Etap 2: Utw�rz funkcj�.
  195.  
  196. CREATE FUNCTION dbo.zmiana_ceny (@p_cena INT) RETURNS TABLE AS
  197. RETURN (SELECT * FROM telefon WHERE cena<@p_cena)
  198. GO
  199. --Etap 3: Udowodnij, �e utworzona funkcja dzia�a.
  200.  
  201. SELECT * FROM dbo.zmiana_ceny(1000)
  202. GO
  203.  
  204. --2. Napisa� procedur� posiadajc� dwa parametry b�d�ce cenami:
  205. --p_cena_od i p_cena_do.
  206. --Procedura ma modyfikowa� tabel� telefon ustawiaj�c warto�� rabatu na 4%
  207. --dla telefon�w z zakresu cen od p_cena_od do p_cena_do.
  208. --Etap 1: Utw�rz procedur�.
  209.  
  210. CREATE PROCEDURE zmiana_rabatu @p_cena_od INT, @p_cena_do INT AS
  211. BEGIN
  212. UPDATE telefon SET rabat=0.04 WHERE cena>=@p_cena_od AND cena<=@p_cena_do
  213. END
  214. GO
  215.  
  216. --Etap 2: Udowodnij, �e utworzona procedura dzia�a.
  217.  
  218. EXEC zmiana_rabatu 500, 1000
  219. SELECT * FROM telefon WHERE cena>=500 and cena<=1000
  220. GO
  221.  
  222. --3 Napisa� wyzwalacz podwy�szaj�cy cen� dodawanego telefonu o 23%.
  223.  
  224. --Etap 1: Utw�rz wyzwalacz.
  225.  
  226. CREATE TRIGGER zwiekszenie_ceny ON telefon
  227. AFTER INSERT AS
  228. BEGIN
  229. UPDATE telefon SET cena=(SELECT cena FROM inserted) * 1.23
  230. WHERE id_tel=(SELECT id_tel FROM inserted)
  231. END
  232. GO
  233.  
  234. --Etap 2: Udowodnij, �e utworzony wyzwalacz dzia�a.
  235.  
  236. INSERT INTO telefon(marka,cena,rabat) VALUES ('tel8', 1800, 0.4)
  237. SELECT * FROM telefon WHERE marka='tel8'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement