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 » Prototypen externer Funktionen

 

an_extfn_value-Struktur

Wird verwendet, um auf Parameterdaten von der aufrufenden SQL-Umgebung aus zuzugreifen.

Syntax
typedef struct an_extfn_value {
    void *           data;
    a_sql_uint32     piece_len;
    union {
        a_sql_uint32 total_len;
        a_sql_uint32 remain_len;
    } len;
    a_sql_data_type  type;
} an_extfn_value;
Eigenschaften
  • data   Ein Zeiger auf die Daten für diesen Parameter.

  • piece_len   Die Länge dieses Segments des Parameters. Dies ist kleiner oder gleich total_len.

  • total_len   Die Gesamtlänge des Parameters. Bei Zeichenfolgen stellt dies die Länge der Zeichenfolge dar, ohne das Nullabschlusszeichen einzubeziehen. Diese Eigenschaft wird nach einem Aufruf der get_value-Callback-Funktion gesetzt. Diese Eigenschaft ist nach einem Aufruf der get_piece-Callback-Funktion nicht mehr gültig.

  • remain_len   Wenn der Parameter in Segmenten übernommen wird, ist dies die Länge des Teils, der noch nicht übernommen wurde. Diese Eigenschaft wird nach jedem Aufruf der get_piece-Callback-Funktion gesetzt.

  • type   Zeigt den Typ des Parameters an. Dies ist einer der Embedded SQL-Datentypen, wie z.B. DT_INT, DT_FIXCHAR oder DT_BINARY. Weitere Hinweise finden Sie unter Datentypen in Embedded SQL.

Bemerkungen

Angenommen, die Schnittstelle Ihrer externen Funktion wurde unter Verwendung der folgenden Anweisung geschrieben.

CREATE FUNCTION mystring( IN instr LONG VARCHAR )
RETURNS LONG VARCHAR
EXTERNAL NAME 'mystring@c:\\project\\mystring.dll';

Das folgende Codefragment zeigt, wie Sie auf die Eigenschaften für Objekte des Typs an_extfn_value zugreifen. In dem Beispiel wird erwartet, dass der Eingabeparameter 1 (instr) für diese Funktion (mystring) eine SQL LONGVARCHAR-Zeichenfolge ist.

an_extfn_value      arg;

result = extapi->get_value( arg_handle, 1, &arg );
if( result == 0 || arg.data == NULL )
{
    return; // no parameter or parameter is NULL
}

if( arg.type != DT_LONGVARCHAR )
{
    return; // unexpected type of parameter
}

cmd = (char *)malloc( arg.len.total_len + 1 );
offset = 0;
for( ; result != 0; )
{
     if( arg.data == NULL ) break;
     memcpy( &cmd[offset], arg.data, arg.piece_len );
     offset += arg.piece_len;
     cmd[offset] = '\0';
     if( arg.piece_len == 0 ) break;
     result = extapi->get_piece( arg_handle, 1, &arg, offset );
}
Siehe auch