ABAP/4
Tabela wewnętrzna - definicja Temporalna tabela przechowywana w pamięci operacyjnej serwera aplikacji Tworzona, wypełniana i modyfikowana jest przez program podczas jego wykonywania i usuwana, gdy program kończy swoje działanie Tak jak tabela bazy danych, składa się z wielu wierszy o takiej samej strukturze, lecz w przeciwieństwie do tabel bazy danych nie może przechowywać danych po zakończeniu działania programu Zastosowanie: temporalne miejsce przechowywania danych, na których wykonuje się pewne operacje lub jako prywatny temporalny bufor Pełni rolę dynamicznej tablicy Może występować albo jako typ danych albo jako obiekt danych
Tabela wewnętrzna jako typ Typ określany przez typ linii, klucz i typ tabeli typ linii: może być dowolnym typem (zazwyczaj struktura, której składowe są kolumnami tabeli wewnętrznej, ale także typ podstawowy lub inna tabela wewnętrzna) klucz: identyfikuje wiersze tabeli dwa typy klucza: standardowy i użytkownika może być unikalny (UNIQUE) lub nieunikalny (NON-UNIQUE) gdy klucz jest unikalny tabela nie może zawierać zduplikowanych wierszy unikalność klucza zależy od metody dostępu do tabeli jeśli tabela ma strukturalny typ typ linii typ tabeli: określa metodę dostępu do zawartości tabeli trzy typy tabeli: standardowa sortowana haszowana Nie ma potrzeby pełnego określania typu tabeli wewnętrznej, można to zrobić w sposób ogólny nie podając klucza lub klucza i typu linii.
Tabela wewnętrzna jako dynamiczny obiekt danych Obiekt danych zdefiniowany jako tabela wewnętrzna lub jako obiekt wcześniej zdefiniowanego typu tabeli wewnętrznej zawsze musi być w pełni zdefiniowany (typ linii, klucz, typ tabeli) Rozmiar tabeli ograniczony rozmiarem pamięci RAM, teoretycznie nie więcej niż 2GB, w praktyce 500MB W przypadku tablic haszowanych nie więcej niż 2 mln rekordów Typem linii może być dowolny typ ABAP-owy: elementarny, strukturalny lub tabela wewnętrzna Tabela wewnętrzna dzieli się na linie i kolumny
Typy tabel wewnętrznych - właściwości Tabele standardowe: mają wewnętrzny liniowy indeks, który od pewnego rozmiaru tabeli przyjmuje strukturę drzewiastą (co powoduje wydłużenie czasu dostępu - logarytmiczny) dostęp do danych według indeksu lub klucza czas dostępu według klucza jest proporcjonalny do liczby rekordów tabeli klucz zawsze jest nieunikalny (nie może być unikalny) nieunikalność klucza przyspiesza wypełnianie tabeli (nie trzeba sprawdzać czy dany rekord już istnieje) Tabele sortowane: zawsze zapisywane w posortowanej według klucza postaci również posiadają wewnętrzny indeks dostęp do danych według klucza lub według indeksu czas dostępu według klucza logarytmicznie zależny od liczby rekordów (binary search) klucz może być zarówno unikalny, jak i nieunikalny Tabele haszowane: nie mają indeksu liniowego dostęp wyłącznie według klucza czas dostępu stały i niezależny od liczby rekordów (algorytm haszujący) klucz musi być unikalny
Wybór typu tabeli Tabela standardowa, gdy: adresowanie linii przez indeks tabela wypełniania głównie przez APPEND odczyt, modyfikacje i usuwanie linii z klauzulą INDEX odpowiedniej instrukcji ABAP mniej użyteczna dla dostępu za pośrednictwem klucza Tabela sortowana, gdy: potrzebna jest tabela posortowana już na etapie wprowadzania danych tabela wypełniana instrukcją INSERT (rekordy wprowadzane w miejsce wynikające z porządku sortowania według klucza głównego) częściowo użyteczne dla częściowo sekwencyjnego przetwarzania w pętli LOOP (gdy warunek klauzuli WHERE zawiera początek klucza) Tabela haszowana: główną operacją jest dostęp za pośrednictwem klucza klucz zawsze unikalny tabela wewnętrzna ma przypominać tabelę bazy danych lub gdy mają być przetwarzane duże wolumeny danych.
Tworzenie tabeli wewnętrznej Tabela wewnętrzna może być zadeklarowana: jako abstrakcyjny typ danych w Słowniku ABAP bezpośrednio jako obiekt danych Minimalny rozmiar tabeli wewnętrznej to 256 B (SAP R/3 v. 4.6C) ma to znaczenie wtedy, gdy tabela wewnętrzna jest składową złożonego obiektu danych nie ma potrzeby określania rozmiaru pamięci dla tabeli wewnętrznej wiersze są dodawane i usuwane dynamicznie
Tabela wewnętrzna jako typ W programie przy użyciu instrukcji TYPES Składnia: TYPES <typ> TYPE LIKE <typ_tabeli> OF <typ_linii> [WITH <klucz>] [INITIAL SIZE <n>]. po klauzuli TYPES (LIKE) nie występuje odwołanie do istniejącego typu danych, lecz konstruktor typu definiujący <typ_tabeli>, <typ_linii> oraz klucz tabeli wewnętrznej <typ> klauzula INITIAL SIZE służy przydzieleniu tabeli wewnętrznej początkowej ilości pamięci
Hierarchia typów tabel Typy ogólne ANY TABLE INDEX TABLE HASHED TABLE STANDARD TABLE SORTED TABLE Typy określone
Ogólne typy tabel INDEX TABLE dla tabel typu ogólnego z dostępem za pośrednictwem indeksu ANY TABLE dla tabel typu ogólnego nie są dozwolone operacje korzytsające z indeksu Zastosowanie: pola symbol parametery interfejsów w procedurach
Określone typy tabel STANDARD TABLE lub TABLE dla tabel standardowych SORTED TABLE dla tabel sortowanych HASHED TABLE dla tabel haszowanych JOLA MAREK IZA BONIA ĆMA SŁOŃ Określone typy tabel wewnętrznych determinują sposób dostępu do wierszy tabeli wewnętrznej w operacjach korzystających z klucza: liniowe przeszukiwanie dla tabel standardowych binarne przeszukiwanie dla tabel sortowanych algorytm haszujący dla tabel haszowanych
Typ linii <typ_linii> można określic: dowolnym typem danych, gdy stosowana jest klauzula TYPE: typ predefiniowany ABAP-a lokalny typ w programie typ danych ze Słownika ABAP dowolnym obiektem danych, gdy stosowana jest klauzula LIKE: obiekt musi być już zdefiniowany przed definicją tabeli wewnętrznej wyjątek: tabele i struktury Słownika ABAP nie mogą być stosowane z klauzulą LIKE w definicjach klas
Klucz Klucz tabeli wewnętrznej definiowany jest następująco: [UNIQUE NON-UNIQUE] KEY <kolumna_1> <kolumna_n> lub [UNIQUE NON-UNIQUE] KEY TABLE LINE lub [UNIQUE NON-UNIQUE] DEFAULT KEY gdzie: <kolumna_i> - nie może być ani tabelą wewnętrzną ani referencją, ani też nie może zawierać tabel wewnętrznych lub referencji, pola klucza mogą być zagnieżdżonymi strukturami, które są po kolei rozwijane, gdy następuje dostęp za pomocą klucza KEY TABLE LINE definiuje całą linię jako klucz, ale typ linii musi być typem elementarnym (C,D,F,I,N,P,T,X) lub ew. strukturalnym (ale nie jest to zalecane rozwiązanie w takim przypadku) DEFAULT KEY definiuje klucz domyślny, który w przypadku strukturalnego typu linii składa się z tych kolumn nienumerycznych tabeli wewnętrznej, które nie zawierają ani same nie są tabelami wewnętrznymi bądź referencjami, a w przypadku elementarnego typu linii cała linia jest kluczem. Domyślny klucz tabeli wewnętrznej, której typ linii jest również tabelą wewnętrzną, jest pusty. definiowanie klucza jest opcjonalne UNIQUE nie może być użyty dla tabel standardowych UNIQUE musi być wyspecyfikowane dla tabel haszowanych
Wstępne wymagania pamięciowe
Tabela wewnętrzna: składa się z ciała i opcjonalnej linii nagłówka Ciało tabeli wewnętrznej: tworzą wiersze tej tabeli, wiersze te mają taką samą strukturę Linia nagłówka: jest łańcuchem pól o tej samej strukturze co wiersze tabeli, może przechowywać tylko jeden wiersz, stanowi bufor używany do przechowywania rekordów przed zapisem do lub po odczycie z tabeli wewnętrznej