要创建数据库对象,例如名为
mytab 的表,登录名为
Otho 的用户可以以下列几种方式声明新数据库对象的名称:
- CREATE TABLE mytab . . .
- CREATE TABLE Otho.mytab . . .
- CREATE TABLE "Otho".mytab . . .
未分隔的所有者名称(第二个示例中)存储在
systables 系统目录表的
owner 列的形式取决于本地数据库是否符合 ANSI 。
- 在情况 1 中,未指定所有者名称。表的隐式所有者是 Otho,创建该表的用户,并且所有者名称以与所有者的用户标识相同的格式(Otho)存储在
systables 表中,与数据库的 ANSI 兼容状态无关。
- 在情况 2 中,指定未定界的所有者名称。systables 表对于不符合 ANSI 的数据库的数据库,将所有所有者名称字母存储为小写(此处为
otho)。对于兼容 ANSI 的数据库(其中不将 ANSIOWNER 设置为 1), systables
表将所有所有者名称字母存储为大写(此处为 OTHO)。但是,如果 ANSIOWNER 设置为 1,则名称以与 DDL
语句中指定的相同大小写形式存储(此处为 Otho)。
- 在情况 3 中,定界的所有者名称按照其指定的相同的形式(此处为 Otho)存储在 systables 表中,与数据库的 ANSI
兼容状态无关。
请注意用户标识符是区分大小写的,但是数据库名称不区分大小写。因此,同一个用户不能用于表
tab 和表
TAB 。
除了这些示例中的 CREATE TABLE 语句之外,所有 SQL 语句和 SPL 语句都遵循这些规则。例如,使用 DROP TABLE 时,在处理语句时所有者名称出现的格式取决于以下相同的条件:
- 是否指定了显式所有者名称。
- 如果指定了显式所有者名称,是否使用引号将所有者名称分隔开。
- 如果没有使用引号将显式所有者名称分隔开,则数据库是否符合 ANSI 标准。
- 如果数据库是符合 ANSI 的,则在数据库初始化之前是否将 ANSIOWNER 设置为 1。