Abstrakcyjne lub strukturalne typy danych są mechanizmami typów dla modelowania i zapisywania obiektów złożonych w relacyjnej bazie danych. W typach strukturalnych może być osadzonych wiele pól, na przykład figura geometryczna (lista współrzędnych kartezjańskich) lub dane pracownika (imię i nazwisko, adres, płeć, data urodzenia i numer identyfikacyjny). Typy te można modelować i zapisywać w DB2 Universal Database.
Obsługa typów strukturalnych została rozszerzona o zdolność tworzenia tabel z kolumnami typu strukturalnego. Ponadto typy strukturalne mogą być zagnieżdżone w obrębie innego typu strukturalnego. Oznacza to, że atrybuty typu strukturalnego nie są już ograniczone do podstawowych typów SQL - ich typem może być inny typ strukturalny.
W wersji 7 można definiować funkcje z parametrami wejściowymi lub parametrami klauzuli RETURNS, które są typami strukturalnymi. Dla każdego strukturalnego typu danych można również definiować metody, co pozwala na hermetyzację zachowania z danymi. Metodę definiuje się bardzo podobnie do funkcji, ale jej użycie jest ściśle związane z typami strukturalnymi. Zasadniczo jest to procedura z instancją typu strukturalnego jako niejawnym pierwszym argumentem.
W przypadku tabel z kolumnami typu strukturalnego można korzystać z narzędzi Reorganize Table (REORG) i db2look. Aby uzyskać więcej informacji na temat narzędzia REORG, patrz Command Reference; aby uzyskać więcej informacji na temat typów strukturalnych i narzędzia db2look, patrz Administration Guide: Implementation i Administration Guide: Performance.
Funkcje transformacji pozwalają na używanie kolumn typu strukturalnego z programami napisanymi przez użytkownika. Funkcje transformacji przekształcają złożoną strukturę w obrębie strukturalnego typu danych w uporządkowany zbiór jego podstawowych typów SQL. Przekształcają one również atrybuty podstawowe z powrotem na ich typy strukturalne. Transformacje te są wymagane przy przenoszeniu typów strukturalnych do i z bazy danych. Aby uzyskać więcej informacji, patrz Administration Guide: Implementation.
Funkcja z treścią SQL zawiera proste instrukcje procedur SQL i jest osadzana w wywołującej instrukcji SQL (przypominającej makro). Pozwala to kompilatorowi zapytań zoptymalizować całą instrukcję SQL, łącznie z funkcją z treścią SQL. Strukturalne typy danych wykorzystują funkcje z treścią SQL dla swoich funkcji transformacji (patrz Funkcje transformacji) i metod (patrz Typy strukturalne).
DB2 wersja 7.2 oferuje dynamiczne instrukcje złożone (nowy typ złożonych instrukcji SQL) pomagające zmniejszyć nakład pracy menedżera baz danych i poprawić wydajność obsługi żądań realizowanych przez sieć. Dynamiczne instrukcje złożone są idealne w wypadku krótkich skryptów z niewielką liczbą logicznych konstrukcji sterujących przepływem, ale wywołujących przepływ znacznych ilości danych.
Z poziomu dynamicznej instrukcji złożonej można:
DB2 kompiluje dynamiczne instrukcje złożone jako jedną instrukcję. Więcej informacji zawierają DB2 Release Notes.
DB2 wersja 7.2 umożliwia realizowanie logiki proceduralnej w procedurach zapisanych w bazie, wyzwalaczach i funkcjach SQL dzięki instrukcjom sterowanym za pomocą języka SQL.
Przed pojawieniem się wersji 7.2 wyzwalacze oferowały jedynie proste przetwarzanie sekwencyjne bez logiki warunkowej, ani pętli. To rozszerzenie funkcji wyzwalaczy umożliwia łatwiejsze migrowanie aplikacji do DB2. Można również korzystać z rozszerzeń w zakresie funkcji SQL, takich jak SCALAR, TABLE czy ROW. Inny system zarządzania bazami danych można odwzorować na DB2 za pomocą tabelowej funkcji SQL z logiką sterującą w Centralnej hurtowni danych lub za pomocą skalarnych funkcji SQL.
Wersja 7.2 umożliwia stosowanie następujących instrukcji sterujących w wyzwalaczach i funkcjach SQL:
Instrukcje sterujące są wbudowane w kompilator zapytań DB2. Więcej informacji na temat instrukcji sterujących i zmiennych SQL zawiera SQL Reference. Więcej informacji na temat tego rozszerzenia z wersji 7.2 zawierają DB2 Release Notes.
Z tabelami określonego typu można obecnie używać ograniczeń i wyzwalaczy spójności referencyjnej.