Edytor SQL
Niektóre bloczki Przetwarzania posługują się skryptami SQL np. w celu pobrania danych z bazy czy wykonania dowolnej aktualizacji.
Warto skorzystać z funkcji podpowiadania treści aktywowanej kombinacją klawiszy Ctrl+Spacja. W oknie podpowiedzi znajdziemy zarówno elementy szerokiego zakresu składni SQL, ale też dodatkowe elementy specyficzne dla Przetwarzania danych. Więcej patrz: Podpowiadanie składni
Treść skryptów może być uzupełniona o dodatkowe wyrażenia służące do odwołania się do danych, dostępnych w bieżącym rekordzie czy pakiecie jako całości.
Odwołania do danych mogą być realizowane na dwa sposoby:
- Jako wartości parametrów - wtedy odwołania do danych należy umieścić między ciągami znaków:
#(' i ')#. Na przykład, mając strukturę z polem typu Tekst o nazwie Pole1 możemy utworzyć następujące zapytanie:
SELECT * FROM TABLE where COLUMN = #(Pole1)#
W powyższym przykładzie, w miejsce odwołania do pola Pole1 zostanie wstawiona wartość, która przyjdzie z rekordu danych sformatowana do języka SQL. Jeśli zatem mamy rekord danych zawierający w polu Pole1 wartość "Jakiś tekst", to zapytanie, w zależności od wybrania opcji Parametryzowane zapytania w bloczku Odczyt z bazy będzie miało postać:
Jeśli Parametryzowane zapytania ma wartość Tak (zapytanie parametryczne):
SELECT * FROM TABLE where COLUMN = @Pole1
Jeśli Parametryzowane zapytania ma wartość Nie:
SELECT * FROM TABLE where COLUMN = 'Jakiś tekst'
- Jako fragmenty SQL do tworzenia dynamicznych zapytań SQL - wtedy odwołania do danych należy umieścić między ciągami znaków:
##(' i ')#. Na przykład, mając strukturę z polem o nazwie Nazwa_kolumny typu Tekst możemy utworzyć następujące zapytanie:
SELECT ##(Nazwa_kolumny)# as COL FROM TABLE
W takim wypadku w miejsce odwołania do pola Nazwa_kolumny zostanie wstawiona wartość, która przyjdzie z rekordu danych bez żadnego formatowania. Jeśli zatem mamy rekord danych zawierającym w polu Nazwa_kolumny wartość "Moja_kolumna", to zapytanie będzie miało postać:
SELECT Moja_kolumna as COL FROM TABLE
Algorytm uruchamiania pakietu przetwarzania wymaga, aby przed uruchomieniem pakietu znane były schematy danych wszystkich bloczków.
W przypadku "dynamicznych" zapytań SQL przed uruchomieniem pakietu nie zawsze jest w stanie wstawić w miejsce odwołania do danych wartości, która wygeneruje poprawne zapytanie. Może to spowodować błąd na etapie walidacji pakietu, a co za tym idzie pakiet nie zostanie uruchomiony. (Np. dla zapytania SELECT ##(Nazwa_kolumny)# as COL FROM TABLE przed uruchomieniem pakietu, system nie będzie wiedział co wstawić w pole Nazwa_kolumny, zatem spróbuje w to odwołanie do pola wstawić wartość pustą, co będzie skutkowało niepoprawnym zapytaniem SQL).
Aby temu zapobiec, w miejscu odwołania do danych istnieje możliwość podania wartości domyślnej, która ma zostać użyta na etapie walidacji. Wartość domyślną podajemy w nawiasach, po przecinku, np.:
SELECT ##(Nazwa_kolumny, Wartość_domyślna)# as COL FROM TABLE
Rozwiązanie to umożliwia podanie jakiejś wartości w trakcie projektowania, jeśli prawdziwe wartości nie są dostępne (np. nieustawiony ARG w pakiecie (argument wywołania pakietu) lub brak bieżącego rekordu).
W przykładzie niżej mamy trzyliterowy napis 'S' do użycia w ramach odwołania tekstowego (podwójny ##) i jedną literkę S jako odwołanie parametryczne (pojedynczy #)
SELECT * FROM sys.objects
WHERE type in (##(ARG:ARG_ListaZgloszen,'S')#)
--np. ('S')
SELECT * FROM sys.objects
WHERE type = #(ARG:zz,S)#
Kolejny przykład, dwa elementy. Wartość "design-time" to cały tekst od przecinka do nawiasu zamykającego.
SELECT * FROM sys.objects
WHERE type in (##(ARG:ARG_ListaZgloszen,'S', 'U')#)
W treści skryptów można odwoływać się do następujących drzew danych:
- Rekordy zapytań:
#(Pole1)#- wartość pola rekordu np. zapytania użyta jako parametr SQL - Argumenty pakietu:
#(ARG:NazwaArgumentuWywolaniaPakietu)# - Zmienne pakietu:
#(PKG:NazwaBloczka\NazwaParametruBloczka)# - Słowniki zadeklarowane w pakiecie:
#(DIC:NazwaSlownika\kolumna)#
Sam edytor ułatwia też pracę z językiem SQL poprzez kolorowanie składni i wyjaśnianie elementów wskazanych myszą.