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

SAP Sybase SQL Anywhere 16.0 (Deutsch) » SQL Anywhere Server - Programmierung » 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 darstellt.

  • 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 {
     a_sql_ulen 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 {
     a_sql_ulen 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.

  • 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.

  • 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 abrufen, setzt der Datenbankserver das Längenfeld.
    typedef struct BINARY {
     a_sql_ulen 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.

  • 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. Das Abrufen von Daten in diese Struktur vereinfacht die Datenbearbeitung für Sie. Felder vom Typ DATE, TIME und TIMESTAMP können auch mit einem beliebigen Zeichendatentyp abgerufen und aktualisiert werden.

    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.

  • 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 Variablen dynamisch zuzuweisen oder andere Variablen umzuwandeln ("Typecasting").

 Datenbank-Datentypen DATE und TIME
 Siehe auch