数据库服务器在表对象的未限定的标识符也是有效的 SQL 关键字的上下文中发出错误。您可以通过使用表的所有者的授权标识符对其进行限定来消除表名称的歧义。
以下示例来说明当关键字 STATISTICS 、OUTER 或 FROM 已声明为表名或同义词时,所有者名称限定符作为解决方法。(如果任何关键字是视图的标识符,则也适用于这些示例。)
UPDATE statistics SET mycol = 10; -- fails
UPDATE josh.statistics SET mycol = 10;
SELECT mycol FROM outer; -- fails
SELECT mycol FROM josh.outer;
下面的 DELETE 语句,其目标表在创建时使用 from 作为它的标识符,返回一个语法错误:
DELETE from; -- fails
因为 FROM 也是一个可选的关键字,紧跟在要记录其记录的表的名称之前,所以数据库服务器在 FROM 之后需要一个表名。找不到,它会发生异常。
相反,下面的示例从正确识别为 from 表的行中删除行,因为该表名由其所有者的名称限定:
DELETE zelaine.from;
如果在数据库服务器上设置了 DELIMIDENT 环境变量,则代替的变通方法为使用双引号(")作为分隔符。
DELETE "from";
这通过指示 from 是 SQL 标识符,而不是字符串文字或 SQL 关键字。
尽管有这些解决方法,如果您避免声明 SQL 关键字作为表、视图或其它数据库对象的标识符,那么您的代码将更容易阅读和维护。