在使用 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的主機結構陣列名稱。
  • b_array 只能在已封鎖的 FETCH 陳述式及 INSERT 陳述式表單上使用。
  • 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;
…