Opis funkcji działania funkcji SQL( Nazwa, IleP, P1, P2, P3, P4 )
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.
Opis parametrów funkcji
- Nazwa - parametr określa drugi człon nazwy procedury składowej (pierwszy człon zawsze nazwa się 'dbo.YCNSQL_' )
- IleP - liczba określająca ilość parametrów przekazywanych do procedury składowej SQL. Domyślna wartość to 0
- P1 do P4 - opcjonalne parametry przekazywane do procedury składowej SQL
Szczegółowy opis działania funkcji
- operator przeliczający musi mieć uprawnienia w SQL do wykonania procedury i całego kodu zawartego w procedurze
- początek nazwy wywoływanej procedury musi się zaczynać od 'dbo.YCNSQL_' dalszy ciąg nazwy jest argumentem Nazwa funkcji
- każda procedura musi zawierać następujące parametry @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
- procedura zwraca wynik za pomocą parametru @ret typu varchar(1024), w przypadku liczby znaki dziesiętne oddzielamy kropką
- w każdej procedurze musi być ustawiona wartość zmiennej @ret
- parametr IleP musi być ustawiony poprawnie względem kodu procedury SQL
Przykład kodu procedury składowej SQL
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
Przykłady wywołania
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