Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

SQL-Deskriptorbereich

Bei den bisher beschriebenen Anweisungen der dynamischen SQL liegen Anzahl und Datentyp der Platzhalter und Ergebnisspalten einer dynamisch übersetzbaren SQL-Anweisung oder dynamischen Cursorbeschreibung zum Übersetzungszeitpunkt des ESQL-Programms fest. Um beliebige Eingabeparameter verwenden zu können und um beliebige Ergebnisse von Abfragen im ESQL-Programm verarbeiten zu können, stehen in SQL sogenannte Deskriptorbereiche zur Verfügung.

Ein Deskriptorbereich ist ein Speicherbereich, in den Werte und Informationen über Anzahl und Datentyp von Eingaben (Platzhaltern) und Ausgaben (Ergebnisspalten) von dynamisch übersetzbaren SQL-Anweisungen oder Cursorbeschreibungen eingetragen werden.

Jeder Deskriptorbereich besteht aus einer Anzahl von Einträgen. Ein Eintrag wird für jede einfache Spalte oder für jeden einfachen Wert bzw. im Fall von multiplen Spalten oder Aggregaten für jedes Spaltenelement oder jede Ausprägung angelegt. Jeder Eintrag ist in Felder unterteilt. Die Werte in diesen Feldern können mit DESCRIBE oder SET DESCRIPTOR gesetzt und mit GET DESCRIPTOR gelesen werden. Je nach Art des Eintrags sind nur bestimmte Felder mit Werten belegt. Für jeden Deskriptorbereich gibt es ein Feld COUNT, das die Anzahl der Einträge eines Deskriptorbereichs enthält.

Der Deskriptorbereich enthält folgende Felder für einen Eintrag:

Schlüsselwort

Bedeutung

kann im
SQL-Programm
gesetzt werden

COUNT

Anzahl der Einträge eines Deskriptorbereichs

ja

TYPE

Datentyp des Eintrags:

-42NVARCHAR
-31NCHAR
1CHAR
2NUMERIC
3DECIMAL
4INTEGER
5SMALLINT
6FLOAT
7REAL
8DOUBLE PRECISION
9Zeitdatentyp
12VARCHAR

ja

LENGTH

Länge bzw. maximale Länge in Zeichen bei alphanumerischen
Datentypen und Zeit-Datentypen oder Länge bzw.
maximale Länge in Code Units bei National-Datentypen

ja

OCTET_LENGTH

Maximaler Speicherplatzbedarf in Bytes bei alphanumerischen
Datentypen, National-Datentypen, numerischen
Datentypen und Zeit-Datentypen

nein,
nur gelesen

PRECISION

Nur für numerischen Datentypen sowie TIME und
TIMESTAMP: Gesamtstellenzahl in Dezimalstellen
(bei NUMERIC, DECIMAL, TIME, TIMESTAMP)
bzw. Binärstellen (sonst)

ja

SCALE

Nur für Ganz- oder Festpunktzahlen:
Anzahl der Nachkommastellen

ja

DATETIME_
INTERVAL_CODE

Nur bei Zeitdatentypen (TYPE =9):
1 DATE 2 TIME 3 TIMESTAMP

ja

REPETITIONS

Bei multiplen Spalten bzw. Aggregaten: enthält beim ersten
Eintrag die Anzahl der Komponenten, bei den folgenden
Einträgen jeweils 1. Bei einfachen Spalten: nur den Wert 1

ja

NULLABLE

  • 1 Ausgabewert kann der NULL-Wert sein

  • 0 sonst

nein

INDICATOR

Bei Deskriptorbereich für Ergebnisspalten:

  • 0 DATA enthält den gelesenen Wert

  • -1 der NULL-Wert wurde gelesen

  • >0 Originallänge eines alphanumerischen Werts bzw.
    eines National-Werts bei Informationsverlust nach der
    Übertragung

Bei Deskriptorbereich für Platzhalter:

  • <0 Wert ist der NULL-Wert

  • 0 sonst

