1
C:\5.2010-05-05.sql
---------------------------------
------------Procedury------------
---------------------------------
--create proc
--create procedure
--
create proc
procedura1
as
begin
select
*
from
pracownicy
end
/*Wywo anie prodedury*/
procedura1
exec
procedura1
execute
procedura1
--doda kolumn wzrost do kolumny pracownicy i wype ni danymi
alter table
pracownicy
add
wzrost
float
update
pracownicy
set
wzrost
=
1.7
update
pracownicy
set
wzrost
=
1.9
where
pracID
>
9
/*tworzenie pro*/
create proc
procedura2 @wz
float
,
@wi
int
as
begin
select
*
from
pracownicy
where
wiek
>
@wi
and
wzrost
>
@wz
end
/*wywo anie*/
procedura2 1.7
,
20
/*wywo anie procedura2 z parametrami: wzrost1.7 oraz wiek = 20*/
/*Procedura wybieraj ca nazwiska pracowniów, których rednie zarobki
równe parametrowi wej ciowemu*/
create proc
procedura3 @sr
money
as
begin
select
nazwisko
+
' '
+
imie
,
AVG
(
brutto
)
from
pracownicy p
join
zarobki z
on
p
.
pracID
=
z
.
pracID
group by
z
.
pracID
,
nazwisko
+
' '
+
imie
having
AVG
(
brutto
)=
@sr
/*praca domowa:
sprawdzi , które zatrobki s najwy sze - w unii w select musi si zgadza
to co by o wcze niej*/
/*union
select nazwisko +' ' +imie, AVG(brutto)from pracownicy p
join zarobki z on p.pracID=z.pracID
group by z.pracID, nazwisko +' ' +imie
having AVG(brutto)= --tutaj trzeba wpisa odpowiednie zapytanie wybieraj ce!!!
/*koniec PD*/*/
end
procedura3 2600.00
--procedura wybieraj ca nazwiska pracowników których rednie zarobki s najwy sze
--lub równe parametrowi wej ciowemu
create proc
procedura4 @im
varchar
(
50
),
@nazw
varchar
(
50
)=
'k%'
as
begin
select
*
from
pracownicy
where
imie
like
@im
and
nazwisko
like
@nazw
end
2
C:\5.2010-05-05.sql
go
procedura4
'j%'
,
'k%'
go
procedura4
'j%'
/*takie jak poprzednie tylko przy @im jest %*/
create proc
procedura5 @im
varchar
(
50
)=
'%'
,
@nazw
varchar
(
50
)=
'k%'
as
begin
select
*
from
pracownicy
where
imie
like
@im
and
nazwisko
like
@nazw
end
go
--konieczne do wywo ania procedury i stworzenia jej w jednym wywo aniu
procedura5 @nazw
=
'j%'
--procedura 6
alter proc
procedura6 @ilosc
int
as
begin
declare
@zm
varchar
(
50
)
set
@zm
=
'zmienna'
--bez SET nie zadzia a!
select
@zm
=
nazwisko
from
pracownicy
-- przypisywanay ostatni rekord z pracownicy
@zm
--wyswietla warto
zmiennej
/*Instrukcja warunkowa IF*/
if
LEN
(
@zm
)>
10
'wieksza'
else
'mniejsza'
/*przej cie w p tli*/
declare
@i
int
set
@i
=
0
while
@i
<
@ilosc
begin
'przebieg p tli '
+
convert
(
varchar
,
@i
)
/*wy wietla tylko varchar,
dlatego konieczna konwersja*/
set
@i
=
@i
+
1
end
end
go
procedura6 100
alter proc
procedura7 @a
int
,
@b
int
,
@suma
int OUTPUT
as
begin
set
@suma
=
@a
+
@b
end
go
declare
@suma
int
--tworzenie procedury anonimowej
exec
procedura7 5
,
3
,
@suma
output
'wynik '
+
convert
(
varchar
,
@suma
)
-- rednia 3 warto ci i czy NOT NULL
alter proc
procedura8 @a
int
,
@b
int
,
@c
int
,
@srednia
float output
as
begin
if
@a
is null or
@b
is null or
@c
is null
'podaj poprawne warto ci '
else
set
@srednia
= (
@a
+
@b
+
@c
)/
3
'Wynik: '
+
convert
(
varchar
,
@srednia
)
end
go
3
C:\5.2010-05-05.sql
--
declare
@wyn
float
exec
procedura8 1
,
2
,
4
,
@wyn
output
'Srednia z danych wynosi : '
+
convert
(
varchar
,
@wyn
)
1
C:\5.2010-05-05_funkcje.sql
---------------------------------
--------------FUNKCJE------------
---------------------------------
create function
zero
()
returns integer
as
begin
return
0
end
go
/*wywo anie funkcji*/
select
dbo
.
zero
()
--musi by dbo. (DataBaseOwner) przed nazw fuckji!!!
declare
@wynik
integer
set
@wynik
=
dbo
.
zero
()
'Wynik funkcji:
'
+
cast
(
@wynik
as varchar
)
/*funkcja zwracaj ca sum
2 warto ci:*/
create function
suma_wartosci
(
@a
integer
,
@b
integer
)
returns integer
as
begin
return
@a
+
@b
end
go
select
dbo
.
suma_wartosci
(
2
,
3
)
/*Pot ga parametru wej ciowego*/
alter function
potega
(
@a
float
,
@pot
float
)
returns float
as
begin
declare
@wynik
float
set
@wynik
=
power
(
@a
,
@pot
)
return
@wynik
end
go
declare
@a
float
,
@wynik
float
set
@a
=
15
;
set
@wynik
=
dbo
.
potega
(
@a
,
2
);
cast
(
@a
as varchar
) +
' do kwaratu to '
+
cast
(
@wynik
as varchar
)
select
dbo
.
potega
(
AVG
(
wiek
),
2
)
from
pracownicy
select
nazwisko
+
' '
+
imie
,
dbo
.
potega
(
wiek
,
2
)
from
pracownicy