SYSCOLUMNS

syscolumns 系统目录表描述数据库中的每个列。

对于在表或视图中定义的每一列,都会有一行存在。

表 1. SYSCOLUMNS 表
类型 解释
colname VARCHAR(128) 列名
tabid INTEGER 包含列的表的标识代码
colno SMALLINT 列号

系统按顺序指定此列号(在每个表中从左到右)。

coltype SMALLINT 指示该列的数据类型的代码:
  • 0 = CHAR
  • 1 = SMALLINT
  • 2 = INTEGER
  • 3 = FLOAT
  • 4 = SMALLFLOAT
  • 5 = DECIMAL
  • 6 = SERIAL 1
  • 7 = DATE
  • 8 = MONEY
  • 9 = NULL
  • 10 = DATETIME
  • 11 = BYTE
  • 12 = TEXT
  • 13 = VARCHAR
  • 14 = INTERVAL
  • 15 = NCHAR
  • 16 = NVARCHAR
  • 17 = INT8
  • 18 = SERIAL8 1
  • 19 = SET
  • 20 = MULTISET
  • 21 = LIST
  • 22 = ROW(未命名)
  • 23 = COLLECTION
  • 40 = 可变长度不透明类型 2
  • 41 = 固定长度不透明类型 2
  • 43 = LVARCHAR(仅适用于客户机端)
  • 45 = BOOLEAN
  • 52 = BIGINT
  • 53 = BIGSERIAL 1
  • 2061 = IDSSECURITYLABEL 2
  • 4118 = ROW(命名)
collength 任何以下数据类型: 值决定于列的数据类型。对于某些数据类型,值是列长(以字节为单位)。请参阅存储列长以获取更多信息。
colmin INTEGER 最小列长(以字节计)
colmax INTEGER 最大列长(以字节计)
extended_id INTEGER coltype 列中指定的数据类型的数据类型代码(来自 sysxtdtypes 表)
seclabelid INTEGER 安全标号的标号标识与该列相关联(如果该列为受保护的列)。否则,其标号标识为 NULL。
colattr SMALLINT
HIDDEN
1 - 隐藏的列
ROWVER
2 - 行版本列
ROW_CHKSUM
4 - 行键列
ER_CHECKVER
8 - ER 行版本列
UPGRD1_COL
16 - ER 自动主键列
UPGRD2_COL
32 - ER 自动主键列
UPGRD3_COL
64 - ER 自动主键列
PK_NOTNULL
128 - NOT NULL by PRIMARY KEY
注:
  • 1DB-Access 中,总是将偏移值 256 添加到这些 coltype 代码上,因为 DB-Access 会将 SERIAL、SERIAL8 和 BIGSERIAL 列设置为 NOT NULL。
  • 2 请参阅不透明数据类型以获取更多信息。

tabidcolno 列的组合索引只允许唯一值。

coltype 代码可通过显示列的以下特征的位图递增。

位值 设置位时的有效值
0x0100 不允许使用 NULL 值
0x0200 值来自主变量
0x0400 用于联网的数据库服务器的点分十进制
0x0800 DISTINCT 数据类型
0x1000 命名 ROW 类型
0x2000 LVARCHAR 基本类型中的 DISTINCT 类型
0x4000 BOOLEAN 基本类型中的 DISTINCT 类型
0x8000 在客户机系统上处理的集合

例如,命名行类型的 coltype4118 是十六进制值 0x1016 的十进制表示法,该十六进制值与设置了命名行类型位的未命名行类型 0x016 的十六进制 coltype 值相同。文件 $GBASEDBTDIR/incl/esql/sqltypes.h 包含有关 syscolumns.coltype 代码的其他信息。

NOT NULL 约束

同样,如果列不允许使用 NULL 值,那么 coltype 值将增加 256。要确定这种列的数据类型,根据可能的 coltype 值,从值中减去 256 并求余数。例如,如果 coltype 值为 262,减去 256 得到余数 6,那么这表示列具有 SERIAL 数据类型。

存储列数据类型

数据库服务器将 coltype 值作为位图存储,如 SYSCOLUMNS 中列示的那样。