使用关键字作为表名

数据库服务器在表对象的未限定的标识符也是有效的 SQL 关键字的上下文中发出错误。您可以通过使用表的所有者的授权标识符对其进行限定来消除表名称的歧义。

以下示例来说明当关键字 STATISTICSOUTERFROM 已声明为表名或同义词时,所有者名称限定符作为解决方法。(如果任何关键字是视图的标识符,则也适用于这些示例。)

statistics 作为表标识符会导致以下 UPDATE 语句示例失败。发生异常是因为数据库服务器将统计信息解释为语法不正确的 UPDATE STATISTICS 语句中的关键字,而不是 UPDATE 语句中的目标表名:
UPDATE statistics SET mycol = 10;  -- fails
以下示例中的解决方法使用所有者名称限定表名称,以避免多义性:
UPDATE josh.statistics SET mycol = 10;
使用 outer 作为别名会导致下列示例失败,因为数据库服务器将 outer 解释为执行执行语法不正确的外部连接:
SELECT mycol FROM outer; -- fails 
下面这个成功的示例使用所有者命名来避免多义性:
SELECT mycol FROM josh.outer;

下面的 DELETE 语句,其目标表在创建时使用 from 作为它的标识符,返回一个语法错误:

DELETE from;    -- fails

因为 FROM 也是一个可选的关键字,紧跟在要记录其记录的表的名称之前,所以数据库服务器在 FROM 之后需要一个表名。找不到,它会发生异常。

相反,下面的示例从正确识别为 from 表的行中删除行,因为该表名由其所有者的名称限定:

DELETE zelaine.from;

如果在数据库服务器上设置了 DELIMIDENT 环境变量,则代替的变通方法为使用双引号(")作为分隔符。

DELETE "from";

这通过指示 fromSQL 标识符,而不是字符串文字或 SQL 关键字。

尽管有这些解决方法,如果您避免声明 SQL 关键字作为表、视图或其它数据库对象的标识符,那么您的代码将更容易阅读和维护。