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

mch*_*cha 68 sql oracle alias

我有一个像这样的查询:

SELECT column as averyveryveryverylongalias (more than 30 characters)
   FROM Table_name
Run Code Online (Sandbox Code Playgroud)

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

谢谢

Ton*_*ews 91

不,在Oracle 12.2版之前,标识符的长度不得超过30个字符.请参阅Oracle SQL语言参考.

但是,从版本12.2开始,它们最长可达128个字节.(注意:字节,而不是字符).

  • 出于好奇,有谁知道这个限制来自哪里,为什么限制从未放松过?让我感到非常震惊的是,Oracle*的百万美元付费客户都没有要求过这样的功能(现在不要误会我的意思,我很确定有一些深层的技术原因,但仍然......) (22认同)
  • 好的,我本可以问:http://stackoverflow.com/questions/1378133/why-are-oracle-table-column-index-names-limited-to-30-characters (10认同)

小智 11

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

这不行

select dbms_xmlgen.getxml("Select ....") XML from dual;
Run Code Online (Sandbox Code Playgroud)

或者这个

select dbms_xmlgen.getxml('Select .. where something='red'..') XML from dual;
Run Code Online (Sandbox Code Playgroud)

但这确实有效

select dbms_xmlgen.getxml('Select .. where something=''red''..') XML from dual;
Run Code Online (Sandbox Code Playgroud)


Sap*_*shi 5

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

 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
Run Code Online (Sandbox Code Playgroud)


小智 5

我使用 Argos 报告系统作为前端,使用 Oracle 作为后端。我刚刚遇到了这个错误,它是由一个字符串开头带双引号,结尾带单引号引起的。用单引号替换双引号解决了这个问题。