Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --funkcje
- --Utwórz funkcje, która będzie zwracać powtórzony ciag znaków podany w parametrze tyle razy
- --ile podane to będzie w następnym parametrze. Co drugie powielenie ciągu wejściowego ma mieć
- --odwróconą kolejność znaków poczynając od pierwszego. Pomiedzy powieleniami dodaj podkreslnik.
- --Przykładowe wywołanie dla ciągu 'XYZ' i powielenia 3 - 'ZYX_XYZ_ZYX'.\
- CREATE FUNCTION zadanie1(@zmienna VARCHAR(10),@ile INT)
- RETURNS VARCHAR(200)
- AS
- BEGIN
- DECLARE @licznik INT = 0;
- DECLARE @wynik VARCHAR(200) = '';
- WHILE @licznik < @ile
- BEGIN
- IF @licznik % 2 = 1
- SET @wynik = @wynik + @zmienna + '_';
- ELSE
- SET @wynik = @wynik + REVERSE(@zmienna) + '_';
- SET @licznik = @licznik + 1;
- END
- RETURN SUBSTRING(@wynik ,1 , len(@wynik) - 1)
- END;
- SELECT DBO.zadanie1('XYZ',4)
- /*
- Utwórz funkcję, która będzie zwracać komunikat o różnicy w dniach
- między datą bieżącą a datą podaną w parametrze.
- W przypadku tego samego dnia zwróć komunikat o równości dat.
- Przykład:
- 'Między datą obecną a datą Dec 12 2012 12:00AM jest XXX dni różnicy.'
- lub
- 'Daty data podana w parametrze jest datą dzisiejszą.'
- */
- create function zadanie2(@data DATE)
- RETURNS VARCHAR(100)
- AS
- BEGIN
- DECLARE @wynik INT;
- DECLARE @data2 DATE;
- SET @data2 = GETDATE();
- IF @data = @data2
- BEGIN
- RETURN 'Daty data podana w parametrze jest datą dzisiejszą.';
- END
- set @wynik = ABS(DATEDIFF(day,@data,@data2));
- RETURN 'Między datą obecną a datą ' +convert(varchar(10),@data) + ' jest '+CONVERT(varchar(4),@wynik) +' dni różnicy.';
- END
- SELECT DBO.zadanie2('2016-07-20')
- /*
- Dodaj funkcję fun_kol, która zwróci tekstową nazwę dnia tygodnia powstałą
- z daty powstałej z dodania X dni (gdzie X to drugi parametr) do daty podanej
- w pierwszym parametrze.
- W przypadku ustawienia null w parametrze X dodaj 10 dni. Przykładowy wynik wywołania funkcji:
- 'Otrzymany dzień to: Sunday'
- */
- alter function zadanie3(@data DATE, @ile INT)
- RETURNS VARCHAR(30)
- AS
- BEGIN
- set @data = DATEADD(DAY, isnull(@ile,10), @data);
- RETURN 'Otrzymany dzień to: '+ datename(DW, @data);
- END
- SELECT DBO.zadanie3('2016-06-01', null)
- --trigger
- /*
- Do tabeli działy dopisz kolumnę data_przyjęcia.
- Przy tworzeniu nowego pracownika z ustawionym działem
- ustawiaj wartość kolumny data_przyjęcia dla zadanego działu
- wpisując w nią komunikat z obecną datą oraz imieniem i nazwiskiem pracownika.
- Format komunikatu:
- 'Ostatni zatrudniony pracownik Jan Kowalski: Dec 18 2006 9:01PM'
- */
- ALTER TABLE dzialy ADD
- guwno varchar(100)
- select * from dzialy
- select * from pracownicy
- alter trigger zadanie4 on pracownicy
- for insert
- as
- begin
- if exists(select dzialID from inserted)
- declare @im varchar(15) =(select imie from inserted);
- declare @nazw varchar(30) = (select nazwisko from inserted);
- declare @tekst varchar(100) = 'Ostatni zatrudniony pracownik '+ @im + ' ' + @nazw + ' ' + convert(varchar,getdate());
- update dzialy set guwno = @tekst where dzialID = (select dzialID from inserted)
- end
- /*
- Do tabeli pracownicy dodaj kolumne tekstowa email o dlugosci 100 znakow.
- Podczas tworzenia pracownika lub jego modyfikacji uzupełnij tą kolumnę
- emailem skladającym się z:
- pierwszych trzech liter imienia, kropki,
- pierwszych pięciu liter nazwiska oraz ciągu '@p.lodz.pl'
- Pamiętaj, aby usunąc ewentualne zewnętrzne białe znaki oraz
- aby zamienic wewnętrzne spacje na znak podkreslenia.
- */
- ALTER TABLE pracownicy ADD
- email varchar(100)
- alter trigger zadanie5 on pracownicy
- for insert, update
- as
- begin
- declare @em varchar(100) = '';
- declare @imie varchar(30) = (select imie from inserted);
- declare @nazw varchar(30) = (select nazwisko from inserted);
- set @em =LEFT(@imie,3) + '.' + LEFT(@nazw,5) + '@p.lodz.pl';
- update pracownicy set email = @em where imie = @imie and nazwisko = @nazw;
- end
- insert into pracownicy(nazwisko,imie,wiek) values('Peszko','Paweł',27);
- select * from pracownicy
- /*
- Dodaj kolumnę tekstową login1 do tabeli pracownicy.
- Przy tworzeniu nowego pracownika lub modyfikacji istniejącego
- w tabeli pracownicy ustawiaj wartość kolumny login1
- na pierwszą i ostatnią literę z imienia i pierwszą i ostatnią literą nazwiska. W tak stworzonej
- wartości zastosuj wielkie litery.
- Przykład dla osoby: Tomasz Pawlak login1 będzie skłądał się z TZPK
- */
- ALTER TABLE pracownicy ADD
- login1 varchar(10)
- alter trigger zadanie6 on pracownicy
- for insert
- as
- begin
- 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)))
- update pracownicy set login1 = @wynik where imie=(select imie from inserted) and nazwisko = (select nazwisko from inserted)
- end
- insert into pracownicy(nazwisko,imie,wiek) values('Szczesny','Wojciech',27);
- /*
- Do tabeli pracownicy dodaj kolumnę tekstową last_sallary.
- Przy tworzeniu nowego wpisu w tabeli zarobki ustawiaj wartość nowo dodanej kolumny
- dla pracownika, który otrzymał wynagrodzenie wpisując w nią komunikat z obecną datą.
- Wymagany format komunikatu:
- 'Data ostatniej wypłaty: Jan 03 2006 10:11PM'
- */
- ALTER TABLE pracownicy ADD
- last_sallary varchar(30)
- select * from zarobki
- create trigger zadanie7 on zarobki
- for insert
- as
- begin
- declare @wynik varchar(30) = 'Data ostatniej wypłaty: '+ convert(varchar,(select od from inserted))
- update pracownicy set last_sallary = @wynik where pracID = (select pracID from inserted)
- end
- insert into zarobki(od,brutto,pracID) values(GETDATE(),10000,29)
- --procedury
- --Stwórz procedurę, która wyświetli w formie tekstowej (w oknie messages) co drugiego pracownika
- --pracownika, którego nazwisko zaczyna się na literę podaną w parametrze. W przypadku nie podania
- --parametru uwzględniaj tylko osby o nazwisku na literę 'Z'. W przypadku podania w parametrze wartosci
- --null nie uwzględniaj kryterium.
- --UWAGA: W zadaniu można użyć kursora.
- --Przykłąd wyniku:
- --'Pracownik nr #1 Jan Kowalski 25 lat'
- --'Pracownik nr #3 Tomasz Kowalski 26 lat'
- --'Pracownik nr #5 Piotr Kowalski 29 lat'
- select nazwisko from pracownicy where nazwisko like'N%'
- alter proc zadanie8
- @param varchar(10)
- as
- begin
- if @param = ''
- set @param = 'Z%'
- select * from pracownicy where nazwisko like isnull(@param,'%')
- end
- create proc zadanie8
- as
- begin
- declare @param varchar(10)= 'Z%'
- select * from pracownicy where nazwisko like isnull(@param,'%')
- end
- exec zadanie8 'N%'
- select * from pracownicy;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement