Funkcja kalkulacji: SQL

Zmodyfikowano dnia 2015/02/01 19:21 przez Wojtek — Skategoryzowana jako: GW-MAX, GW-MAX_Czynsze

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

  1. Nazwa - parametr określa drugi człon nazwy procedury składowej (pierwszy człon zawsze nazwa się 'dbo.YCNSQL_' )
  2. IleP - liczba określająca ilość parametrów przekazywanych do procedury składowej SQL. Domyślna wartość to 0
  3. P1 do P4 - opcjonalne parametry przekazywane do procedury składowej SQL

Szczegółowy opis działania funkcji


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