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 » API der externen Funktionen in SQL Anywhere

 

Verarbeitung von Datentypen

Datentypen

Die folgenden Datentypen können an eine externe Bibliothek übergeben werden:

SQL-Datentyp sqldef.h C-Typ
CHAR DT_FIXCHAR Zeichendaten mit einer definierten Länge
VARCHAR DT_VARCHAR Zeichendaten mit einer definierten Länge
LONG VARCHAR, TEXT DT_LONGVARCHAR Zeichendaten mit einer definierten Länge
UNIQUEIDENTIFIERSTR DT_FIXCHAR Zeichendaten mit einer definierten Länge
XML DT_LONGVARCHAR Zeichendaten mit einer definierten Länge
NCHAR DT_NFIXCHAR UTF-8-Zeichendaten mit einer definierten Länge
NVARCHAR DT_NVARCHAR UTF-8-Zeichendaten mit einer definierten Länge
LONG NVARCHAR, NTEXT DT_LONGNVARCHAR UTF-8-Zeichendaten mit einer definierten Länge
UNIQUEIDENTIFIER DT_BINARY Binärdaten mit einer Länge von 16 Byte
BINARY DT_BINARY Binärdaten mit einer definierten Länge
VARBINARY DT_BINARY Binärdaten mit einer definierten Länge
LONG BINARY DT_LONGBINARY Binärdaten mit einer definierten Länge
TINYINT DT_TINYINT 1-Byte-Ganzzahl
[ UNSIGNED ] SMALLINT DT_SMALLINT, DT_UNSMALLINT [Vorzeichenlose] 2-Byte-Ganzzahl
[ UNSIGNED ] INT DT_INT, DT_UNSINT [Vorzeichenlose] 4-Byte-Ganzzahl
[ UNSIGNED ] BIGINT DT_BIGINT, DT_UNSBIGINT [Vorzeichenlose] 8-Byte-Ganzzahl
REAL, FLOAT(1-24) DT_FLOAT Gleitkommazahl mit einfacher Präzision
DOUBLE, FLOAT(25-53) DT_DOUBLE Gleitkommazahl mit doppelter Präzision

Es ist nicht möglich, die date- oder time-Datentypen oder die Datentypen DECIMAL oder NUMERIC (einschließlich der money-Datentypen) zu verwenden.

Um Werte für die Parameter INOUT oder OUT zu liefern, verwenden Sie die API-Funktion set_value. Um IN- und INOUT-Parameter zu lesen, verwenden Sie die API-Funktion get_value.

Parameter-Datentypen ermitteln

Nach einem Aufruf von get_value kann mit der Struktur an_extfn_value der Datentyp des Parameters abgefragt werden. Das folgende Codefragment zeigt ein Beispiel zur Identifizierung des Parameterdatentyps.

an_extfn_value      arg;
a_sql_data_type     data_type;

extapi->get_value( arg_handle, 1, &arg );
data_type = arg.type & DT_TYPES;
switch( data_type ) 
{
case DT_FIXCHAR:
case DT_VARCHAR:
case DT_LONGVARCHAR:
    break;
default:
    return;
}

Weitere Hinweise zu Datentypen finden Sie unter Hostvariable verwenden.

UTF-8-Datentypen

Die UTF-8-Datentypen wie NCHAR, NVARCHAR, LONG NVARCHAR und NTEXT werden als UTF-8-kodierte Zeichenfolgen übergeben. Mit einer Funktion wie der Windows-Funktion MultiByteToWideChar kann eine UTF-8-Zeichenfolge in eine breite (Unicode-) Zeichenfolge konvertiert werden.

NULL übergeben

Sie können NULL als gültigen Wert für alle Argumente übergeben. Funktionen in externen Bibliotheken können NULL als Rückgabewert für jeden Datentyp übergeben.

Rückgabewerte

Um einen Rückgabewert in einer externen Funktion festzulegen, rufen Sie die Funktion set_value mit diesem arg_num-Parameterwert 0 auf. Wenn set_value nicht mit dem Wert für arg_num aufgerufen wird, ist das Funktionsergebnis NULL.

Auch der Datentyp eines Rückgabewerts eines Aufrufs einer gespeicherten Funktion sollte unbedingt festgelegt werden. Das folgende Codefragment zeigt, wie Sie den Rückgabe-Datentyp festlegen.

an_extfn_value      retval;

retval.type = DT_LONGVARCHAR;
retval.data = result;
retval.piece_len = retval.len.total_len = (a_sql_uint32) strlen( result );
extapi->set_value( arg_handle, 0, &retval, 0 );