在C程序中引用指针宿主变量

如果您使用 Db2 协处理器,您可以在SQL语句中引用任何已声明的指针宿主变量。

过程

在C和C++程序中引用指针宿主变量:

请严格按照声明的方式指定指针宿主变量。
唯一的例外是引用空终止字符数组的指针。 在这种情况下,您无需包含声明中的括号。

示例

示例:标量指针宿主变量引用
表 1. 标量指针宿主变量的引用示例
声明 描述 引用
short *hvshortp; 
hvshortp是一个指针宿主变量,指向两个字节的存储空间。
EXEC SQL set:*hvshortp=123; 
double *hvdoubp;
hvdoubp是一个指针宿主变量,指向八个字节的存储空间。
EXEC SQL set:*hvdoubp=456;
char (*hvcharpn) [20];
hvcharpn是一个指针宿主变量,指向一个最多20字节的空终止字符数组。
EXEC SQL set:
*hvcharpn='nul_terminated';
示例:有界字符指针宿主变量引用
假设您的程序声明了以下有界字符指针宿主变量:
struct {
  unsigned long len;
  char * data;
  } hvbcharp;
以下示例引用了此带界字符指针宿主变量:
hvcharp.len = dynlen;  a 
hvcharp.data = (char *) malloc (hvcharp.len);  b 
EXEC SQL set :hvcharp = 'data buffer with length';  c 
注:
a
dynlen可以是编译时常量,也可以是运行时赋值的变量。
b
hvcharp.data 的存储空间是动态分配的。
c
SQL语句引用的是结构名称,而不是结构中的元素。
示例:数组指针宿主变量引用
表 2. 数组指针宿主变量的引用示例
声明 描述 引用
short * hvarrpl[6]
hvarrp1 是一个由6个指针组成的数组,每个指针指向两个字节的存储空间。
EXEC SQL set:*hvarrpl[n]=123; 
double * hvarrp2[3]
hvarrp2 是一个由3个指针组成的数组,每个指针指向8字节的存储空间。
EXEC SQL set:*hvarrp2[n]=456;
struct {
   unsigned long len;
   char * data; }
hvbarrp3[5];
hvbarrp3 是一个由5个有限字符指针组成的数组。
EXEC SQL set :hvarrp3[n] = 
'data buffer with length'
示例:结构数组主机变量引用
假设您的程序声明了以下指向结构体tbl_struct的指针:
struct tbl_struct *ptr_tbl_struct =
 (struct tbl_struct *) malloc (sizeof (struct tbl_struct) * n);
要引用这些数据,请使用如下示例中的指针。 假设tbl_sel_cur是一个已声明的游标。
for (L_col_cnt = 0; L_col_cnt < n; L_con_cnt++)
{ ...
  EXEC SQL FETCH tbl_sel_cur INTO :ptr_tbl_struct [L_col_cnt]
  ...
}