Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (Deutsch) » SQL Anywhere Server - Programmierung » SQL Anywhere Datenzugriff-APIs » SQL Anywhere Embedded SQL

 

Datentypen in Embedded SQL

Um Informationen zwischen einem Programm und dem Datenbankserver austauschen zu können, müssen alle Datenelemente einen Datentyp haben. Die Konstanten für Embedded SQL haben alle das Präfix DT_ und befinden sich in der Header-Datei sqldef.h. Eine Hostvariable kann jeden der unterstützten Datentypen haben. Sie können diese Datentypen auch in einer SQLDA-Struktur verwenden, um Daten mit der Datenbank auszutauschen.

Sie können mit den DECL_-Makros in sqlca.h Variablen dieser Datentypen definieren. Beispielsweise kann mit DECL_BIGINT eine Variable mit einem BIGINT-Wert deklariert werden.

Folgende Datentypen werden von der Embedded SQL-Programmierschnittstelle unterstützt:

  • DT_BIT   8-Bit-Ganzzahl mit Vorzeichen

  • DT_SMALLINT   16-Bit-Ganzzahl mit Vorzeichen

  • DT_UNSSMALLINT   16-Bit Ganzzahl ohne Vorzeichen

  • DT_TINYINT   8-Bit-Ganzzahl mit Vorzeichen

  • DT_BIGINT   64-Bit-Ganzzahl mit Vorzeichen

  • DT_UNSBIGINT   64-Bit-Ganzzahl ohne Vorzeichen.

  • DT_INT   32-Bit-Ganzzahl mit Vorzeichen

  • DT_UNSINT   32-Bit Ganzzahl ohne Vorzeichen

  • DT_FLOAT   4-Byte-Gleitkommazahl

  • DT_DOUBLE   8-Byte-Gleitkommazahl

  • DT_DECIMAL   Gepackte Dezimalzahl (systemeigenes Format)
    typedef struct TYPE_DECIMAL {
      char array[1];
    } TYPE_DECIMAL;

  • DT_STRING   Mit NULL abgeschlossene Zeichenfolge im CHAR-Zeichensatz. Die Zeichenfolge wird mit Leerzeichen aufgefüllt, wenn bei der Initialisierung der Datenbank mit Leerzeichen aufgefüllte Zeichenfolgen verwendet werden.

  • DT_NSTRING   Mit NULL abgeschlossene Zeichenfolge im NCHAR-Zeichensatz. Die Zeichenfolge wird mit Leerzeichen aufgefüllt, wenn bei der Initialisierung der Datenbank mit Leerzeichen aufgefüllte Zeichenfolgen verwendet werden.

  • DT_DATE   Mit NULL abgeschlossene Zeichenfolge, die ein gültiges Datum repräsentiert.

  • DT_TIME   Mit NULL abgeschlossene Zeichenfolge, die eine gültige Zeitangabe repräsentiert.

  • DT_TIMESTAMP   Mit NULL abgeschlossene Zeichenfolge, die einen gültigen Zeitstempel repräsentiert.

  • DT_FIXCHAR   Zeichenfolge mit fester Länge, die mit Leerzeichen aufgefüllt wird. Im CHAR-Zeichensatz. Die maximale Länge ist 32767 (in Byte). Die Daten enden nicht mit NULL.

  • DT_NFIXCHAR   Zeichenfolge mit fester Länge, die mit Leerzeichen aufgefüllt wird. Im NCHAR-Zeichensatz. Die maximale Länge ist 32767 (in Byte). Die Daten enden nicht mit NULL.

  • DT_VARCHAR   Zeichenfolge variabler Länge, im CHAR-Zeichensatz, mit einem 2-Byte-Längenfeld. Die maximale Länge beträgt 32765 Byte. Beim Senden von Daten müssen Sie das Längenfeld festlegen. Beim Abrufen von Daten setzt der Datenbankserver das Längefeld. Die Daten werden nicht mit NULL abgeschlossen oder mit Leerzeichen aufgefüllt.
    typedef struct VARCHAR {
       unsigned short int len;
       char               array[1];
    } VARCHAR;

  • DT_NVARCHAR   Zeichenfolge variabler Länge, im NCHAR-Zeichensatz, mit einem 2-Byte-Längenfeld. Die maximale Länge beträgt 32765 Byte. Beim Senden von Daten müssen Sie das Längenfeld festlegen. Beim Abrufen von Daten setzt der Datenbankserver das Längefeld. Die Daten werden nicht mit NULL abgeschlossen oder mit Leerzeichen aufgefüllt.
    typedef struct NVARCHAR {
       unsigned short int len;
       char               array[1];
    } NVARCHAR;

  • DT_LONGVARCHAR   Lange Zeichenfolge von variabler Länge, im CHAR-Zeichensatz.
    typedef struct LONGVARCHAR {
     a_sql_uint32 array_len;  /* number of allocated bytes in array */
     a_sql_uint32 stored_len; /* number of bytes stored in array
                               * (never larger than array_len) */
     a_sql_uint32 untrunc_len;/* number of bytes in untruncated expression
                               * (may be larger than array_len) */
     char  array[1];          /* the data */
    } LONGVARCHAR, LONGNVARCHAR, LONGBINARY;

    Die LONGVARCHAR-Struktur kann mit Daten über 32767 Byte verwendet werden. Große Daten können auf einmal oder mithilfe der Anweisung GET DATA in Einzelschritten abgerufen werden. Sie können entweder auf einmal oder in Abschnitten an den Server übermittelt werden, indem sie an eine Datenbankvariable mit der SET-Anweisung angehängt werden. Die Daten werden nicht mit NULL abgeschlossen oder mit Leerzeichen aufgefüllt.

    Weitere Hinweise finden Sie unter Lange Werte senden und abfragen.

  • DT_LONGNVARCHAR   Lange Zeichenfolge von variabler Länge, im NCHAR-Zeichensatz. Der Makro definiert wie folgt eine Struktur:
    typedef struct LONGVARCHAR {
     a_sql_uint32 array_len;  /* number of allocated bytes in array */
     a_sql_uint32 stored_len; /* number of bytes stored in array
                               * (never larger than array_len) */
     a_sql_uint32 untrunc_len;/* number of bytes in untruncated expression
                               * (may be larger than array_len) */
     char  array[1];          /* the data */
    } LONGVARCHAR, LONGNVARCHAR, LONGBINARY;

    Die LONGNVARCHAR-Struktur kann mit Daten über 32767 Byte verwendet werden. Große Daten können auf einmal oder mithilfe der Anweisung GET DATA in Einzelschritten abgerufen werden. Sie können entweder auf einmal oder in Abschnitten an den Server übermittelt werden, indem sie an eine Datenbankvariable mit der SET-Anweisung angehängt werden. Die Daten werden nicht mit NULL abgeschlossen oder mit Leerzeichen aufgefüllt.

    Weitere Hinweise finden Sie unter Lange Werte senden und abfragen.

  • DT_BINARY   Binärdaten variabler Länge mit einem 2-Byte-Längenfeld. Die maximale Länge beträgt 32765 Byte. Wenn Sie dem Datenbankserver Informationen liefern, müssen Sie das Längenfeld setzen. Wenn Sie Informationen vom Datenbankserver abholen, setzt der Datenbankserver das Längenfeld.
    typedef struct BINARY {
      unsigned short int len;
      char array[1];
    } BINARY;

  • DT_LONGBINARY   Lange Binärdaten. Der Makro definiert wie folgt eine Struktur:
    typedef struct LONGVARCHAR {
     a_sql_uint32 array_len;  /* number of allocated bytes in array */
     a_sql_uint32 stored_len; /* number of bytes stored in array
                               * (never larger than array_len) */
     a_sql_uint32 untrunc_len;/* number of bytes in untruncated expression
                               * (may be larger than array_len) */
     char  array[1];          /* the data */
    } LONGVARCHAR, LONGNVARCHAR, LONGBINARY;

    Die LONGBINARY-Struktur kann mit Daten über 32767 Byte verwendet werden. Große Daten können auf einmal oder mithilfe der Anweisung GET DATA in Einzelschritten abgerufen werden. Sie können entweder auf einmal oder in Abschnitten an den Server übermittelt werden, indem sie an eine Datenbankvariable mit der SET-Anweisung angehängt werden.

    Weitere Hinweise finden Sie unter Lange Werte senden und abfragen.

  • DT_TIMESTAMP_STRUCT   SQLDATETIME-Struktur mit Feldern für jeden Teil eines Zeitstempels
    typedef struct sqldatetime {
     unsigned short year; /* for example 1999 */
     unsigned char month; /* 0-11 */
     unsigned char day_of_week; /* 0-6 0=Sunday */
     unsigned short day_of_year; /* 0-365 */
     unsigned char day; /* 1-31 */
     unsigned char hour; /* 0-23 */
     unsigned char minute; /* 0-59 */
     unsigned char second; /* 0-59 */
     unsigned long microsecond; /* 0-999999 */
    } SQLDATETIME;

    Die Struktur SQLDATETIME kann verwendet werden, um Felder vom Typ DATE, TIME und TIMESTAMP abzurufen (oder einen beliebigen Datentyp, der in einen dieser Datentypen konvertiert werden kann). Anwendungen haben häufig eigene Formate und einen eigenen Programmcode für Zeit und Datum. Der Abruf von Daten in dieser Struktur, erleichtert dem Programmierer den Umgang damit. Beachten Sie, dass Felder vom Typ DATE, TIME und TIMESTAMP auch mit einem beliebigen Zeichendatentyp abgerufen und aktualisiert werden können.

    Wenn Sie eine SQLDATETIME-Struktur verwenden, um ein Datum, eine Zeit oder einen Zeitstempel in die Datenbank einzugeben, werden die Felder day_of_year und day_of_week ignoriert.

    Weitere Hinweise finden Sie unter:

  • DT_VARIABLE   Mit NULL abgeschlossene Zeichenfolge. Die Zeichenfolge muss der Name einer SQL-Variablen sein, deren Wert vom Datenbankserver benutzt wird. Dieser Datentyp wird ausschließlich benutzt, um Daten an den Datenbankserver zu liefern. Er kann nicht benutzt werden, um Daten vom Datenbankserver abzurufen.

Die Strukturen sind in der Datei sqlca.h festgelegt. Die Datentypen VARCHAR, NVARCHAR, BINARY, DECIMAL und LONG sind für die Deklaration von Hostvariablen nicht geeignet, weil sie ein Ein-Zeichen-Array enthalten. Sie sind allerdings nützlich, um Variable dynamisch zuzuweisen oder andere Variable umzuwandeln ("Typecasting").

Datenbank-Datentypen DATE und TIME

Die Embedded SQL-Schnittstelle bietet keine Datentypen, die den verschiedenen Datenbank-Datentypen von DATE und TIME entsprechen. Diese Datenbank-Datentypen werden alle entweder mit der Struktur SQLDATETIME oder mit Zeichenfolgen abgerufen und aktualisiert.

Weitere Hinweise finden Sie unter GET DATA-Anweisung [ESQL] und SET-Anweisung.