Zastosowanie procedur z parametrem Output?

0

Witam,
Mam pytanie, mianowicie kiedy używamy procedur z parametrem wyjściowym Output a kiedy nie?
Swoje pytanie opieram na następującym przykładzie:

--Procedura z parametrem Output
CREATE PROCEDURE uspGetContactsCountByCity
@city nvarchar(60),
@ConcactsCount int OUT
as
Begin
SELECT @ConcactsCount = COUNT(ContactID) from Contacts
Where City = @city
End
--Wykonanie procedury:
Declare @ContactsTotal int
Exec uspGetContactsCountByCity @ConcactsCount = @ContactsTotal OUT, @city = 'Berlin'
Select @ContactsTotal
--Wynik: 2

--Procedura bez parametru
CREATE PROCEDURE uspGetContactsCountByCity2
@city nvarchar(60)
as
Begin
SELECT COUNT(ContactID) from Contacts
Where City = @city
End
--Wykonanie procedury:
Exec uspGetContactsCountByCity2 @city = 'Berlin'
--Wynik: 2

Obie procedury po wykonaniu dadzą nam ten sam wynik w tej samej postaci. Tak więc?

0
rocket128 napisał(a):

Witam,
Mam pytanie, mianowicie kiedy używamy procedur z parametrem wyjściowym Output a kiedy nie?
Swoje pytanie opieram na następującym przykładzie:
Obie procedury po wykonaniu dadzą nam ten sam wynik w tej samej postaci. Tak więc?

Masz funkcje i procedury. Funkcja zwraca jakiś wynik, procedura nie. Jeśli chcesz przekazać jakieś informacje z procedury do wołacza, to parametry typu OUT się przydają.

0
yarel napisał(a):

Masz funkcje i procedury. Funkcja zwraca jakiś wynik, procedura nie. Jeśli chcesz przekazać jakieś informacje z procedury do wołacza, to parametry typu OUT się przydają.

"wołacza"?
1 raz spotykam sie z taką nazwą

0
rocket128 napisał(a):
yarel napisał(a):

Masz funkcje i procedury. Funkcja zwraca jakiś wynik, procedura nie. Jeśli chcesz przekazać jakieś informacje z procedury do wołacza, to parametry typu OUT się przydają.

"wołacza"?
1 raz spotykam sie z taką nazwą

Cóż.. zdarza mi się używać brzydkich słów w języku polskim... iks de ;-) Swoją drogą, czy ktoś ma pod ręką, ładne tłumaczenie dla "caller" w kontekście strony wywołującej funkcję/metodę/procedurę?

0

Nie czaje tego za nic w świecie. Ok, zwykła procedura zwraca mi wynik, procedura z parametrem OUT zwraca mi zmienną? I co ja mogę z tą zmienną potem zrobić? Np użyć jej w innym zapytaniu czy co się tu dzieje? Bardzo proszę o pomoc

2

Parametrów OUT używasz kiedy ich potrzebujesz, jak nie potrzebujesz to nie używasz. Nie chce mi się teraz szukać przykładów, ale masz np. potrzebę że masz tabelę słownikową z miastami i piszesz procedurę która dodaje do tabeli miasto i zwraca słownik, ale chciałbyś wiedzieć czy to miasto zostało dodane, to bez OUT:

create procedure dbo.addcity @city nvarchar(50)
as
if exists(select * from dct where city=@city)
begin
   insert into dct (city) values (@city)
   select 1 
end
else
begin
    select 0
end

select city from dct
go

Wersja z out

create procedure dbo.addcity @city nvarchar(50), @i integer OUT
as
set @i=0
if exists(select * from dct where city=@city)
begin
   insert into dct (city) values (@city)
   seT @i = 1 
end

select city from dct
go

Widzisz różnicę, Twój przykład jest o tyle nieczytelny że zwraca jedną wartość i to kosmetyka czy to będzie zwracane jako resultset czy zmienna, popatrz na przykłady gdzie procedury robią trochę więcej niż zwracają jedną zmienną

0

Okej, poczytałem jeszcze trochę i wspierając się Twoim przykładem @Panczo już rozumiem. Dziękuję ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1