【无标题】

南大通用GBase8s 常用SQL语句(136)

1.1FETCH 语句
使用 FETCH 语句来将游标移到活动的集合中的新行,并从内存检索该行值。
请随同 GBase 8s ESQL/C 并随同 SPL 使用此语句。
语法
在这里插入图片描述

元素 描述 限制 语法
cursor_id 要检索行的游标 必须打开 标识符
cursor_id_var 存储 cursor_id 的主变量 必须为字符数据类型 特定于语言
cursor_var 游标变量的名称 必须已打开 标识符
data_structure 作为主变量的结构 必须存储访存的值 特定于语言
descriptor 系统描述符区域 必须已分配 引用字符串
descriptor_var 存储 descriptor 的主变量 必须已分配 特定于语言
indicator_var 返回码的主变量,如果 output_var 可为 NULL 值 请参阅 使用指示符变量。 特定于语言
output_var 访存的值的主变量 必须存储来自行的值 特定于语言
position_num 相对于当前行的位置 值 0 访存当前行 精确数值
position_num_var 主变量(= position_num) 值 0 访存当前行 特定于语言
row_position 活动的集合中的序数位置 必须为大于 1 的整数 精确数值
row_position_var 主变量(= row_ position) 必须为 1 或更大 特定于语言
sqlda_pointer 指向 sqlda 结构的指针 不可以 $ 开头,也不可以 : 开头 请参阅 ESQL/C。
用法
除非另有注明,后续章节都描述在 GBase 8s ESQL/C 例程中如何使用 FETCH 语句。要获取更多关于在 SPL 例程中 FETCH 语句的更严格语法和语义的信息,请参阅 从 SPL 例程中的动态游标访存。
数据库服务器如何创建、存储和访存活动的行集合的成员,取决于是否将游标声明为顺序游标,或声明为滚动游标。FETCH 语句可在 SPL 例程中引用的所有游标都是顺序游标。
在 X/Open 模式下,如果指定游标方向值(诸如 NEXT 或 RELATIVE),则发出警告消息,指出语句不符合 X/Open 标准。
使用顺序游标的 FETCH
顺序游标仅可从活动的集合按顺序访存下一行。唯一可用的选项为缺省选项 NEXT。每次打开表时顺序游标仅可通读表一次。下列 GBase 8s ESQL/C 示例说明使用顺序游标的 FETCH 语句:
EXEC SQL FETCH seq_curs INTO :fname, :lname;
EXEC SQL FETCH NEXT seq_curs INTO :fname, :lname;
在程序打开顺序游标时,数据库服务器处理对第一行数据的定位或构造点的查询。数据库服务器的目标是尽可能少地占用资源。
由于顺序游标仅可检索下一行,因此数据库服务器可频繁地创建活动的集合,一次一行。
对于每一 FETCH 操作,数据库服务器返回当前行的内容,并定位到下一行。如果数据库服务器必须创建整个活动的集合来确定哪一行为下一行,则这种一次一行的策略不可行。(可能是 SELECT 语句包括 ORDER 子句的那种情况)。
使用滚动游标的 FETCH
这些 GBase 8s ESQL/C 示例说明使用滚动游标的 FETCH 语句:
EXEC SQL fetch previous q_curs into :orders;
EXEC SQL fetch last q_curs into :orders;
EXEC SQL fetch relative -10 q_curs into :orders;
printf("Which row? “);
scanf(”
EXEC SQL fetch absolute :row_num q_curs into :orders;
滚动游标可访存活动的集合中的任意行,或者通过指定绝对行位置,或者通过指定相对偏移量。使用下列游标位置选项来指定您想要检索的特定行。
关键字 作用
NEXT 检索活动的集合中的下一行
PREVIOUS 检索活动的集合中的前一行
PRIOR 检索活动的集合中的前一行(与 PREVIOUS 同义。)
FIRST 检索活动的集合中的第一行
LAST 检索活动的集合中的最后一行
CURRENT 检索活动的集合中的当前行(与前面的 FETCH 语句从滚动游标返回的行相同)
RELATIVE 检索相对于活动的集合中当前游标位置的第 n 行,其中 position_num(或 position_num_var) 提供 n。负值指示当前游标位置之前的第 n 行。如果 position_num = 0,则访存当前行。
ABSOLUTE 检索活动的集合中的第 n 行,其中 row_position_var (或 row_position)= n。绝对行位置从 1 开始计数。
提示: 请不要将行位置值与 rowid 值相混淆。rowid 值是基于在其表中的位置,并在重建表之前保持有效。行位置值(ABSOLUTE 关键字检索到的值)是该行在游标的活动的集合中的相对位置;下一次打开游标时,可能选择不同的行。
数据库服务器如何实现滚动游标
由于数据库服务器不可预测程序下一次会请求哪一行,因此数据库服务器必须保留活动的集合中的所有行,直到该滚动游标关闭为止。在滚动游标打开时,数据库服务器实现活动的集合作为临时表,虽然它不可能立即植入此表。
第一次访存行时,数据库服务器将它复制到临时表内并将它返回到程序。
在第二次访存行时,可以从临时表进行。这种方案使用最少的资源,以防程序在访存所有行之前放弃查询。从不被访存的那些行通常不从数据库复制,或被保存在临时表中。
指定值在内存中的返回位置
来自查询的选择列表或者执行用户定义的函数的每一值必须被返回到内存位置内。您可以下列方式之一指定这些目的地:
使用 SELECT 语句的 INTO 子句。
使用 EXECUTE 函数(或 EXECUTE PROCEDURE)语句的 INTO 子句。
使用 FETCH 语句的 INTO 子句。
使用系统描述符区域。
使用 sqlda 结构。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值