Der C/C++-Precompiler unterstützt die Verwendung von UNICODE-Daten in SAP DB-Anwendungsprogrammen. Als Kodierungsformat ist dabei ausschließlich UCS2 oder UTF-16 ohne Surrogate – jeweils in der plattformspezifischen Byteanordnung – zulässig. Sämtliche Ausgaben in der Trace-Datei erfolgen in UTF 8.
UNICODE-Zeichenketten können Sie nur in Host-Variablen an folgenden Stellen verwenden:
Sie können UNICODE-Anwendungsprogramme nicht mit ASCII-Datenbankinstanzen verwenden.
Sie haben eine UNICODE-fähige Datenbankinstanz installiert.
Nach dem Ausführen der CONNECT-Anweisung erkennt der Precompiler automatisch, ob er mit einer UNICODE-fähigen Datenbankinstanz verbunden ist.
· Verwenden Sie für Ihre UNICODE-Zeichenketten geeignete Host-Variablen mit den entsprechenden vordefinierten UNICODE-Datentypen.
· Wenn der Benutzername oder das Kennwort UNICODE-Zeichen enthält, dann verwenden Sie hierfür ebenfalls UNICODE-Host-Variablen.
· Wenn Host-Variablen komplette SQL-Anweisungen enthalten, dann werden diese Anweisungen abhängig vom Typ der Host-Variablen als ASCII- oder UNICODE-Zeichenkette zur Datenbankinstanz gesendet. Aus Performance-Gründen sollten Sie daher für eine SQL-Anweisung nur dann UNICODE-Host-Variablen verwenden, wenn die Anweisung tatsächlich UNICODE-Zeichen enthält.
· Führen Sie den Precompiler-Lauf mit der Precompiler-Option –G unicodedurch.
EXEC SQL BEGIN DECLARE SECTION;
/* "SELECT TABLENAME FROM DOMAIN.TABLES " encoded in UCS2 */
SQLUCS2 sqlstmt[36] = {0x0053, 0x0045, 0x004C, 0x0045, 0x0043,
0x0054, 0x0020, 0x0054, 0x0041, 0x0042,
0x004C, 0x0045, 0x004E, 0x0041, 0x004D,
0x0045, 0x0020, 0x0046, 0x0052, 0x004F,
0x004D, 0x0020, 0x0044, 0x004F, 0x004D,
0x0041, 0x0049, 0x004E, 0x002E, 0x0054,
0x0041, 0x0042, 0x004C, 0x0045, 0x0053,
0x0000};
SQLUCS2 resultstring[64];
EXEC SQL END DECLARE SECTION;
/* connect ... */
/* parse a unicode sql command and give it a statement name */
EXEC SQL PREPARE stmt1 FROM :sqlstmt;
EXEC SQL DECLARE curs1 CURSOR FOR stmt1;
EXEC SQL OPEN curs1;
/* loop over resultset */
while (sqlca.sqlcode != 100)
{
EXEC SQL FETCH curs1 INTO :resultstring;
/* ... */
}
EXEC SQL CLOSE curs1;