Rufen Sie einen Wert vom Typ LONG VARCHAR, LONG NVARCHAR oder LONG BINARY mit Dynamic SQL ab.
Voraussetzungen
Es gibt keine Voraussetzungen für diese Aufgabe.
Stellen Sie das sqltype-Feld auf DT_LONGVARCHAR, DT_LONGNVARCHAR oder DT_LONGBINARY ein, wie erforderlich.
Setzen Sie das Feld sqldata so, dass es auf die Hostvariablenstruktur LONGVARCHAR, LONGNVARCHAR oder LONGBINARY zeigt.
Sie können den Makro LONGVARCHARSIZE(n ), LONGNVARCHARSIZE(n) oder LONGBINARYSIZE(n) verwenden, um die Gesamtanzahl der Byte zu bestimmen, die zugeordnet werden müssen, um n Byte von Daten im Array-Feld aufzunehmen.
Stellen Sie das array_len-Feld der Hostvariablenstruktur auf die Anzahl der Bytes ein, die dem Array-Feld zugeordnet sind.
Rufen Sie die Daten mit FETCH, GET DATA oder EXECUTE INTO ab. SQL Anywhere legt die folgenden Informationen fest:
* sqlind Dieses sqlda-Feld ist negativ, wenn der Wert NULL ist, oder 0, wenn es keine Kürzung gibt, beziehungsweise die positive ungekürzte Länge in Byte bis zu einem Höchstwert von 32767.
stored_len Die Anzahl der im Array gespeicherten Byte. Immer kleiner oder gleich array_len und untrunc_len.
untrunc_len Die Anzahl der Byte, die im Array gespeichert würden, wenn der Wert nicht gekürzt würde. Immer größer oder gleich stored_len. Bei Kürzung ist dieser Wert größer als array_len.
Beispiel
Das folgende Codefragment illustriert den Mechanismus, der zum Abrufen von LONG VARCHAR-Daten mittels dynamischem Embedded SQL verwendet wird. Er dient nur zur Illustration und ist nicht für eine tatsächliche Verwendung bestimmt.
#define DATA_LEN 128000 void get_test_var() { LONGVARCHAR *longptr; SQLDA *sqlda; SQLVAR *sqlvar; sqlda = alloc_sqlda( 1 ); longptr = (LONGVARCHAR *)malloc( LONGVARCHARSIZE( DATA_LEN ) ); if( sqlda == NULL || longptr == NULL ) { fatal_error( "Allocation failed" ); } // init longptr for receiving data longptr->array_len = DATA_LEN; // init sqlda for receiving data // (sqllen is unused with DT_LONG types) sqlda->sqld = 1; // using 1 sqlvar sqlvar = &sqlda->sqlvar[0]; sqlvar->sqltype = DT_LONGVARCHAR; sqlvar->sqldata = longptr; printf( "fetching test_var\n" ); EXEC SQL PREPARE select_stmt FROM 'SELECT test_var'; EXEC SQL EXECUTE select_stmt INTO DESCRIPTOR sqlda; EXEC SQL DROP STATEMENT select_stmt; printf( "stored_len: %d, untrunc_len: %d, " "1st char: %c, last char: %c\n", longptr->stored_len, longptr->untrunc_len, longptr->array[0], longptr->array[DATA_LEN - 1] ); free_sqlda( sqlda ); free( longptr ); } |
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2013, SAP AG oder ein SAP-Konzernunternehmen. - SAP Sybase SQL Anywhere 16.0 |