返回首页

gbase数据、南大通用产品文档:GBase8sSYSFRAGAUTH

更新日期:2024年09月11日

sysfragauth 系统目录表存储有关对表分段授予的特权的信息。此表具有以下列。
表 17. SYSFRAGAUTH 表列描述

类型
解释
grantor
CHAR(32)
特权授权者的名称
grantee
CHAR(32)
特权被授权者的名称
tabid
INTEGER
标识分段表的代码
fragment
VARCHAR(128)
存储分段的数据库空间的
名称
fragauth
CHAR(6)
指定分段特权的 6 字节
模式(包括保留供将来使
用的 3 个字节):
u 或 U = Update
i 或 I = Insert
d 或 D = Delete


在 fragauth 列中,大写代码(例如:U 表示 Update)意味着被授权者可以将该特
权授予其他用户;小写(例如:u 表示 Update)意味着用户不能将该特权授予他人。连
字符 ( - ) 指示 tabauth 模式内该位置缺少对应的特权。
tabid、grantor、grantee 和 fragment 列的组合索引只允许唯一值。tabid 和
grantee 列的组合索引允许重复值。
以下示例显示了一个基本表的分段级别特权(这些特权存在于 sysfragauth 表
中)。在此示例中,被授权者 rajesh 可将 Update、Delete 和 Insert 特权授予其他用
户。

GBase 8s SQL 指南:参考
南大通用数据技术股份有限公司 - 42 -
grantor
grantee
tabid
fragment
fragauth
dba
omar
101
dbsp1
-ui---
dba
jane
101
dbsp3
--i---
dba
maria
101
dbsp4
--id--
dba
rajesh
101
dbsp2
-UID--

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

元素
描述
限制
语法
cursor_id
游标名称
必须已经声明
标识符
cursor_id_var
保留 cursor_id 值
的主变量
必须为字符数据类型 特定于语言
用法
随同 GBase 8s ESQL/C 使用此语句,这是对 SQL 的 ANSI/ISO 标准的扩展。
PUT 语句添加行到缓冲区,在缓冲区变满时,将缓冲区的内容写到数据库。在缓
冲区未满时,使用 FLUSH 语句来强制插入。
如果程序终止而未关闭该游标,则缓冲区保持为未刷新。从上一次刷新丢失起,
将行放入缓冲区内。不要预期程序结束会自动地关闭游标并刷新缓冲区。下列示
例展示操作名为 icurs 的游标的 FLUSH 语句:
FLUSH icurs

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 632
示例
下列示例假设名为 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]。

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 633
在您以插入游标使用数据缓冲时,直到刷新该缓冲区才会发现错误。例如,仅在
刷新缓冲区时,才能发现与列的预定数据类型不兼容的输入值。在发现错误时,
缓冲区中位于错误之后的任何行都不会插入;它们从内存中丢失。
如果未发生错误,则 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。
3. 只要执行 FLUSH 语句时,或关闭游标时,从 pending 抽取 SQLERRD
数组的第三个字段。

可使用 SQL 函数来从文件读取智能大对象,或将它写至文件。
可使用 SQL 函数 FILETOBLOB() 和 FILETOCLOB(),来将数据从文件转移至智能大对
象。该文件可在客户机计算机上,或在服务器计算机上。
可使用 SQL 函数 LOTOFILE(),来将数据从智能大对象转移至文件。该文件可能在客户
机计算机上,或在服务器计算机上。LOTOFILE()接受智能大对象指针作为参数。对于此参
数,可使用智能大对象指针结构。
要获取关于这些 SQL 函数的更多信息,请参阅《GBase 8s SQL 指南:语法》。














GBase 8s ODBC Driver 程序员指南
南大通用数据技术股份有限公司
- 134 -










6 行和集合
行和集合是由一个或多个元素组成的复合值。
仅当您的数据库服务器是 GBase 8s 时才能应用这些主题的信息。
可以使用 SELECT 、UPDATE 、INSERT 和 DELETE 语句访问整个行或集合。但是,
这些 SQL 语句不会让您访问集合或行中的任一元素。要访问元素,需要检索行或集合然
后从行或集合的本地副本访问元素。
有关行和集合的更多信息,请参阅《GBase 8s SQL 指南:参考》和《GBase 8s 用户定义的
例程和数据类型开发者指南》 。