Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

Werte zwischen Benutzervariablen und Deskriptorbereich übertragen

Bei der Übertragung von Werten zwischen Benutzervariablen und Deskriptorbereich gelten strengere Regeln als bei der Übertragung von Werten zwischen Benutzervariablen (bzw. Deskriptorbereich) und Tabellenspalten:

  • Für alle Felder außer NAME und DATA gilt: der SQL-Datentyp der Benutzervariable, in die der Wert eines Feldes abgelegt oder von der der Wert gelesen wird, muss SMALLINT sein.

  • Wird der Wert des Felds NAME gelesen, muss die Benutzervariable den SQL-Datentyp CHAR(n) oder VARCHAR(n) haben, mit n >= 128.

  • Wird der Wert des Felds DATA in eine Benutzervariable abgelegt oder aus einer Benutzervariable gelesen, muss der SQL-Datentyp der Benutzervariable mit dem durch die Felder TYPE, DATETIME_INTERVAL_CODE, LENGTH, PRECISION und SCALE beschriebenen Datentyp desselben Eintrags übereinstimmen. Abhängig vom Datentyp sind im Folgenden die Regeln zusammengestellt.

Zeichenketten

Bei den SQL-Datentypen CHAR und NCHAR muss die Länge der Benutzervariable gleich dem Wert des Deskriptorfelds LENGTH sein.

Bei den SQL-Datentypen VARCHAR und NVARCHAR muss bei der Übertragung des Werts von der Benutzervariable in den Deskriptorbereich die maximale Länge der Benutzervariable gleich dem Wert des Deskriptorfelds LENGTH sein. Bei der Übertragung des Werts vom Deskriptorbereich in die Benutzervariable muss die maximale Länge der Benutzervariable mindestens so groß sein wie der Wert des Deskriptorfelds LENGTH.

Numerische Werte

Bei SQL-Datentyp NUMERIC oder DECIMAL muss die Gesamtstellenzahl der Benutzervariable gleich dem Wert des Deskriptorfelds PRECISION und die Nachkommastellenzahl gleich dem Wert des Deskriptorfelds SCALE sein.

Zeitwerte

Der SQL-Datentyp der Benutzervariable muss mit dem Datentyp im Deskriptorfeld DATETIME_INTERVAL_CODE übereinstimmen.
Bei den SQL-Datentypen TIME und TIMESTAMP muss das Deskriptorfeld PRECISION den Wert 3 enthalten.

Empfohlene Vorgehensweise

Um nicht für jeden möglichen Datentyp Benutzervariablen definieren zu müssen, empfiehlt sich folgende Vorgehensweise:

  1. Datentypbeschreibung für den Wert in DATA mit DESCRIBE im Deskriptorbereichseintrag ablegen

  2. Datentyp des Eintrags mit GET DESCRIPTOR abfragen

  3. Datentyp des Eintrags mit SET DESCRIPTOR an den Datentyp der Benutzervariable anpassen

  4. Wert von DATA aus der oder in die Benutzervariable übertragen.


Beispiel


Folgende dynamische Anweisung wird vorbereitet:

SELECT strasse, land, plz, ort FROM kunde WHERE firma='Siemens'

Nach DESCRIBE OUTPUT erhalten Sie mit GET DESCRIPTOR folgende Datentypbeschreibungen:


VALUE

REPETITIONS

TYPE

LENGTH

PRECISION

SCALE

entsprechender

Datentyp

1

1

1

40

0

0

CHAR(40)

2

1

1

3

0

0

CHAR(3)

3

1

2


5

0

NUMERIC(5,0)

4

1

1

40

0

0

CHAR(40)


Um Benutzervariablen, die mit dem Datentyp CHAR(100) und NUMERIC(15,5) definiert sind, für die Aufnahme der Werte zu verwenden, setzen Sie die Deskriptorbereichsfelder mit SET DESCRIPTOR auf folgende Werte:


VALUE

REPETITIONS

TYPE

LENGTH

PRECISION

SCALE

1

1

1

100



2

1

1

100



3

1

2


15

5

4

1

1

100



Jetzt können Sie die vorbereitete Anweisung mit EXECUTE ausführen. Die Werte werden im Deskriptorbereich abgelegt. STRASSE, LAND, und ORT werden durch Anhängen von Leerzeichen auf die Länge 100 gebracht. PLZ wird mit fünf führenden Nullen und fünf Nachkomma-Nullen ergänzt.
Sie können die Werte mit GET DESCRIPTOR in die entsprechenden Benutzervariablen übertragen und weiterverarbeiten.