在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的指针:
要引用这些数据,请使用如下示例中的指针。 假设tbl_sel_cur是一个已声明的游标。struct tbl_struct *ptr_tbl_struct = (struct tbl_struct *) malloc (sizeof (struct tbl_struct) * n);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] ... }