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

    1. FLUSH 语句

使用 FLUSH 语句来将 PUT 语句缓冲的行强制写到数据库。

语法

 

元素

描述

限制

语法

cursor_id

游标名称

必须已经声明

标识符

cursor_id_var

保留 cursor_id 值的主变量

必须为字符数据类型

特定于语言

用法

随同 GBase 8s ESQL/C 使用此语句,这是对 SQL 的 ANSI/ISO 标准的扩展。

PUT 语句添加行到缓冲区,在缓冲区变满时,将缓冲区的内容写到数据库。在缓冲区未满时,使用 FLUSH 语句来强制插入。

如果程序终止而未关闭该游标,则缓冲区保持为未刷新。从上一次刷新丢失起,将行放入缓冲区内。不要预期程序结束会自动地关闭游标并刷新缓冲区。下列示例展示操作名为 icurs 的游标的 FLUSH 语句:

FLUSH icurs

示例

下列示例假设名为 next_cust 的函数返回有关新客户的信息,或返回空数据表示输入结束:

EXEC SQL BEGIN WORK;

EXEC SQL OPEN new_custs;

while(SQLCODE == 0)

{

next_cust();

if(the_company == NULL)

break;

EXEC SQL PUT new_custs;

}

if(SQLCODE == 0) /* if no problem with PUT */

{

EXEC SQL FLUSH new_custs;

/* write any rows left */

if(SQLCODE == 0) /* if no problem with FLUSH */

EXEC SQL COMMIT WORK; /* commit changes */

}

else

EXEC SQL ROLLBACK WORK; /* else undo changes */

此示例中的代码重复地调用 next_cust。在返回非空数据时,PUT 语句将返回值发送到行缓冲区。在缓冲区填满时,自动地将缓冲区包含的那些行发送到数据库服务器。在 next_cust 不再有数据返回时,循环正常结束。

检查 FLUSH 语句时出错

SQL 通信区域(sqlca)结构包含关于每一 FLUSH 语句的成功信息以及成功地插入的行数。每一 FLUSH 语句的结果在 sqlca 的这些字段描述:sqlca.sqlcodeSQLCODE 和 sqlca.sqlerrd[2]

在您以插入游标使用数据缓冲时,直到刷新该缓冲区才会发现错误。例如,仅在刷新缓冲区时,才能发现与列的预定数据类型不兼容的输入值。在发现错误时,缓冲区中位于错误之后的任何行都不会插入;它们从内存中丢失。

如果未发生错误,则 SQLCODE 域或设置为错误代码或设置为零(0)。SQLERRD 数组的第三个元素设置为成功地插入到数据库内的行数:

  1. 如果一个行块成功地插入到数据库内,则 SQLCODE 设置为零(0),SQLERRD 设置为行数。
  2. 如果在 FLUSH 语句插入一个行块时发生错误,则 SQLCODE 显示是哪个错误,SQLERRD 包含成功地插入的行数。(从缓冲区废弃未插入的行。)

提示: 在您遇到 SQLCODE 错误时,还存在相应的 SQLSTATE 错误。 GBase 8s 的客户机/服务器通信协议,诸如 SQLI 和 DRDA®,支持 SQLSTATE 代码值。要获取这些代码的列表,以及关于如何取得消息文本的信息,请参阅 使用 SQLSTATE 错误状态代码。

要对实际插入到数据库内的行数以及尚未插入的行数计数 

.准备两个整数变量,例如,total 和 pending

  1. 在游标打开时,设置两个变量为 0。
  2. 每次执行 PUT 语句时,增大 total 和 pending

只要执行 FLUSH 语句时,或关闭游标时,从 pending 抽取 SQLERRD 数组的第三个字段。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值