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文では、ホスト構造体へのポインタは、ホスト構造体とまったく同じ方法で参照されます。「...のアドレス」を示す表記(&)は不要で、実際には使用するとエラーになります。