Funkcja wykonuje procedurę składową SQL i wynik działania tej funkcji jest zwracany jako wynik funkcji.
Funkcja pozwala na wykonanie dowolnego kodu SQL na serwerze oraz wyliczenie i zwrócenie dowolnej wartości dostępnej z poziomu procedury SQL.
Wywoływana nazwa procedury składa się z nazwy stałej 'YCNSQL_' i nazwy podawanej w parametrze funkcji Nazwa.
Przykładowo wywołujemy z poziomu formuły kalkulacyjnej SQL('TestProc', 1, '09876543') powoduje wywołanie procedury składowej o nazwie z listą parametrów
[dbo].[YCNSQL_TestProc] @Ret varchar(1024) OUTPUT, @DataNaliczenia int, @Mc int, @Rok int, @IdLokalSkladnikCzynsz int, @Sygnatura varchar(80), @Test int, @IdLogger int, @Lokal varchar(20) = null
gdzie parametr @Lokal jest tym jaki przekazujemy do procedury (w tym przypadku jest to wartość '09876543') a pozostałe parametry są automatycznie przekazywane przez program wywołujący procedurę SQL.
Jak widzimy procedura składowa ma pełne informacje w jaki miesiąc, rok i z jakiego składnika lokalu jest wywoływana, daje to dużą elastyczność w wykorzystaniu możliwości. W prostych przypadkach procedura służy do pobrania jakiś wartości z SQL, może też służyć jako pełny kod zapisu do kartoteki naliczenia wraz z wystawieniem dokumentów not.
@Ret varchar(1024) OUTPUT, @DataNaliczenia int, @Mc int, @Rok int, @IdLokalSkladnikCzynsz int, @Sygnatura varchar(80), @Test int, @IdLogger int a kolejne są typu varchar(..) maksymalnie 4 z wartością domyślną null SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- ====================================================================================
-- Author: Giga Katowice
-- Description: Procedura wywoływane w formułach kalkulacji czynszu
-- ====================================================================================
create procedure [YCNSQL_TestProc] @Ret varchar(1024) OUTPUT,
@DataNaliczenia int,
@Mc int,
@Rok int,
@IdLokalSkladnikCzynsz int,
@Sygnatura varchar(80),
@Test int,
@IdLogger int,
@Lokal varchar(20) = null ,
@Nieruchomosc varchar(20) = null
as
Begin
-- ustawiam wartość losową żeby coś było zmiennego
set @Ret = LTrim( Str( round( RAND()*1000, 0)))
-- można obsłużyć logger jaki jest dostępny w GwMax
if @IdLogger <> 0
begin
insert into YDziennik_Katalog_Lista ( YDKL_IdDziennik_Katalog,
YDKL_Lp,
YDKL_Punkt_Kontrolny,
YDKL_Data,
YDKL_Godz,
YDKL_Opis)
select @IdLogger,
1+isnull((select Max( X.YDKL_Lp) from YDziennik_Katalog_Lista X where X.YDKL_IdDziennik_Katalog = @IdLogger),0),
0,
Convert( int, GetDate()+36163),
(100*(DatePart(ss, GetDate())+(60*DatePart(mm, GetDate()))+(3600*DatePart(hh, GetDate()))))+1,
'To jest zarejestrowany opis wywołania funkcji sql w naliczeniu czynszu, parametry @Lokal=' + isnull( @Lokal, 'null')+', @Nieruchomosc=' + isnull( @Nieruchomosc, 'null')
end
---- przykład aktualizacji
update YLokal
set YLo_Uwagi = isnull( YLo_Uwagi, '') + ' wyliczyłem składnik: ' + @Ret
where YLo_Akronim = @Lokal
return 0
End
sql('TestProc', 1, '00100010023')
Przykład wywołanie z jednym parametrem opisany w procedurze jako @Lokal, parametr @Nieruchomosc przyjmuje wartość domyślną null
sql('TestProc', 2, '00100010023', 'AAAAA')
Przykład wywołanie z dwoma parametrami