ja

DATA

Wert eines Eintrags. Der Datentyp wird durch die Einträge
in TYPE, LENGTH, PRECISION, SCALE und
DATETIME_INTERVAL_CODE bestimmt

ja

NAME

Spaltenname

nein

UNNAMED

  • 1 NAME enthält Spaltenname

  • 0 sonst

nein

Tabelle 37: Felder eines Deskriptorbereichs


Das Feld COUNT ist pro Deskriptorbereich einmal vorhanden. Der Datentyp von NAME ist

CHAR(n) oder VARCHAR(n) mit n >= 128, der Datentyp von DATA wird durch die Einträge in TYPE, LENGTH, PRECISION und SCALE bestimmt. Die restlichen Felder haben den Datentyp SMALLINT.

Der Anwender muss sich um die interne Struktur des SQL-Deskriptorbereichs nicht kümmern, sondern kann die Felder des Deskriptorbereichs mit SQL-Anweisungen ansprechen. Je nach Anweisung werden nur bestimmte Felder des Deskriptorbereichs angesprochen.

Für das Arbeiten mit einem SQL-Deskriptorbereich gibt es eine Reihe von SQL-Anweisungen und Varianten der EXECUTE-, OPEN- und FETCH-Anweisung:

  • Deskriptorbereich anlegen
    Ein Deskriptorbereich muss zunächst mit ALLOCATE DESCRIPTOR angelegt werden. Mit ALLOCATE DESCRIPTOR wird die maximale Anzahl der Einträge im Deskriptorbereich angegeben. Die Einträge des Deskriptorbereichs sind nach ALLOCATE DESCRIPTOR noch undefiniert.

  • Anzahl und Datentypen von Platzhaltern beschreiben
    Anzahl und Datentypen der Platzhalter einer dynamisch übersetzten SQL-Anweisung oder Cursorbeschreibung können mit DESCRIBE INPUT bestimmt und in einem Deskriptorbereich abgelegt werden.

  • Werte für Platzhalter übergeben
    Die Werte für die Platzhalter einer dynamisch übersetzten Anweisung werden bei EXECUTE... USING SQL DESCRIPTOR aus einem Deskriptorbereich entnommen.Die Werte für die Platzhalter einer dynamisch übersetzten Cursorbeschreibung werden bei OPEN... USING SQL DESCRIPTOR aus einem Deskriptorbereich entnommen. In beiden Fällen müssen die gewünschten Werte vorher mit SET DESCRIPTOR gesetzt werden.

  • Anzahl und Datentypen von Ergebnisspalten beschreiben
    Anzahl und Datentypen der Ergebnisspalten einer dynamisch übersetzten SELECT-Anweisung oder Cursorbeschreibung können mit DESCRIBE OUTPUT bestimmt und in einem Deskriptorbereich abgelegt werden.

  • Spaltenwerte eines Ergebnissatzes ablegen
    Die Spaltenwerte des Ergebnissatzes einer dynamisch übersetzten SELECT-Anweisung werden bei EXECUTE... INTO SQL DESCRIPTOR in einen Deskriptorbereich abgelegt.
    Die Spaltenwerte eines Satzes der Ergebnistabelle eines dynamischen Cursors werden bei FETCH... INTO SQL DESCRIPTOR in einen Deskriptorbereich abgelegt.

  • Deskriptorbereich ändern
    Die Anzahl der Einträge oder der Inhalt eines Eintrags des Deskriptorbereichs können mit SET DESCRIPTOR geändert werden.

  • Deskriptorbereich abfragen
    Die Anzahl der Einträge oder der Inhalt von Feldern eines Eintrags im Deskriptorbereich können mit GET DESCRIPTOR gelesen werden.

  • Deskriptorbereich freigeben
    Der Speicherplatz, den ein Deskriptorbereich belegt, kann mit DEALLOCATE DESCRIPTOR wieder freigegeben werden.