Anweisung CREATE TYPE (Feldgruppe)
Die Anweisung CREATE TYPE (array) definiert einen Array-Typ. Die Elemente eines Array-Typs basieren auf einem der integrierten Datentypen oder einem benutzerdefinierten einzigartigen Datentyp.
Aufruf
Diese Anweisung kann in ein Anwendungsprogramm eingebettet oder mithilfe von dynamischen SQL-Anweisungen ausgeführt werden. Es handelt sich um eine ausführbare Anweisung, die nur dann dynamisch vorbereitet werden kann, wenn das DYNAMICRULES-Ausführungsverhalten für das Paket aktiviert ist (SQLSTATE 42509).
Berechtigung
- Berechtigung IMPLICIT_SCHEMA für die Datenbank, wenn der Schemaname des Array-Typs nicht auf ein vorhandenes Schema verweist
- Zugriffsrecht CREATEIN für das Schema, wenn der Schemaname des Feldgruppentyps auf ein vorhandenes Schema verweist
- SCHEMAADM-Berechtigung für das Schema, wenn der Schemaname des Feldgruppentyps auf ein vorhandenes Schema verweist
- Berechtigung DBADM
Syntax
Beschreibung
- OR REPLACE
- Gibt an, dass die Definition für den Datentyp ersetzt werden soll, wenn eine auf dem aktuellen Server vorhanden ist. Die vorhandene Definition wird effektiv gelöscht, bevor die neue Definition im Katalog ersetzt wird, mit der Ausnahme, dass Funktionen und Methoden ungültig gemacht und nicht gelöscht werden, wenn Parameter oder ein Rückgabewert mit dem zu ersetzenden Datentyp definiert sind. Die vorhandene Definition darf kein strukturierter Typ sein (SQLSTATE 42809). Diese Option wird ignoriert, wenn auf dem aktuellen Server keine Definition für den Datentyp vorhanden ist.
- typname
- Benennt den Typ. Der Name, einschließlich des impliziten oder expliziten Qualifikationsmerkmals, darf keinen anderen (integrierten oder benutzerdefinierten) Typ angeben, der bereits auf dem aktuellen Server vorhanden ist. Der nicht qualifizierte Name darf nicht mit dem Namen eines integrierten Datentyps oder VARBINARY identisch sein (SQLSTATE 42918).
Eine Reihe von Namen, die als Schlüsselwörter in Prädikaten verwendet werden, sind für die Verwendung durch das System reserviert und können nicht als typname (SQLSTATE 42939) verwendet werden. Die Namen sind SOME, ANY, ALL, NOT, AND, OR, BETWEEN, NULL, LIKE, EXISTS, IN, UNIQUE, OVERLAPS, SIMILAR, MATCH und die Vergleichsoperatoren.
Wenn ein zweiteiliger typname angegeben wird, darf der Schemaname nicht mit den Zeichen 'SYS' beginnen (SQLSTATE-Wert 42939).
- datentyp
- Gibt den Datentyp der Array-Elemente an.
- integrierter Typ
- Gibt einen integrierten Datentyp an Eine Beschreibung der integrierten Datentypen finden Sie unter "CREATE TABLE". Integrierte Typen umfassen die Datentypen, die in
CREATE TABLE
beschrieben werden, mit Ausnahme der -Referenz SYSPROC.DB2SECURITYLABEL, XML oder benutzerdefinierte Typen (SQLSTATE 429C2). - zeilentypname
- Gibt den Namen eines benutzerdefinierten Zeilentyps an. Wenn ein zeilentypname ohne Schemanamen angegeben wird, wird der zeilentypname aufgelöst, indem die Schemata im SQL-Pfad durchsucht werden. Zeilentypen können als Elemente in anderen Arraytypen mit einer maximalen Verschachtelungsebene von 16 verschachtelt werden.
- array-typname
- Gibt einen Arraytyp an Wenn ein array-type-name ohne einen Schemanamen angegeben wird, wird der array-type-name aufgelöst, indem die Schemata im SQL-Pfad durchsucht werden. Arraytypen können als Elemente in anderen Arraytypen mit einer maximalen Verschachtelungsebene von 16 verschachtelt werden.
- verankerte Datentypen
- Gibt ein anderes Objekt an, mit dem der Datentyp bestimmt wird. Der Datentyp des Ankerobjekts wird durch dieselben Einschränkungen gebunden, die gelten, wenn der Datentyp direkt oder im Fall einer Zeile für die Erstellung eines Zeilentyps angegeben wird.
- ANKERDATENTYP ZU
- Gibt an, dass ein verankerte Datentyp zur Angabe des Datentyps verwendet wird.
- Variablenname
- Gibt eine globale Variable an Der Datentyp der globalen Variablen wird als Datentyp für die Array-Elemente verwendet.
- table-name.column-name
- Gibt einen Spaltennamen einer vorhandenen Tabelle oder Sicht an. Der Datentyp der Spalte wird als Datentyp für die Array-Elemente verwendet.
- ROW OF tabellenname oder sichtname
- Gibt eine Zeile mit Feldern mit Namen und Datentypen an, die auf den Spaltennamen und Spaltendatentypen der durch tabellenname angegebenen Tabelle oder der durch sichtnameangegebenen Sicht basieren.Der Datentyp der Array-Elemente ist ein nicht benannter Zeilentyp.
- ROW OF cursor-variablenname
- Gibt eine Zeile von Feldern mit Namen und Datentypen an, die auf den Feldnamen und Felddatentypen der Cursorvariablen basieren, die durch cursor-variable-nameangegeben wird. Die angegebene Cursorvariable muss eines der folgenden Elemente sein (SQLSTATE 428HS):
- Eine globale Variable mit einem stark typisierten Cursordatentyp
- Eine globale Variable mit einem schwach typisierten Cursordatentyp, der mit einer Klausel CONSTANT erstellt oder deklariert wurde, die eine select-anweisung angibt, in der alle Ergebnisspalten benannt sind.
- verankerte-nicht-zeilendatentyp
- Gibt ein anderes Objekt an, mit dem der Datentyp bestimmt wird. Der Datentyp des Ankerobjekts wird durch dieselben Einschränkungen gebunden, die gelten, wenn der Datentyp direkt angegeben wird.
- ANKERDATENTYP ZU
- Gibt an, dass ein verankerte Datentyp zur Angabe des Datentyps verwendet wird.
- Variablenname
- Gibt eine globale Variable mit dem Datentyp INTEGER oder VARCHAR an. Der Datentyp der globalen Variablen wird als Datentyp für den Array-Index verwendet.
- table-name.column-name
- Gibt einen Spaltennamen einer vorhandenen Tabelle oder Sicht mit einem Datentyp an, der ein INTEGER -oder VARCHAR-Datentyp ist. Der Datentyp der Spalte wird als Datentyp für den Array-Index verwendet.
- ARRAY [ganzzahl-konstante]
- Gibt an, dass der Typ ein Array mit einer maximalen Kardinalität von integer-constantist. Der Wert muss eine positive ganze Zahl (ungleich null) und kleiner als der größte positive ganzzahlige Wert (SQLSTATE 42820) sein. Der Standardwert ist der größte positive ganzzahlige Wert (2 147 483 647). Die Kardinalität eines Array-Werts wird durch die höchste Elementposition bestimmt, die dem Array-Wert zugeordnet ist.
Die maximale Kardinalität eines Arrays auf einem bestimmten System wird durch die Gesamtgröße des für Datenbankanwendungen verfügbaren Speichers begrenzt. Obwohl Arrays mit großen Kardinalitäten erstellt werden können, sind möglicherweise nicht alle Elemente für die Verwendung verfügbar.
- ARRAY [data-type2]
- Gibt an, dass der Typ eine assoziative Feldgruppe ist, die mit Werten des Datentyps data-type2indexiert wird. Der Datentyp muss entweder der Datentyp INTEGER oder VARCHAR sein (SQLSTATE 429C2). Die beim Zuordnen eines Array-Elements als Index angegebenen Werte müssen einem Wert von data-type2zugeordnet werden können. Die Kardinalität eines Array-Werts wird durch die Anzahl der eindeutigen Indexwerte bestimmt, die beim Zuweisen von Array-Elementen verwendet werden.
Regeln
- Verwendung von verankerten Datentypen Ein verankerte Datentyp kann nicht auf die folgenden Objekte verweisen (SQLSTATE 428HS): einen Kurznamen, eine typisierte Tabelle, eine typisierte Sicht, eine Statistiksicht, die einem ausdrucksbasierten Index zugeordnet ist, eine deklarierte temporäre Tabelle, eine Zeilendefinition, die einem schwach typisierten Cursor zugeordnet ist, ein Objekt mit einer Codepage oder einer Sortierfolge, die sich von der Datenbankcodepage oder der Datenbanksortierfolge unterscheidet.
Hinweise
- Verwendung des Array-Typs Ein Array-Typ kann nur als Datentyp verwendet werden:
- Eine lokale Variable in einer zusammengesetzten SQL-Anweisung (kompiliert)
- Parameter einer SQL-Routine
- Parameter einer Java™ -Prozedur (nur nicht verschachtelte normale Arrays)
- Der Rückgabetyp einer SQL-Funktion
- Eine globale Variable
- Eine Variable oder ein Parameter definiert mit einem Arraytyp kann nur in zusammengesetzten SQL-Anweisungen (kompiliert) verwendet werden.
Beispiele
CREATE TYPE PHONENUMBERS AS DECIMAL(10,0)
ARRAY[50] CREATE TYPE GENERIC.NUMBERS AS DECFLOAT(34)
ARRAY[] CREATE TYPE PERSONALPHONENUMBERS AS DECIMAL(16, 0) ARRAY[VARCHAR(8)] CREATE TYPE CAPITALSARRAY AS VARCHAR(30) ARRAY[VARCHAR(20)] CREATE TYPE PRODUCTS AS VARCHAR(40) ARRAY[VARCHAR(12)]