Przejdź do głównej zawartości

Jak tworzyć skrypty SQL instalujące funkcje w gniazdach?

Dla dowolnej funkcji lub gniazda można utworzyć skrypt SQL instalujący kod w gniazdach na innej instancji bazy danych. Operacja tworzenia skryptu dostępna jest pod prawym przyciskiem myszy pod nazwą Utwórz skrypt SQL definicji gniazda/funkcji.

Zakres działania operacji tworzenia skryptu zależy od miejsca (pozycji) kursora w edytorze gniazd rozszerzeń i dotyczy wszystkich elementów podrzędnych drzewa. Dla instrukcji złożonej IF (warunek) THEN ELSE nie jest istotna pozycja kursora, tzn. nieważne czy kursor zostanie ustawiony na gałęzi IF THEN czy na ELSE, zostanie utworzony skrypt dla całej logicznie powiązanej paczki funkcji, czyli tak jakby kursor stał na elemencie IF THEN. Ustawienie pozycji kursora na gałęzi SYSTEM i uruchomienie tworzenia skryptu spowoduje w efekcie przygotowanie instalacji dla wszystkich gniazd w programie.

Skrypt konstruowany jest z wykorzystaniem kodów technicznych gniazd, które są identyczne w każdej instancji bazy danych. Kody techniczne budowane są w taki sposób, że przechowują jednocześnie w nazwie adres umiejscowienia gniazda. Dodatkowo dla każdego gniazda adres w postaci opisowej podawany jest jako komentarz SQL, celem ułatwienia orientacji w wygenerowanym skrypcie. Funkcje umieszczane w gniazdach mają również nadawane automatycznie kody techniczne, z tym że zasadą jest, iż kod techniczny funkcji składa się z litery "F" oraz identyfikatora ID_GNIAZDA z tabeli MAGSRC_GNIAZDA_ROZSZERZEN. Z tego powodu ważna jest kolejność funkcji dodawanych w skrypcie SQL – kod techniczny danej funkcji będzie zapewne różny w innej instancji bazy danych, ponieważ opiera się na identyfikatorze generowanym przez serwer SQL. Z tego powodu zaleca się stosować nazwy funkcji unikalne w ramach instancji bazy, aby jednoznacznie identyfikować funkcje.

Rys. 49 Tworzenie skryptu SQL definicji gniazda/funkcji

Skrypt SQL jest zabezpieczony przed wielokrotną instalacją do bazy danych. Procedura składowana RM_MAGSRC_UtworzInstrukcje wykorzystywana przy konstrukcji skryptu SQL, instalacji kodu gniazda sprawdza, czy istnieje instrukcja (funkcja) posiadająca wszystkie dane, takie jak podawane parametry w tabeli MAGSRC_GNIAZDA_ROZSZERZEN. Jeśli taka funkcja istnieje wówczas nie zostanie ponownie dodana. Jest to kolejny ważny argument za stosowaniem unikalnych nazw funkcji w ramach instancji. Jeśli w gnieździe zdefiniujemy dwie funkcje o identycznych parametrach, a w szczególności o takiej samej nazwie i podpiętych do tej samej gałęzi drzewa (tego samego gniazda) to po utworzeniu skryptu i jego uruchomieniu na innej instancji utworzy się tylko jedna funkcja, a druga, ponieważ ma identyczne parametry jak pierwsza – zostanie przez procedurę RM_MAGSRC_UtworzInstrukcje całkowicie pominięta.

Rys. 50 Przykład skryptu SQL instalującego funkcje w gniazdach

Podczas przygotowywania rozwiązania docelowego dla klienta należy pamiętać o kolejności wykonywania skryptów SQL. Zasadniczo należy wykonywać na bazie docelowej skrypty wygenerowane z bazy testowej w kolejności:

  1. Skrypty tworzące operacje dodatkowe w programie.
  2. Skrypty tworzące tabele dodatkowe.
  3. Skrypty instalujące definicje funkcji w gniazdach rozszerzeń.

Zmiana kolejności instalacji skryptów może spowodować, że przygotowane rozwiązanie nie będzie działało. Wynika to ze sposobu działania gniazd rozszerzeń:

  • gniazda dla operacji dodatkowych tworzone są podczas dodawania operacji dodatkowych.
  • definicja funkcji typu Tabela dodatkowa lub Formularz tabeli zakłada istnienie poprawnej definicji tabeli w bazie danych.