systables 系统目录表对在数据库(包括系统目录的表和视图)中定义的每个表对象(表、 视图、同义词或 GBase 8s 中的序列)包含一行。
为 systables 表中记录的每个表、视图、序列和同义词指定 tabid,它是系统指定的、 唯一标识该对象的 SERIAL 值。保留前 99 个 tabid 值用于系统目录。数据库中第一个用户定义的表对象的 tabid 始终为 100。 对 tabid 列建立了索引,且该列只包含唯一值。tabname 和 owner 列的组合索引也 需要唯一值。 version 列包含创建新表时存储在 systables 中的已编码数字。当对表执行数据定义 的语句(例如,ALTER INDEX、ALTER TABLE、DROP INDEX 和 CREATE INDEX)时,此值的 一部分会增大。 在 flags 列中,ST_RAW 表示支持事务日志记录的数据库中的非日志记录永久表。 SQL_LOGICAL_CHAR 参数的设置会编码到描述 VERSION 表的行中的 systables.flags 列 值。注意此由系统生成的表的标识中有一个前导空格。
要确定数据库是否启用可将逻辑字符语义应用到字符列声明的 SQL_LOGICAL_CHAR 配 置参数,您可以执行以下查询:
SELECT flags INTO $value FROM 'gbasedbt'.systables WHERE tabname = ' VERSION';
由于 SQL_LOGICAL_CHAR 设置以“VERSION.flags”值的两个最不重要数位编码,因此 您可以依据以下公式从返回的 flags 值计算其设置: SQL_LOGICAL_CHAR = (value & 0x03) + 1此处的 & 是位 AND 运算符。任何大于 1 的 SQL_LOGICAL_CHAR 设置表示创建数据库时已启用 SQL_LOGICAL_CHAR,且字符列的显式或 缺省最大大小规范将乘以该设置。 当执行引用数据库表的预编译语句时,会检查版本值以确保自预编译语句以来没有进 行任何更改。如果修改了表模式的 DDL 操作更改了版本值并且 SET ENVIRONMENT 语句的 IFX_AUTO_REPREPARE 设置已禁用了自动重新编译,那么不会执行预编译语句,并且必须再 次预编译该语句。
npused 列既不反映用于 BYTE 或 TEXT 数据的页数,也不反映 DELETE 或 TRUNCATE 操作中释放的页数。
nrows 列和 npused 列可能无法准确反映由外部表使用的行数和数据页数,除非在创 建外部表时指定了 NUMROWS 子句。请参阅《GBase 8s 管理员指南》以获取更多信息。
systables 表有两行用来存储有关数据库语言环境的信息:GL_COLLATE(其 tabid 为 90)
和 GL_CTYPE(其 tabid 为 91)。要查看这些行,请输入以下 SELECT 语句:
SELECT * FROM systables WHERE tabid=90 OR tabid=91;




