我有一个查询,如:
SELECT column as averyveryveryverylongalias (more than 30 characters)
FROM Table_name
它返回错误ORA-00972标识符太长,是否有任何提示可以使其工作而又不缩短别名?
谢谢
Answers:
不可以,在Oracle 12.2版之前,标识符的长度不能超过30个字符。请参见《 Oracle SQL语言参考》。
但是,从版本12.2开始,它们的最大长度为128个字节。(注意:字节,而不是字符)。
该错误也是由引号和单个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;
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
正如其他人所提到的那样,Oracle SQL中的名称必须小于或等于30个字符。我要补充一点,该规则不仅适用于表名称,而且还适用于字段名称。所以你有它。