Spis treści
Procedura zwracająca osoby których średnie zarobki są większe od podanych w parametrze. .... 1
Funkcja przyjmująca tekst jako parametr, odwracająca i powtarzająca tyle razy ile podano w
Zapytanie zwracające nazwę dnia tygodnia z aktualnego dnia + ile dni 2
Trigger który przy dodaniu i modyfikacji tabeli pracownicy tworzy email w tabeli pracownicy 3
Procedura zwracająca „Wiadomość” osoby które maja <parametr1> do <parametr2> lat ........... 3
Funkcja zwracająca osoby których nazwisko zaczyna się na literę podana w parametrze ............. 4
Procedura dzieląca adres na poszczególne fragmenty ....................................... 5
Procedura zwracająca w ‘wiadomości’ co drugiego pracownika którego
1. Procedura zwracająca osoby których średnie zarobki są większe od podanych w parametrze.
create
proc
procedura
@wej_srednia
money
as
begin
select
nazwisko
,
avg
(
brutto
)
srednia
from
pracownicy
p
join
zarobki
z
on
z
.
pracID
=
p
.
pracID
group
by
p
.
nazwisko
having
avg
(
brutto
)=
(
select
max
(
wynik
.
srednia
)
from
(
select
nazwisko
,
avg
(
brutto
)
srednia
from
pracownicy
p
join
zarobki
z
on
z
.
pracID
=
p
.
pracID
group
by
nazwisko
)
wynik
)
union
select
nazwisko
,
avg
(
brutto
)
srednia
from
pracownicy
p
join
zarobki
z
on
z
.
pracID
=
p
.
pracID
group
by
nazwisko
having
avg
(
brutto
)=
@wej_srednia
;
end
procedura
5600
2. Funkcja przyjmująca tekst jako parametr, odwracająca i powtarzająca tyle razy ile podano w
drugim parametrze
create
function
rev
(
@par1
varchar
(
10
),
@par2
integer
)
returns
varchar
(
50
)
as
begin
declare
@i
as
integer
declare
@wynik
as
varchar
(
50
)
set
@i
=
0
set
@wynik
=
''
while
@i
<
@par2
begin
set
@i
=
@i
+
1
if
((
@i
=
1
)
or
(
@i
=
3
)
or
(
@i
=
5
))
begin
set
@wynik
=
@wynik
+
REVERSE
(
SUBSTRING
(
@par1
,
1
,
LEN
(
@par1
)))
+
'_'
end
else
begin
set
@wynik
=
@wynik
+
SUBSTRING
(
@par1
,
1
,
LEN
(
@par1
))
+
'_'
end
end
return
@wynik
end
select
dbo
.
rev
(
'XYZ'
,
5
)
3.
Zapytanie zwracające nazwę dnia tygodnia z aktualnego dnia + ile dni
alter
function
fun_kol
(
@a
date
,
@b
integer
)
returns
varchar
(
30
)
as
begin
declare
@day
integer
if
@b
is
null
set
@b
=
10
set
@day
=
@b
+
DATEPART
(
day
,
@a
)
declare
@z
varchar
(
20
)
if
DATEPART
(
weekday
,
@day
)=
1
set
@z
=
'Poniedzialek'
if
DATEPART
(
weekday
,
@day
)=
2
set
@z
=
'Wtorek'
if
DATEPART
(
weekday
,
@day
)=
3
set
@z
=
'Środa'
if
DATEPART
(
weekday
,
@day
)=
4
set
@z
=
'Czwartek'
if
DATEPART
(
weekday
,
@day
)=
5
set
@z
=
'Piątek'
if
DATEPART
(
weekday
,
@day
)=
6
set
@z
=
'Sobota'
if
DATEPART
(
weekday
,
@day
)=
7
set
@z
=
'Niedziela'
return
@z
end
datepart
(
day
,
'04/07/2010'
)
4. Trigger który przy dodaniu i modyfikacji tabeli pracownicy tworzy email w tabeli pracownicy
3 liter imienia kropki 5 liter nazwiska i @p.lodz.pl
create
table
pracownicy
add
varchar
(
100
)
alter
trigger
em
on
pracownicy
for
insert
,
update
as
begin
update
pracownicy
set
=
SUBSTRING
(
Imię
,
1
,
3
)+
'.'
+
SUBSTRING
(
nazwisko
,
1
,
5
)+
'@p.lodz.pl'
end
insert
into
pracownicy
(
IDpracownika
,
Imię
,
nazwisko
)
values
(
'10'
,
'Jan'
,
'Zasada'
)
select
*
from
pracownicy
5. Procedura zwracająca „Wiadomość” osoby które maja <parametr1> do <parametr2> lat
create
procedure
kolokwium2
@par1
int
,
@par2
int
as
begin
declare
@imie
varchar
(
50
)
declare
@nazwisko
varchar
(
50
)
declare
@wiek
int
declare
@tmp
varchar
(
50
)
if
@par1
=
''
begin
set
@par1
=
18
end
if
@par2
=
''
begin
set
@par2
=
30
end
declare
kurs1
scroll
cursor
for
select
imie
,
nazwisko
,
wiek
from
pracownicy
open
kurs1
fetch
last
from
kurs1
into
@imie
,
@nazwisko
,
@wiek
while
@@FETCH_STATUS
=
0
begin
if
((
@par1
<
@wiek
)
and
(
@par2
>
@wiek
))
begin
'Osoba '
+
@imie
+
' '
+
@nazwisko
+
' '
+
cast
(
@wiek
as
varchar
)
+
'lat'
end
fetch
relative
-
2
from
kurs1
into
@imie
,
@nazwisko
,
@wiek
end
close
kurs1
deallocate
kurs1
end
kolokwium2
36
,
200
6. Funkcja która miesza znaki z <prametr1> i <parametr2> od tylu
alter
FUNCTION
znaki
(
@a
varchar
(
50
),
@b
varchar
(
50
))
returns
varchar
(
100
)
as
begin
if
LEN
(
@a
)
!=
LEN
(
@b
)
return
'Blad dlugosci znakow'
+
cast
(
len
(
@a
)
as
varchar
)
+
'<>'
+
cast
(
len
(
@b
)
as
varchar
)
declare
@licznik
integer
;
declare
@wynik
varchar
(
100
);
set
@licznik
=
0
;
set
@wynik
=
''
;
while
@licznik
<=
LEN
(
@a
)
begin
set
@licznik
=
@licznik
+
1
set
@wynik
=
@wynik
+
SUBSTRING
(
@a
,
@licznik
-
1
,
1
)
set
@wynik
=
@wynik
+
SUBSTRING
(
@b
,
@licznik
-
1
,
1
)
end
return
reverse
(
@wynik
)
end
select
dbo
.
znaki
(
'12345'
,
'adams'
)
7. Funkcja zwracająca osoby których nazwisko zaczyna się na literę podana w parametrze
create
function
rebel
(
@filtr
varchar
(
3
))
returns
table
as
return
(
select
imie
,
nazwisko
from
pracownicy
where
nazwisko
like
@filtr
)
-- w tym miejscu nie ma begina i enda
go
select
*
from
dbo
.
rebel
(
'n%'
)
8. Sterowanie przepływem- pętle
alter
proc
procedura
@ilosc
integer
as
begin
declare
@nazw
varchar
(
50
)
--ustawienie na dana wartosc
set
@nazw
=
'puste'
@nazw
--ostatni rekord jest podstawiany
select
@nazw
=
nazwisko
from
pracownicy
order
by
nazwisko
;
@nazw
if
len
(
@nazw
)>
10
'wieksza'
else
'mniejsza'
declare
@i
integer
set
@i
=
0
while
@i
<
@ilosc
begin
'Przebieg nr '
+
convert
(
varchar
,
@i
)
set
@i
=
@i
+
1
end
end
exec
procedura
5
;
9. Procedura dzieląca adres na poszczególne fragmenty
create
procedure
adres
@adres_caly
varchar
(
100
)
as
begin
declare
@dl_ul
integer
declare
@pozycja
integer
declare
@reszta
varchar
(
100
)
set
@reszta
=
@adres_caly
set
@pozycja
=
charindex
(
' '
,
@reszta
)
substring
(
@reszta
,
0
,
@pozycja
+
1
)
while
(
len
(
@reszta
)>
2
)
begin
set
@reszta
=
substring
(
@reszta
,
@pozycja
+
1
,
len
(
@reszta
))
set
@pozycja
=
charindex
(
' '
,
@reszta
)
substring
(
@reszta
,
0
,
@pozycja
+
1
)
end
end
exec
adres
'Piotrkowska 123/23 m.30 90-123 Łódź '
10.
Procedura zwracająca w ‘wiadomości’ co drugiego pracownika którego imie zaczyna
się na <parametr>
create
procedure
zadanie4
@param
varchar
(
1
)
as
begin
declare
@nazw
varchar
(
50
)
declare
@imie
varchar
(
50
)
declare
@wiek
int
declare
@licz
int
set
@licz
=
1
if
@param
is
null
begin
declare
cr_pracownicy
cursor
scroll
for
select
imie
,
nazwisko
,
wiek
from
pracownicy
open
cr_pracownicy
fetch
last
from
cr_pracownicy
into
@imie
,
@nazw
,
@wiek
while
@@Fetch_status
=
0
begin
@imie
+
' '
+
@nazw
+
' '
+
cast
(
@wiek
as
varchar
)
+
'lat Pracownik nr: '
+
cast
(
@licz
as
varchar
)
fetch
prior
from
cr_pracownicy
into
@imie
,
@nazw
,
@wiek
fetch
prior
from
cr_pracownicy
into
@imie
,
@nazw
,
@wiek
set
@licz
=
@licz
+
2
end
close
cr_pracownicy
deallocate
cr_pracownicy
end
else
begin
declare
cr_pracownicy
cursor
scroll
for
select
imie
,
nazwisko
,
wiek
from
pracownicy
where
upper
(
nazwisko
)
like
@param
+
'%'
open
cr_pracownicy
fetch
last
from
cr_pracownicy
into
@imie
,
@nazw
,
@wiek
while
@@Fetch_status
=
0
begin
@imie
+
' '
+
@nazw
+
' '
+
cast
(
@wiek
as
varchar
)
+
'lat Pracownik nr: '
+
cast
(
@licz
as
varchar
)
fetch
next
from
cr_pracownicy
into
@imie
,
@nazw
,
@wiek
fetch
next
from
cr_pracownicy
into
@imie
,
@nazw
,
@wiek
set
@licz
=
@licz
+
2
end
close
cr_pracownicy
deallocate
cr_pracownicy
end
end
go
exec
zadanie4
'k'
;