我有一个查询,如:
SELECT column as averyveryveryverylongalias (more than 30 characters) FROM Table_name
它返回错误ORA-00972 identifier is too long,有什么技巧可以让它工作而不使别名变短吗?
hmmo2u0o1#
不可以,在Oracle 12.2版之前,标识符的长度不允许超过30个字符。请参阅Oracle SQL语言参考。但是,from version 12.2 they can be up to 128 bytes long.(注:字节,而不是字符)。
fslejnso2#
这个错误也是由于对引号和单引号的古怪处理造成的。要在查询中包含单引号,请使用 doubled 单引号。这样不行
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;
eanckbw93#
Oracle存储标识符名称的对象(例如用户的表名存储在名为USER_TABLES的表中,用户的列名存储在名为USER_TAB_COLUMNS的表中),具有NAME列(例如,USER_TABLES中的TABLE_NAME)大小为Varchar 2(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
cngwdvgl4#
我使用Argos报告系统作为前端,Oracle在后端。我刚刚遇到了这个错误,它是由一个字符串在开始时有一个双引号,在结束时有一个单引号。将双引号替换为单引号解决了这个问题。
a6b3iqyw5#
如果你最近升级了springboot到1.4.3,你可能需要对yml文件进行修改:1.3中的yml:
jpa: hibernate: namingStrategy: org.hibernate.cfg.EJB3NamingStrategy
1.4.3中的yml:
jpa: hibernate: naming: physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
jw5wzhpr6#
正如其他人所提到的,Oracle SQL中的名称必须小于或等于30个字符。我想补充的是,这条规则不仅适用于表名,也适用于字段名。所以,你有它。
6条答案
按热度按时间hmmo2u0o1#
不可以,在Oracle 12.2版之前,标识符的长度不允许超过30个字符。请参阅Oracle SQL语言参考。
但是,from version 12.2 they can be up to 128 bytes long.(注:字节,而不是字符)。
fslejnso2#
这个错误也是由于对引号和单引号的古怪处理造成的。要在查询中包含单引号,请使用 doubled 单引号。
这样不行
或者这个
但这确实有效
eanckbw93#
Oracle存储标识符名称的对象(例如用户的表名存储在名为USER_TABLES的表中,用户的列名存储在名为USER_TAB_COLUMNS的表中),具有NAME列(例如,USER_TABLES中的TABLE_NAME)大小为Varchar 2(30)......并且它在对象或标识符的所有系统表中是统一的--
cngwdvgl4#
我使用Argos报告系统作为前端,Oracle在后端。我刚刚遇到了这个错误,它是由一个字符串在开始时有一个双引号,在结束时有一个单引号。将双引号替换为单引号解决了这个问题。
a6b3iqyw5#
如果你最近升级了springboot到1.4.3,你可能需要对yml文件进行修改:
1.3中的yml:
1.4.3中的yml:
jw5wzhpr6#
正如其他人所提到的,Oracle SQL中的名称必须小于或等于30个字符。我想补充的是,这条规则不仅适用于表名,也适用于字段名。所以,你有它。