定义字段过程
字段过程由 CREATE TABLE 和 ALTER TABLE 语句的 FIELDPROC 子句指定给表。 字段过程是用户编写的出口例程,用于变换单列中的值。
当更改列中的值或插入新值时,将对每个值调用字段过程,并且可以以任何方式变换该值 (对其进行编码)。 然后存储编码值。 从列中检索值时,将针对每个已编码的值调用字段过程,并且必须将其解码回原始值。 对使用字段过程的非派生列定义的任何索引都是使用编码值构建的。
字段过程对值执行的变换称为 field-encoding。 同一例程用于在检索值时撤销变换; 该操作称为 field-解码。 通过两种方式向 Db2® 描述具有字段过程的列中的值:
- 在 CREATE TABLE 或 ALTER TABLE 中定义的列的描述显示在目录表 QSYS2.SYSCOLUMNS中。 这是字段解码值的描述,称为 列描述。
- 存储在数据库中的已编码值的描述显示在目录表 QSYS2.SYSFIELDS中。 这是字段编码值的描述,称为 字段描述。
要点: 字段解码函数必须是字段编码函数的完全逆函数。 例如,如果例程将 "ALABAMA" 编码为 "01" ,那么它必须将 "01" 解码为 "ALABAMA"。 违反此规则可能会导致不可预测的结果。 请参阅 编写字段过程的一般准则。
字段过程还可以在解码 (检索) 时执行数据屏蔽。 在这种情况下,对于某些用户或环境,字段过程会将 "01" 解码为 "ALABAMA" ,而对于其他用户或环境,可能会返回诸如 " XXXXXXXXXX" 之类的掩码值。 请参阅 编写屏蔽数据的字段过程的准则。
可以为物理文件中的列定义字段过程。 但是,如果使用 "更改物理文件" (CHGPF) 命令来更改定义,那么将除去该字段过程,并且必须重新建立该过程。