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

Die Berechtigungen, die von der Berechtigungs-ID der Anweisung gehalten werden, müssen mindestens die folgenden Berechtigungen umfassen:
  • 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

Read syntax diagramSkip visual syntax diagramCREATE OR REPLACE TYPEtype-nameASdata-type ARRAY[2147483647integer-constantdata-type2]
data-type
Read syntax diagramSkip visual syntax diagrambuilt-in-typeanchored-data-typerow-type-namearray-type-name
data-type2
Read syntax diagramSkip visual syntax diagram INTEGERINTVARCHARCHARACTERCHARVARYING(integerOCTETSCODEUNITS32)anchored-non-row-data-type
anchored-data-type
Read syntax diagramSkip visual syntax diagramANCHORDATA TYPE TO variable-nametable-name.column-nameROWOFtable-nameview-namecursor-variable-name
built-in-type
Read syntax diagramSkip visual syntax diagramSMALLINTINTEGERINTBIGINTDECIMALDECNUMERICNUM(5,0)( integer,0, integer)FLOAT(53)( integer)REALDOUBLEPRECISIONCHARACTERCHAR(1)( integerOCTETSCODEUNITS32)VARCHARCHARACTERCHARVARYING( integerOCTETSCODEUNITS32)FOR BIT DATA1CLOBCHARACTERCHARLARGE OBJECT(1M)( integerKMGOCTETSCODEUNITS32)GRAPHIC(1)( integerCODEUNITS16CODEUNITS32)VARGRAPHIC( integerCODEUNITS16CODEUNITS32)DBCLOB(1M)( integerKMGCODEUNITS16CODEUNITS32)NCHARNATIONALCHARCHARACTER(1)( integer)NVARCHARNCHAR VARYINGNATIONALCHARCHARACTERVARYING( integer)NCLOBNCHAR LARGE OBJECTNATIONAL CHARACTER LARGE OBJECT(1M)( integerKMG)BINARY(1)( integer)VARBINARYBINARY VARYING(integer)BLOBBINARY LARGE OBJECT(1M)( integerKMG)DATETIMETIMESTAMP(6)( integer)BOOLEAN
anchored-non-row-data-type
Read syntax diagramSkip visual syntax diagramANCHORDATA TYPETO variable-nametable-name.column-name
Notes:
  • 1 The FOR BIT DATA clause can be specified in any order with the other column constraints that follow. The FOR BIT DATA clause cannot be specified with string units CODEUNITS32 (SQLSTATE 42613).

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 TABLEbeschrieben 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.
Wenn der Cursortyp der Cursorvariablen nicht stark typisiert ist und einen benannten Zeilentypverwendet, ist der Datentyp der Array-Elemente ein nicht benannter Zeilentyp .
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

Beispiel 1: Erstellen Sie einen Arraytyp mit dem Namen PHONENUMBERS mit maximal 50 Elementen des Datentyps DECIMAL (10, 0).
   CREATE TYPE PHONENUMBERS AS DECIMAL(10,0)
     ARRAY[50]
Beispiel 2: Erstellen Sie einen Arraytyp mit dem Namen NUMBERS mit der Standardanzahl von Elementen im Schema GENERIC.
   CREATE TYPE GENERIC.NUMBERS AS DECFLOAT(34)
     ARRAY[]
Beispiel 3: Erstellen Sie ein assoziativ -Array namens PERSÖNLICHE TELEFONNUMMERN mit Elementen, die DECIMAL (16, 0) sind und durch Zeichenfolgen wie 'Home', 'Work' oder 'Mom'indexiert sind.
   CREATE TYPE PERSONALPHONENUMBERS AS DECIMAL(16, 0) ARRAY[VARCHAR(8)]
Beispiel 4: Erstellen Sie einen assoziativen Array-Typ, bei dem die Indizes Namen für das Bundesland, das Gebiet oder das Land und die Elemente Großstädte sind:
   CREATE TYPE CAPITALSARRAY AS VARCHAR(30) ARRAY[VARCHAR(20)]
Beispiel 5: Erstellen eines assoziativen Array-Typs für Produktbeschreibungen mit bis zu 40 Zeichen, wobei die Indizes die Produktnummern sind, die maximal 12 Zeichen lang sind:
   CREATE TYPE PRODUCTS AS VARCHAR(40) ARRAY[VARCHAR(12)]