SQL文では、次のようにポインタに接頭辞としてコロンを付けてください。
EXEC SQL SELECT intcol INTO :int_ptr FROM ...
文字列へのポインタを除き、参照される値のサイズは宣言で指定したベース型のサイズにより決定されます。文字列へのポインタの場合、参照される値はNULL終了文字列とみなされます。そのサイズは、strlen()
関数のコールにより実行時に決定されます。詳細は、グローバリゼーション・サポートも参照してください。
ポインタを使用すると、構造体のメンバーを参照できます。まずポインタ・ホスト変数を宣言してから、次の例に示すように、必要なメンバーのアドレスにポインタを設定します。構造体メンバーとポインタ変数のデータ型は同一にする必要があります。両者が一致しない場合、ほとんどのコンパイラでは警告が発行されます。
struct { int i; char c; } structvar; int *i_ptr; char *c_ptr; ... main() { i_ptr = &structvar.i; c_ptr = &structvar.c; /* Use i_ptr and c_ptr in SQL statements. */ ...
構造体へのポインタをホスト変数として使用できます。次の例では
構造体を宣言します。
構造体へのポインタを宣言します。
構造体にメモリーを割り当てます。
構造体へのポインタを問合せでホスト変数として使用します。
構造体のコンポーネントの参照を解除して、結果を出力します。
struct EMP_REC { int emp_number; float salary; }; char *name = "HINAULT"; ... struct EMP_REC *sal_rec; sal_rec = (struct EMP_REC *) malloc(sizeof (struct EMP_REC)); ... EXEC SQL SELECT empno, sal INTO :sal_rec FROM emp WHERE ename = :name; printf("Employee number and salary for %s: ", name); printf("%d, %g\n", sal_rec->emp_number, sal_rec->salary);
SQL文では、ホスト構造体へのポインタは、ホスト構造体とまったく同じ方法で参照されます。「...のアドレス」を示す表記(&)は不要で、実際には使用するとエラーになります。