Mit SET DESCRIPTOR kann ein SQL-Deskriptorbereich geändert werden. Sie können den Wert des Deskriptorbereichsfelds COUNT ändern oder den Inhalt eines Eintrags.
Aufbau und Verwendung des Deskriptorbereichs sind im Abschnitt „Deskriptorbereich" beschrieben.
Der SQL-Deskriptorbereich muss vorher angelegt worden sein.
SET DESCRIPTOR GLOBAL
deskriptor
{ COUNT=
anzahl |
VALUE
eintragsnummer feldbezeichner =
feldinhalt [,
feldbezeichner =
feldinhalt ]... }
anzahl ::= {
ganzzahl |
benutzervariable }
eintragsnummer ::= {
ganzzahl |
benutzervariable }
feldbezeichner ::=
{
REPETITIONS |
TYPE |
DATETIME_INTERVAL_CODE |
PRECISION |
SCALE |
LENGTH |
INDICATOR |
DATA
}
feldinhalt ::= {
benutzervariable | {
anzzahl |
benutzervariable }
deskriptor
Name des SQL-Deskriptorbereichs, dessen Einträge geändert werden sollen.
Sie können die Einträge dieses Deskriptorbereichs nicht ändern, wenn ein geöffneter Cursor mit eingeschaltetem Schubmodus existiert (siehe Abschnitt „Pragma PREFETCH"), und für diesen Cursor eine Anweisung FETCH NEXT... ausgeführt wurde, deren INTO-Klausel den Namen desselben SQL-Deskriptorbereichs enthält.
COUNT=anzahl
Das Deskriptorbereichsfeld COUNT wird auf den Wert von anzahl gesetzt.
anzahl
Für anzahl geben Sie eine Ganzzahl oder eine Benutzervariable vom SQL-Datentyp SMALLINT an, mit:
0 <= anzahl <= festgelegte Maximalanzahl von Deskriptorbereichseinträgen
Einträge, deren Eintragsnummer gößer als anzahl ist, werden auf undefiniert gesetzt.
VALUE-Klausel
Die angegebenen Felder des Eintrags mit der Eintragsnummer eintragsnummer werden auf die angegebenen Feldinhalte gesetzt.
Sind mehrere Felder angegeben, werden sie unabhängig von der Reihenfolge in der SET DESCRIPTOR-Anweisung in der folgenden Reihenfolge gesetzt:
REPETITIONS
TYPE
DATETIME_INTERVAL_CODE
PRECISION
SCALE
LENGTH
INDICATOR
DATA
eintragsnummer
Nummer des Eintrags, der geändert werden soll.
Die Einträge im Deskriptorbereich sind beginnend mit 1 durchnummeriert.
Für eintragsnummer können Sie eine Ganzzahl oder eine Benutzervariable vom SQL-Datentyp SMALLINT angeben, mit:
1 <= eintragsnummer <= COUNT und <= festgelegte Maximalanzahl von Einträgen
feldbezeichner
Feld des Eintrags eintragsnummer, das geändert werden soll. Derselbe Feldbezeichner darf höchstens einmal angegeben sein.
feldinhalt
Neuer Wert für das Feld feldbezeichner.
Ist feldbezeichner DATA, müssen Sie für feldinhalt eine Benutzervariable angeben. Ansonsten können Sie für feldinhalt eine Ganzzahl oder eine Benutzervariable vom SQL-Datentyp SMALLINT angeben. Außer für die Felder DATA und INDICATOR dürfen keine Aggregate bzw. Vektoren angegeben werden.
REPETITIONS
Der in feldinhalt angegebene Wert muss >= 1 und <= 255 sein.
Bei den Einträgen mit Eintragsnummer
eintragsnummer, eintragsnummer+1, ..., eintragsnummer+REPETITIONS-1,
werden die Felder TYPE, DATETIME_INTERVAL_CODE, PRECISION, SCALE und LENGTH mit jeweils denselben Werten gesetzt, vorausgesetzt die Eintragsnummern sind <= COUNT und <= festgelegte Maximalanzahl von Einträgen.
Beim Eintrag eintragsnummer wird REPETITIONS auf den Wert von feldinhalt gesetzt. Bei den Einträgen mit Eintragsnummer
eintragsnummer+1,...,eintragsnummer+REPETITIONS-1,
wird REPETITIONS auf 1 gesetzt.
Die restlichen Felder werden bei allen betroffenen Einträgen gesetzt wie angegeben oder werden undefiniert.
REPETITIONS nicht angegeben:
Beim Eintrag eintragsnummer wird REPETITIONS auf den Wert 1 gesetzt.
TYPE
Setzt das Feld TYPE. Zusätzlich wird das Feld DATETIME_INTERVAL_CODE desselben Eintrags auf undefiniert gesetzt. Abhängig vom Wert für TYPE werden außerdem die Felder PRECISION, SCALE und LENGTH desselben Eintrags auf Standardwerte gesetzt:
SQL-Datentyp | TYPE | PRECISION | SCALE | LENGTH |
NVARCHAR | -42 | 1 | ||
NCHAR | -31 | 1 | ||
CHAR | 1 | 1 | ||
NUMERIC | 2 | 1 | 0 | |
DECIMAL | 3 | 1 | 0 | |
INTEGER | 4 | |||
SMALLINT | 5 | |||
FLOAT | 6 | 1 | ||
REAL | 7 | |||
DOUBLE PRECISION | 8 | |||
DATE, TIME, TIMESTAMP | 9 | 0 | ||
VARCHAR | 12 | 1 |
Tabelle 51: TYPE-Feld eines Deskriptoreintrags setzen
Nicht angegebene Werte sind undefiniert.
Außer REPETITIONS werden alle anderen Felder dieses Eintrags undefiniert.
DATETIME_INTERVAL_CODE
Abhängig vom Wert für DATETIME_INTERVAL_CODE wird zusätzlich der Wert für PRECISION gesetzt:
DATETIME_INTERVAL_CODE | PRECISION |
1 | 0 |
2 | 0 |
3 | 6 |
Tabelle 52: DATETIME_INTERVAL_CODE-Feld eines Deskriptoreintrags setzen
Außer REPETITIONS und TYPE werden alle anderen Felder dieses Eintrags undefiniert.
PRECISION, SCALE, LENGTH
Die Felder werden in dieser Reihenfolge gesetzt.
Falls zuvor das Feld TYPE gesetzt wurde und PRECISION, SCALE oder LENGTH Standardwerte enthalten, werden diese überschrieben.
Der Inhalt des Felds DATA dieses Eintrags wird undefiniert.
INDICATOR
Ist ein Vektor mit mehreren Elementen angegeben, werden auch entsprechend viele INDICATOR-Felder der folgenden Einträge gesetzt, vorausgesetzt die Eintragsnummern dieser Einträge sind <= COUNT und <= festgelegte Maximalanzahl von Einträgen.
DATA
Der Datentyp der Benutzervariablen muss mit dem Datentyp übereinstimmen, der durch die Felder TYPE, LENGTH, PRECISION, SCALE und DATETIME_INTERVAL_CODE desselben Eintrags festgelegt ist (siehe Abschnitt „Werte zwischen Benutzervariablen und Deskriptorbereich übertragen"). Ist die angegebene Benutzervariable ein Vektor mit mehreren Elementen, dann müssen auch bei genau so vielen nachfolgenden Einträgen die Felder TYPE, LENGTH, PRECISION, SCALE und DATETIME_INTERVAL_CODE diesen Datentyp angeben und die Eintragsnummern dieser Einträge <= COUNT und <= festgelegte Maximalanzahl von Einträgen sein.
Wenn DATA und INDICATOR angegeben sind, müssen beide einfach oder Vektoren mit gleicher Anzahl von Elementen sein.
Das DATA-Feld wird gesetzt, wenn das zugehörige INDICATOR-Feld >= 0 ist. Ansonsten wird der Inhalt des DATA-Feld undefiniert.
Beispiele
Typ, Anzahl der Dezimalstellen und Anzahl der Nachkommastellen im 2. Eintrag des SQL-Deskriptorbereichs :DEMO_DESC werden verändert:
SET DESCRIPTOR GLOBAL :demo_desc
VALUE 2 TYPE = 2, PRECISIONS = 7, SCALE = 2
Die Anzahl der Einträge im SQL-Deskriptorbereich DEMO_DESC wird auf null gesetzt:
SET DESCRIPTOR GLOBAL :demo_desc COUNT = 0
Siehe auch
ALLOCATE DESCRIPTOR, DEALLOCATE DESCRIPTOR, DESCRIBE, GET DESCRIPTOR