---------------------------------
------------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
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
--
declare @wyn float
exec procedura8 1,2,4,@wyn output print 'Srednia z danych wynosi : '+convert(varchar, @wyn)
---------------------------------
--------------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