如何处理以保留 Sql 关键字命名的表列?

Posted

技术标签:

【中文标题】如何处理以保留 Sql 关键字命名的表列?【英文标题】:How To Handle Table Column Named With Reserved Sql Keyword? 【发布时间】:2012-07-24 11:33:45 【问题描述】:

我有一个表,其中有一个名为 RANK 的列,这是 Oracle 中的一个关键字。

现在我需要在这个表中插入数据:

insert into mytbl (RANK)
select RANK from other_table

执行此查询时出现以下错误:

ORA-00907: 缺少右括号

如何转义关键字?

【问题讨论】:

@Madhivanan - RANK 是最近才被引入 Oracle 词典的。更改遗留系统的数据模型通常是不可能的。 【参考方案1】:

Oracle 使用双引号 " 转义保留字。

insert into mytbl ("RANK")
select "RANK" 
from other_table

另外一点,Oracle 也需要正确的大小写。

【讨论】:

【参考方案2】:

首先,列名和表名不能使用保留关键字。

Oracle 使用双引号" 来解析保留关键字,以便您可以解析关键字 通过将其放在双引号 "".

insert into mytbl ("RANK")
select "RANK" 
from other_table

【讨论】:

【参考方案3】:

就我而言,我的查询中有 ,。

UPDATE SCHEMA.TABLE SET PART_NO = '1S7F530400', WHERE PART_NO = '1S7?F5304?00';

这应该是:

UPDATE SCHEMA.TABLE SET PART_NO = '1S7F530400' WHERE PART_NO = '1S7?F5304?00';

【讨论】:

【参考方案4】:

前面已经提到过,但要强调的是,必须完全匹配大小写在所有用途中。当我需要提取GROUP 列并对其进行排序时,“组”不起作用。在这两种情况下都必须是“GROUP”,例如

select "GROUP" from PICKLIST
order by "GROUP"

【讨论】:

以上是关于如何处理以保留 Sql 关键字命名的表列?的主要内容,如果未能解决你的问题,请参考以下文章

C# 如何处理以编程方式创建的 ColorAnimation 和 Storyboard?

在 MS SQL Server 中创建作为保留字/关键字的表名 [关闭]

如何处理以编程方式添加的按钮事件? C#

如何处理以数组作为返回值的 go RPC 调用?

如何处理以设置间隔卸载组件以避免内存泄漏

sql [AS]显示具有不同名称的表列(未在原始表中重命名)#SQL