FETCH语句¶
FETCH语句读出活动集合的各行并命名将要接受结果的各输出主变量。可执行SQL语句FETCH的语法是:
EXEC SQL FETCH 〈游标名〉
INTO :〈宿主变量1〉, :〈宿主变量2〉, … ;
例如:
EXEC SQL FETCH cur_emp INTO :hgrade, :hcity;
游标必须已经声明,并且已经用OPEN语句打开。FETCH第一次执行时,游标从第一行前面的位置移到第一行。第一行变成当前行。FETCH每执行一次,游标的位置就向前移动到活动集合的下一行,改变当前行的位置。游标只能在活动集合中向前移动。如要返回前面已经取过的行,唯一的方法就是关闭并重新打开游标,并且从活动集合的第一行重新开始。
尽管FETCH语句可能需要多次执行,但应该只有一个宿主变量集合与FETCH相关连。如果把一个打开的游标配给另一个具有不同宿主变量的FETCH语句,FETCH将被忽略。
如果希望改变查询,或它的活动集合,或任何输入宿主变量,那么需要使用动态SQL方式(参见 动态SQL语句)。
如果活动集合为空,或者再没有行可被取回,则SQLCODE被置为+100,表明没有数据。如要对已经返回+100的游标作进一步的操作,就必须关闭并重新打开该游标,否则就会出错。如果用户之前定义了WHENEVER NOT FOUND的相应操作,那么在没有更多数据的时候,就会执行该操作。
在下面的情况下执行FETCH操作会出现错误:
- 在打开游标之前;
- 在返回''没有数据''的信息之后;
- 在关闭游标之后。