Advertisement
Guest User

Untitled

a guest
Jun 27th, 2016
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.55 KB | None | 0 0
  1. --funkcje
  2.  
  3. --Utwórz funkcje, która będzie zwracać powtórzony ciag znaków podany w parametrze tyle razy
  4. --ile podane to będzie w następnym parametrze. Co drugie powielenie ciągu wejściowego ma mieć
  5. --odwróconą kolejność znaków poczynając od pierwszego. Pomiedzy powieleniami dodaj podkreslnik.
  6. --Przykładowe wywołanie dla ciągu 'XYZ' i powielenia 3 - 'ZYX_XYZ_ZYX'.\
  7.  
  8. CREATE FUNCTION zadanie1(@zmienna VARCHAR(10),@ile INT)
  9. RETURNS VARCHAR(200)
  10. AS
  11. BEGIN
  12. DECLARE @licznik INT = 0;
  13. DECLARE @wynik VARCHAR(200) = '';
  14. WHILE @licznik < @ile
  15. BEGIN
  16. IF @licznik % 2 = 1
  17. SET @wynik = @wynik + @zmienna + '_';
  18. ELSE
  19. SET @wynik = @wynik + REVERSE(@zmienna) + '_';
  20. SET @licznik = @licznik + 1;
  21. END
  22. RETURN SUBSTRING(@wynik ,1 , len(@wynik) - 1)
  23. END;
  24.  
  25.  
  26. SELECT DBO.zadanie1('XYZ',4)
  27. /*
  28. Utwórz funkcję, która będzie zwracać komunikat o różnicy w dniach
  29. między datą bieżącą a datą podaną w parametrze.
  30. W przypadku tego samego dnia zwróć komunikat o równości dat.
  31. Przykład:
  32. 'Między datą obecną a datą Dec 12 2012 12:00AM jest XXX dni różnicy.'
  33. lub
  34. 'Daty data podana w parametrze jest datą dzisiejszą.'
  35. */
  36.  
  37. create function zadanie2(@data DATE)
  38. RETURNS VARCHAR(100)
  39. AS
  40. BEGIN
  41. DECLARE @wynik INT;
  42. DECLARE @data2 DATE;
  43. SET @data2 = GETDATE();
  44. IF @data = @data2
  45. BEGIN
  46. RETURN 'Daty data podana w parametrze jest datą dzisiejszą.';
  47. END
  48. set @wynik = ABS(DATEDIFF(day,@data,@data2));
  49. RETURN 'Między datą obecną a datą ' +convert(varchar(10),@data) + ' jest '+CONVERT(varchar(4),@wynik) +' dni różnicy.';
  50. END
  51.  
  52. SELECT DBO.zadanie2('2016-07-20')
  53.  
  54. /*
  55. Dodaj funkcję fun_kol, która zwróci tekstową nazwę dnia tygodnia powstałą
  56. z daty powstałej z dodania X dni (gdzie X to drugi parametr) do daty podanej
  57. w pierwszym parametrze.
  58. W przypadku ustawienia null w parametrze X dodaj 10 dni. Przykładowy wynik wywołania funkcji:
  59. 'Otrzymany dzień to: Sunday'
  60. */
  61.  
  62. alter function zadanie3(@data DATE, @ile INT)
  63. RETURNS VARCHAR(30)
  64. AS
  65. BEGIN
  66. set @data = DATEADD(DAY, isnull(@ile,10), @data);
  67. RETURN 'Otrzymany dzień to: '+ datename(DW, @data);
  68. END
  69.  
  70. SELECT DBO.zadanie3('2016-06-01', null)
  71.  
  72. --trigger
  73. /*
  74. Do tabeli działy dopisz kolumnę data_przyjęcia.
  75. Przy tworzeniu nowego pracownika z ustawionym działem
  76. ustawiaj wartość kolumny data_przyjęcia dla zadanego działu
  77. wpisując w nią komunikat z obecną datą oraz imieniem i nazwiskiem pracownika.
  78. Format komunikatu:
  79. 'Ostatni zatrudniony pracownik Jan Kowalski: Dec 18 2006 9:01PM'
  80. */
  81. ALTER TABLE dzialy ADD
  82. guwno varchar(100)
  83.  
  84. select * from dzialy
  85. select * from pracownicy
  86.  
  87. alter trigger zadanie4 on pracownicy
  88. for insert
  89. as
  90. begin
  91. if exists(select dzialID from inserted)
  92. declare @im varchar(15) =(select imie from inserted);
  93. declare @nazw varchar(30) = (select nazwisko from inserted);
  94. declare @tekst varchar(100) = 'Ostatni zatrudniony pracownik '+ @im + ' ' + @nazw + ' ' + convert(varchar,getdate());
  95. update dzialy set guwno = @tekst where dzialID = (select dzialID from inserted)
  96. end
  97.  
  98. /*
  99.  
  100. Do tabeli pracownicy dodaj kolumne tekstowa email o dlugosci 100 znakow.
  101. Podczas tworzenia pracownika lub jego modyfikacji uzupełnij tą kolumnę
  102. emailem skladającym się z:
  103. pierwszych trzech liter imienia, kropki,
  104. pierwszych pięciu liter nazwiska oraz ciągu '@p.lodz.pl'
  105. Pamiętaj, aby usunąc ewentualne zewnętrzne białe znaki oraz
  106. aby zamienic wewnętrzne spacje na znak podkreslenia.
  107.  
  108.  
  109. */
  110. ALTER TABLE pracownicy ADD
  111. email varchar(100)
  112.  
  113. alter trigger zadanie5 on pracownicy
  114. for insert, update
  115. as
  116. begin
  117. declare @em varchar(100) = '';
  118. declare @imie varchar(30) = (select imie from inserted);
  119. declare @nazw varchar(30) = (select nazwisko from inserted);
  120. set @em =LEFT(@imie,3) + '.' + LEFT(@nazw,5) + '@p.lodz.pl';
  121. update pracownicy set email = @em where imie = @imie and nazwisko = @nazw;
  122. end
  123. insert into pracownicy(nazwisko,imie,wiek) values('Peszko','Paweł',27);
  124. select * from pracownicy
  125.  
  126. /*
  127. Dodaj kolumnę tekstową login1 do tabeli pracownicy.
  128. Przy tworzeniu nowego pracownika lub modyfikacji istniejącego
  129. w tabeli pracownicy ustawiaj wartość kolumny login1
  130. na pierwszą i ostatnią literę z imienia i pierwszą i ostatnią literą nazwiska. W tak stworzonej
  131. wartości zastosuj wielkie litery.
  132. Przykład dla osoby: Tomasz Pawlak login1 będzie skłądał się z TZPK
  133. */
  134. ALTER TABLE pracownicy ADD
  135. login1 varchar(10)
  136.  
  137.  
  138. alter trigger zadanie6 on pracownicy
  139. for insert
  140. as
  141. begin
  142. declare @wynik varchar(10) = (upper(left((select imie from inserted),1)))+(upper(right((select imie from inserted), 1)))+(upper(left((select nazwisko from inserted) ,1)))+(upper(right((select nazwisko from inserted) ,1)))
  143. update pracownicy set login1 = @wynik where imie=(select imie from inserted) and nazwisko = (select nazwisko from inserted)
  144. end
  145.  
  146. insert into pracownicy(nazwisko,imie,wiek) values('Szczesny','Wojciech',27);
  147.  
  148. /*
  149. Do tabeli pracownicy dodaj kolumnę tekstową last_sallary.
  150. Przy tworzeniu nowego wpisu w tabeli zarobki ustawiaj wartość nowo dodanej kolumny
  151. dla pracownika, który otrzymał wynagrodzenie wpisując w nią komunikat z obecną datą.
  152. Wymagany format komunikatu:
  153. 'Data ostatniej wypłaty: Jan 03 2006 10:11PM'
  154. */
  155.  
  156. ALTER TABLE pracownicy ADD
  157. last_sallary varchar(30)
  158.  
  159. select * from zarobki
  160.  
  161. create trigger zadanie7 on zarobki
  162. for insert
  163. as
  164. begin
  165. declare @wynik varchar(30) = 'Data ostatniej wypłaty: '+ convert(varchar,(select od from inserted))
  166. update pracownicy set last_sallary = @wynik where pracID = (select pracID from inserted)
  167. end
  168.  
  169. insert into zarobki(od,brutto,pracID) values(GETDATE(),10000,29)
  170.  
  171.  
  172. --procedury
  173.  
  174. --Stwórz procedurę, która wyświetli w formie tekstowej (w oknie messages) co drugiego pracownika
  175. --pracownika, którego nazwisko zaczyna się na literę podaną w parametrze. W przypadku nie podania
  176. --parametru uwzględniaj tylko osby o nazwisku na literę 'Z'. W przypadku podania w parametrze wartosci
  177. --null nie uwzględniaj kryterium.
  178.  
  179. --UWAGA: W zadaniu można użyć kursora.
  180. --Przykłąd wyniku:
  181. --'Pracownik nr #1 Jan Kowalski 25 lat'
  182. --'Pracownik nr #3 Tomasz Kowalski 26 lat'
  183. --'Pracownik nr #5 Piotr Kowalski 29 lat'
  184. select nazwisko from pracownicy where nazwisko like'N%'
  185.  
  186.  
  187. alter proc zadanie8
  188. @param varchar(10)
  189. as
  190. begin
  191. if @param = ''
  192. set @param = 'Z%'
  193. select * from pracownicy where nazwisko like isnull(@param,'%')
  194. end
  195.  
  196. create proc zadanie8
  197. as
  198. begin
  199. declare @param varchar(10)= 'Z%'
  200. select * from pracownicy where nazwisko like isnull(@param,'%')
  201. end
  202. exec zadanie8 'N%'
  203.  
  204.  
  205. select * from pracownicy;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement