检测数据的结束

在前面的示例中,WHILE 条件在 OPEN 语句返回错误时阻止执行循环。当将 SQLCODE 设置为 100 来标志数据的结束时,相同的条件会终止该循环。然而,该循环包含 SQLCODE 的测试。此测试是必需的,因为如果 SELECT 语句是有效的但找不到相匹配的行,则 OPEN 语句返回零,但第一次访存返回 100(数据的结束)并不返回任何数据。下列示例展示编写同一循环的另一种方式:
EXEC SQL DECLARE the_item CURSOR FOR
          SELECT order_num, item_num, stock_num
          INTO :o_num, :i_num, :s_num 
          FROM items;
          EXEC SQL OPEN the_item;
          if(SQLCODE == 0)
          EXEC SQL FETCH the_item;      /* fetch 1st row*/
          while(SQLCODE == 0)
          {
          printf("%d, %d, %d", o_num, i_num, s_num);
          EXEC SQL FETCH the_item;
          }

在此版本中,早已处理了无返回行的情况,因此,在循环中不存在第二次 SQLCODE 测试。由于 SQLCODE 测试的时间成本是访存成本的很小一部分,因此这些版本在性能上没有多大差异。