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

1.1FLUSH 语句
使用 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.sqlcode、SQLCODE 和 sqlca.sqlerrd[2]。
在您以插入游标使用数据缓冲时,直到刷新该缓冲区才会发现错误。例如,仅在刷新缓冲区时,才能发现与列的预定数据类型不兼容的输入值。在发现错误时,缓冲区中位于错误之后的任何行都不会插入;它们从内存中丢失。
如果未发生错误,则 SQLCODE 域或设置为错误代码或设置为零(0)。SQLERRD 数组的第三个元素设置为成功地插入到数据库内的行数:
如果一个行块成功地插入到数据库内,则 SQLCODE 设置为零(0),SQLERRD 设置为行数。
如果在 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、付费专栏及课程。

余额充值