在使用 SQL 的 C 和 C++ 应用程序中使用主机结构数组

在 C 和 C++ 程序中,可以定义具有维度属性的主机结构数组。 主机结构数组最多具有两个级别,即使该数组可能出现在多级别结构中也是如此。 如果不使用变长字符串或变长图形字符串,那么不需要另一种结构。

在此 C 示例中,

struct {
       _Packed struct{
                      char c1_var[20];
                      short c2_var;
                     } b_array[10];
       } a_struct;
 

在本 C++ 示例中,

#pragma pack(1)
struct {
       struct{
                      char c1_var[20];
                      short c2_var;
                     } b_array[10];
       } a_struct;
#pragma pack()

以下是 true:

  • b_array 中的所有成员都必须是有效的变量声明。
  • 必须为 struct 标记指定 _Packed 属性。
  • b_array 是包含成员 c1_var 和 c2_var的主机结构数组的名称。
  • 只能在 FETCH 语句和 INSERT 语句的分块形式上使用 b_array。
  • c1_var 和 c2_var 不是任何 SQL 语句中的有效主变量。
  • 结构不能包含中间级别结构。

例如,在 C 中,您可以使用以下命令从光标检索 10 行:

_Packed struct {char first_initial;
                char middle_initial;
                _Packed struct {short lastname_len;
                                char lastname_data[15];
                               } lastname;
                double total_salary;
               } employee_rec[10];
struct { short inds[4];
       } employee_inds[10];
…
EXEC SQL DECLARE C1 CURSOR FOR
 SELECT SUBSTR(FIRSTNME,1,1), MIDINIT, LASTNAME,
              SALARY+BONUS+COMM
         FROM CORPDATA.EMPLOYEE;
EXEC SQL OPEN C1;
EXEC SQL FETCH C1 FOR 10 ROWS INTO :employee_rec:employee_inds;
…