PL/SQL-Tabellen (associative arrays)

PL/SQL Tabellen sind erst ab PL/SQL Version 2 verfügbar und werden in der PGA der ORACLE Instanz abgelegt. Sie existieren also nur als eine serverseitige Speicherstruktur und können daher clientseitig (z.B. Im Developer 2000) nicht manipuliert werden.

PL/SQL Tabellen werden seit ORACLE 9i als associative array bezeichnet, ich nenne sie hier jedoch weiterhin PL/SQL-Tabellen.
Bitte beachten Sie hier bereits einen Unterschied zwischen den Begrifflichkeiten PL/SQL Tabelle, nested table und varray. Die letzteren sind ebenfalls Datentypen in PL/SQL, werden hier aber noch nicht behandelt.

Charakteristik von PL/SQL Tabellen

PL/SQL Tabellen sind merkwürdig. Auf der einen Seite sind sie wie Arrays, auf der anderen Seite nicht. Einerseits verhalten sie sich wie Tabellen, andererseits wieder nicht. Also, was sind sie nun?

Nun, lassen Sie uns sowohl PL/SQL Tabellen wie auch Arrays und SQL Tabellen beschreiben, um die Unterschiede herauszuarbeiten und den Einsatz von PL/SQL Tabellen kennenzulernen.

  • PL/SQL Tabellen sind eindimensional. Das bedeutet, sie können nur aus einer Spalte bestehen. Arrays wie auch Tabellen können aus mehr als einer Dimension bestehen. Es sei hier aber erwähnt, dass der Datentyp der einen Spalte frei wählbar ist und damit auch ein Record sein kann, der wiederum aus mehreren Feldern besteht. Damit ließe sich die Beschränkung der Eindimensionalität aufheben. Dies ist erst seit PL/SQL Version 2.3 möglich.
  • PL/SQL Tabellen sind in Ihrer Größe unbeschränkt. Anders als Arrays, deren Größe zum Erzeugungszeitpunkt angegeben werden muß. PL/SQL Tabellen wachsen dynamisch, je mehr Zeilen der Tabelle hinzugefügt werden.
  • Sie sind lückenhaft. Das soll heißen, daß eine Zeile in der Tabelle nur existiert, wenn ihr auch ein Wert zugewiesen wurde. Neue Zeilen müssen also nicht sequentiell hinzugefügt werden, sondern ein Überspringen einzelner „Zeilen“ ist möglich. Anders als bei SQL Tabellen greift man auf die einzelnen Zeilen der Tabelle mit einem Index zu. Wir können also in Zeile 10, 30 und in Zeile 1029 einen Wert ablegen. Alle anderen Zeilen bleiben unzugeordnet (ihr Wert ist damit aber nicht NULL, sondern tatsächlich „unassigned“). Dieses Verhalten ist bei Arrays ein anderes: Wenn ein Array deklariert wird, ist wirklich jeder Zelle Speicher zugeordnet.
  • PL/SQL Tabellen haben einen Indizierungsmodus. Oft wird BINARY_INTEGER genutzt, es gibt aber auch andere Indizierungsmodi. Der Index fungiert als der Primärschlüssel der Tabelle. Da der Index ein Integer ist, kann man also keinen Wert in Zeile 2.3 einfügen, sehr wohl aber in Zeile -5!

DML und PL/SQL-Tabellen

PL/SQL Tabellen verhalten sich anders als SQL Tabellen:

  • Es gibt keine Transaktionsintegrität, Manipulationen an PL/SQL Tabellen können also nicht mit COMMIT oder ROLLBACK rückgängig gemacht werden.
  • Aus einer PL/SQL Tabelle kann man nicht selektieren, sondern muß ihre Inhalte in einem Schleifenkonstrukt bearbeiten.
  • Man kann kein INSERT oder UPDATE in einer PL/SQL Tabelle machen. Ein DELETE ist seit Version 2.3 möglich
  • Da es sich hier um PL/SQL Datenstrukturen handelt, existieren diese nur für die Dauer der Programmausführung. Sie sind flüchtig wie Variablen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.