C:\5.2010-05-05.sql 1

---------------------------------

------------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

C:\5.2010-05-05.sql 2

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 print @zm --wyswietla warto

zmiennej

/*Instrukcja warunkowa IF*/

if LEN(@zm)>10

print 'wieksza'

else

print 'mniejsza'

/*przej cie w p tli*/

declare @i int

set @i=0

while @i<@ilosc

begin

print '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 print '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 print 'podaj poprawne warto ci '

else

set @srednia = (@a+@b+@c)/3

print 'Wynik: '+convert(varchar, @srednia) end

go

C:\5.2010-05-05.sql 3

--

declare @wyn float

exec procedura8 1,2,4,@wyn output print 'Srednia z danych wynosi : '+convert(varchar, @wyn)

C:\5.2010-05-05_funkcje.sql 1

---------------------------------

--------------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()

print '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);

print 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