ORA-00972标识符的别名列名太长


81

我有一个查询,如:

SELECT column as averyveryveryverylongalias (more than 30 characters)
   FROM Table_name

它返回错误ORA-00972标识符太长,是否有任何提示可以使其工作而又不缩短别名?

谢谢

Answers:


104

不可以,在Oracle 12.2版之前,标识符的长度不能超过30个字符。请参见《 Oracle SQL语言参考》

但是,从版本12.2开始,它们的最大长度为128个字节。(注意:字节,而不是字符)。


23
出于好奇,有人知道此限制来自何处,而限制从未被放宽吗?确实让我感到震惊的是,没有一个百万美元的Oracle付费客户曾经要求过此功能(现在请不要
误解

10
好吧,我能有这么问:stackoverflow.com/questions/1378133/...
phtrivier

我也遇到过这种情况。我有一个名称为length = 32的表列。但是,到底为什么表列名称允许超过30个字符,而同时不允许使用标识符呢?这些限制应该并存,对吗?这种情况怎么会出现?
Vering

@Vering是否超过30个字符或超过30个字节?有一个奇怪的错误,如果最后一个字符是多字节,则标识符可能会略大于30个字节。
乔恩·海勒

@JonHeller:我很确定这是30个字符/ 32个字符
Vering

12

该错误也是由引号和单个quto的古怪处理引起的。要包含在查询的单引号,用加倍的单引号。

这行不通

select dbms_xmlgen.getxml("Select ....") XML from dual;

还是这个

select dbms_xmlgen.getxml('Select .. where something='red'..') XML from dual;

但这确实有效

select dbms_xmlgen.getxml('Select .. where something=''red''..') XML from dual;

标记更改了我的示例,它应该等于单引号单引号红色单引号单引号
迈克·卡明斯

5

Oracle存储标识符名称的对象(例如,用户的表名存储在名为USER_TABLES的表中,用户的列名存储在名为USER_TAB_COLUMNS的表中)具有NAME列(例如TABLE_NAME在USER_TABLES中),大小为Varchar2(30)...并且在所有系统表的对象或标识符中都是相同的-

 DBA_ALL_TABLES         ALL_ALL_TABLES        USER_ALL_TABLES
 DBA_PARTIAL_DROP_TABS  ALL_PARTIAL_DROP_TABS USER_PARTIAL_DROP_TABS
 DBA_PART_TABLES        ALL_PART_TABLES       USER_PART_TABLES 
 DBA_TABLES             ALL_TABLES            USER_TABLES           
 DBA_TABLESPACES        USER_TABLESPACES      TAB
 DBA_TAB_COLUMNS      ALL_TAB_COLUMNS         USER_TAB_COLUMNS 
 DBA_TAB_COLS         ALL_TAB_COLS            USER_TAB_COLS 
 DBA_TAB_COMMENTS     ALL_TAB_COMMENTS        USER_TAB_COMMENTS 
 DBA_TAB_HISTOGRAMS   ALL_TAB_HISTOGRAMS      USER_TAB_HISTOGRAMS 
 DBA_TAB_MODIFICATIONS  ALL_TAB_MODIFICATIONS USER_TAB_MODIFICATIONS 
 DBA_TAB_PARTITIONS   ALL_TAB_PARTITIONS      USER_TAB_PARTITIONS

5

我将Argos报表系统用作前端,将Oracle用作后端。我刚遇到此错误,它是由一个字符串引起的,该字符串在开始处带有双引号,在结尾处带有单引号。用单引号代替双引号解决了该问题。


0

如果您最近将springboot升级到1.4.3,则可能需要更改yml文件:

yml在1.3中:

jpa: 
  hibernate: 
    namingStrategy: org.hibernate.cfg.EJB3NamingStrategy

yml在1.4.3中:

jpa: 
  hibernate: 
    naming: physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

-2

正如其他人所提到的那样,Oracle SQL中的名称必须小于或等于30个字符。我要补充一点,该规则不仅适用于表名称,而且还适用于字段名称。所以你有它。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.