SQLBindParameter を使用して、文字列の配列を DB2 の VARCHAR フィールドにメモリ効率の良い方法で書き込むにはどうすればよいでしょうか?
DB2ドキュメントの例はこれを行います
SQLCHAR Description[NUM_PRODS][257] = {
"Aquarium-Glass-25 litres", "Aquarium-Glass-50 litres",
"Aquarium-Acrylic-25 litres", "Aquarium-Acrylic-50 litres",
"Aquarium-Stand-Small", "Aquarium-Stand-Large",
"Pump-Basic-25 litre", "Pump-Basic-50 litre",
"Pump-Deluxe-25 litre", "Pump-Deluxe-50 litre",
"Pump-Filter-(for Basic Pump)",
"Pump-Filter-(for Deluxe Pump)",
"Aquarium-Kit-Small", "Aquarium-Kit-Large",
"Gravel-Colored", "Fish-Food-Deluxe-Bulk",
"Plastic-Tubing"
};
rc = SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 257, 0, Description, 257, NULL);
私はそれを問題なく動作させることができますが、実際の長さに関係なく各文字列が 256 文字 (+null-terminator) を使用して格納されるため、あまり効率的ではありません。より一般的には、1 つの非常に長い文字列 (たとえば 500 文字) があり、他のすべての文字列が 1 文字である場合でも、[NUM_STRINGS][500] のサイズの 2 次元配列が必要になり、大量のメモリが浪費されます。
私がやりたいことは、 SQLBindParameter に次のような配列を渡すことです
SQLCHAR* Description[NUM_STRINGS];
配列の各要素は文字列を指します。各文字列は必要なスペースのみを使用するため、これはメモリ効率が高くなりますが、SQLBindParameter を使用して動作させる方法がわかりません。どんな助けでも大歓迎です。
注: 任意の DB に対する一般的な回答は素晴らしいものですが、DB2 に固有の回答も役立ちます。
私が取り組んでいるサイズには、長さが大きく異なる数百万の文字列が含まれているため、メモリ効率が重要な要素です。
私は実際に Linux で DB2 を使用していますが、この特定のユースケースについては、DB2 for z/OS のドキュメントにある唯一の例を見つけることができました。ただし、メモリ使用量の問題を除いて、正しく機能します。