在需要 FETCH 的 INTO 子句时

在 SELECT 或 EXECUTE FUNCTION(或 EXECUTE PROCEDURE)省略 INTO 子句时,在访存行时必须指定数据目标。

例如,要动态地执行 SELECT 或 EXECUTE FUNCTION(或 EXECUTE PROCEDURE)语句,SELECT 或 EXECUTE FUNCTION(或 EXECUTE PROCEDURE)不可在 PREPARE 语句中包括其 INTO 子句。因此,FETCH 语句必须包括 INTO 子句来将数据检索到一组变量内。这种方法让您在不同的内存位置中存储不同的行。

仅可使用 FETCH 语句中的 INTO 子句来访存到程序数组元素内。如果您使用程序数组,则必须罗列数据名称和在 data_structure 中数据的特定元素。在您声明游标时,请不要在 SQL 语句内引用数据元素。
提示: 如果您确定在 Projection 子句的选择列表中值的数量和数据类型,则可使用 FETCH 语句中的 INTO 子句。
在下列 GBase 8s ESQL/C 示例中,一系列完整的行被访存到程序数组内。每一 FETCH 语句的 INTO 子句指定数组元素和数据名称:
EXEC SQL BEGIN DECLARE SECTION;
   char wanted_state[2];
   short int row_count = 0;
   struct customer_t{
   {
      int    c_no;
      char   fname[15];
      char   lname[15];
   } cust_rec[100];
EXEC SQL END DECLARE SECTION;

main()
{
   EXEC SQL connect to'stores_demo';
   printf("Enter 2-letter state code: ");
   scanf ("%s", wanted_state);
   EXEC SQL declare cust cursor for 
      select * from customer where state = :wanted_state;
   EXEC SQL open cust;
   EXEC SQL fetch cust into :cust_rec[row_count];
   while (SQLCODE == 0)
   {
      printf("\n%s %s", cust_rec[row_count].fname,
         cust_rec[row_count].lname);
      row_count++;
      EXEC SQL fetch cust into :cust_rec[row_count];
   }
   printf ("\n");
   EXEC SQL close cust;
   EXEC SQL free cust;
}