Wird verwendet, um auf Parameterdaten von der aufrufenden SQL-Umgebung aus zuzugreifen.
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; |
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.
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 ); } |
Kommentieren Sie diese Seite in DocCommentXchange. Senden Sie uns Feedback über diese Seite via E-Mail. |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |