在PowerBuilder中读取数据库的多行数据

当需要从数据库中同时读取多条记录的时候,就需要使用游标进行操作。游标CURSOR是一个与SELECT语句相关联的符号名,游标的最大好处是可以让用户逐行的访问表中的记录。使用游标的典型的过程如下:
1)用DECLARE关键字声明游标。
2)使用OPEN语句打开游标
3)使用FETCH语句读取一行数据
4)处理数据
5)判断是否已经读取完所有的数据,未读完数据的话,GOTO步骤3
6)使用CLOSE关键字关闭游标

(1)DECLARE 语句
在使用游标之前,需要使用DECLARE语句声明游标,使用DECLARE语句声明游标的格式如下:
DECLARE CursorName CURSOR FOR SelectStatement
[USING TransactionObject]
其中CursorName是游标的名称,可以使用任何有效的标识符来表示;SelectStatement是任何有效的Select语句;TransactionObject是事务对象名,默认时使用SQLCA(SQL通信区).
例如,下面的语句声明了一个名字叫做student_sur的游标,该游标使用了默认事务对象SQLCA和一个变量le_sex,其作用就是选取某个性别的所有的学生的学号和姓名:
DECLARE student_cur CURSOR FOR
SELECT student,student_id,student.student_name
FROM student WHERE student.sex=:ls_sex
DECLARE是个声明语句,可以像声明标准数据类型那样把游标声明称局部变量,实例变量或者是全局变量.它并不真正的执行,因此在DECLARE语句后,也无须检查事务对象的SQLCode属性.
值得注意的是DECLARE虽然是一个声明语句,但是仍旧需要使用分号作为结束符.

(2)OPEN语句
OPEN语句打开已经声明的游标并且执行相应的SELECT语句,其语法格式是:
OPEN CursorName;
其中,CursorName是已经使用DECLARE语句声明的游标名,例如:
open student_cur;

(3)FETCH语句
FETCH语句从游标中读取当前记录并且把它保存到指定的变量中,只要数据库支持,还可以使用FECTH FIRST,FETCH PRIOR,FETCH LAST。FETCH语句的语法格式为:
FETCH CursorName INTO VariableList
其中,CursorName是OPEN语句打开的游标名;VariableList是与Select语句中选择字段相对应的变量列表,例如,对前面DECLARE语句说明的游标,可以使用下面的语句读取记录:
string ls_student,ls_student_name
FETCH student_cur INTO :ls_student_id,:ls_student_name;
每执行一次FETCH语句都会从游标中读取一行记录,需要读取多行记录时需要反复调用FETCH语句.执行FETCH语句之后,应该检查事务对象的SQLCode属性,该属性为0的时候,表明成功的读取当前的记录,如果SQLCode为-1的时候,表明读取当前的记录失败,为100的时候,表明已经读取完了所有的记录.

(4)CLOSE语句
CLOSE语句关闭先前打开的游标.其语法格式为
CLOSE CursorName;
其中,Cursorname是先前打开的游标的名称.
关闭游标之后,就不能再使用FETCH语句从游标中读取数据了,下面是关闭游标的示例:

CLOSE student_cur;

你可能感兴趣的:(PowerBuilder)