符合 ANSI 的数据库的限制和区分大小写

下表描述了当您创建、重命名或访问数据库对象时数据库服务器如何读取和存储所有者
所有者名称规范 兼容 ANSI 的数据库的做法
忽略 严格按照登录名存储在系统中的方式读取或存储所有者,但如果用户不是所有者,则会返回错误。
不带引号指定 以大写字母读取或存储所有者
包括在引号中 完全按照输入读取或存储所有者 。另见使用引号引用 gbasedbt 用户拥有的表

如果在兼容 ANSI 的数据库中创建或重命名数据库对象时指定所有者名称,必须在数据访问语句中包含所有者名称。当访问不属于您的数据库对象时您必须包含所有者名称。

因为如果所有者不在引号之间,则数据库服务器自动将所有者转换为大写字母,区分大小写错误会导致查询失败。例如,如果您是用户 nancy 并且使用以下语句,则产生的视图具有名称 nancy.njcust
CREATE VIEW 'nancy'.njcust AS
          SELECT fname, lname FROM customer WHERE state = 'NJ';
以下 SELECT 语句失败,因为它试图将 NANCY.njcust 和实际所有者和表名 nancy.njcust 相匹配:
SELECT * FROM nancy.njcust;

GBase 8s 分布式查询中,如果所有者名称不在引号中,则远程数据库遵循本地数据库的大小写约定。如果本地数据库是兼容 ANSI 的,则远程数据库将所有者名称处理为 uppercase。如果本地数据库是不兼容 ANSI 的,则远程数据库将所有者名称处理为 lowercase

提示: 使用所有者名称作为查询中的选择标准之一(例如,WHERE owner = 'kaths')时,必须确保带引号字符串和存储在数据库中的所有者名称完全匹配。如果数据库服务器找不到数据库对象或数据库,可能需要修改查询使引用字符串使用大写字母(例如,WHERE owner = 'KATHS')。

因为所有者名称是授权标识符,而不是 SQL 标识符,因此可以在数据库的 SQL 语句中的单引号(')之间包含所有者,其中 DELIMIDENT 环境变量指定支持分隔标识符,从而需要双引号(")围绕 SQL 标识符。