EGL open 语句从关系数据库中选择一组行,以供 get next 语句以后检索。open 语句可以对游标或对被调用过程执行操作。
- resultSetID
- 一个标识,它使 open 语句与以后的 get next、replace、delete 和 close 语句相关。有关详细信息,请参阅 resultSetID。
- scroll
允许您在结果集中以各种方式移动的选项。语句
get next
总是可用的,但使用
scroll 还允许您使用下列语句:
- get absolute
- get current
- get first
- get last
- get previous
- get relative
- hold
- 发生落实时保留结果集中的位置。
注: 仅当 JDBC 驱动程序支持 JDBC 3.0
或更高版本时,hold 选项才可用。
hold 选项在下列情况下适用:
- 正在使用 EGL open 语句来打开游标而不是存储过程;并且
- 您想要定期落实更改而不丢失您在结果集中所处的位置;并且
- 数据库管理系统支持在 SQL 游标声明中使用 WITH HOLD 选项。
例如,代码可以执行下列操作:
- 通过运行 EGL open 语句来声明并打开游标
- 通过运行 EGL get next 语句来访存行
- 在一个循环中执行以下操作:
- 以某种方式处理数据
- 通过运行 EGL replace 语句来更新行
- 通过运行系统函数 sysLib.commit 来落实更改
- 通过运行 EGL get next 语句来访存另一行
如果未指定 hold,则由于游标不再是打开的,所以步骤 3d 的第一次运行将失败。
在落实时不会关闭对其指定了 hold 的游标,但回滚或数据库连接将关闭所有游标。
如果不需要跨落实保留游标位置,则不要指定 hold。
- forUpdate
- 一个选项,它允许以后使用 EGL 语句来替换或删除从数据库中检索到的数据。
如果正在调用存储过程以检索结果集,则不能指定 forUpdate。
- usingKeys ... item
- 标识用来构建隐式 SQL 语句中的 WHERE 子句的键值部分的键项列表。如果未指定显式 SQL 语句,则在运行时将使用隐式 SQL 语句。
如果未指定 usingKeys 子句,则隐式语句的键值部分基于在 open 语句中引用的 SQL 记录部件。
如果指定显式 SQL 语句,则将忽略 usingKeys 信息。
- with #sql{ sqlStatement }
- 显式 SQL SELECT 语句,如果还指定了 SQL 记录,则此语句是可选的。不要在 #sql 与左花括号之间留下任何空格。
- into ... item
- INTO 子句,它标识从游标或存储过程中接收值的 EGL 主变量。在与此子句类似的子句中(该子句位于 #sql{ } 块外部),不要在主变量名称之前包括分号。
- with preparedStatementID
- 在运行时准备 SQL SELECT 或 CALL 语句的 EGL prepare 语句的标识。open 语句动态地运行 SQL SELECT 或 CALL 语句。有关详细信息,请参阅 prepare。
- using ... item
- USING 子句,它标识在运行时可供已准备的 SQL SELECT 或 CALL 语句使用的 EGL 主变量。在与此子句类似的子句中(该子句位于 #sql{ } 块外部),不要在主变量名称之前包括分号。
- SQL record name
- SQLRecord 类型的记录的名称。记录名或 sqlStatement 值是必需的;如果省略 sqlStatement,则 SQL SELECT 语句是从 SQL 记录派生的。
示例如下所示(采用名为 emp 的 SQL 记录):
open empSetId forUpdate for emp;
open x1 with
#sql{
select empnum, empname, empphone
from employee
where empnum >= :empnum
for update of empname, empphone
}
open x2 with
#sql{
select empname, empphone
from employee
where empnum = :empnum
}
for emp;
open x3 with
#sql{
call aResultSetStoredProc(:argumentItem)
}