ORA-00972: identifier is too long 问题处理
关于这个错误从报错提示来看,就是标识位置字段太长了,一般出现在别名长度问题上。这种情况对字段做出些修改即可。还有另外一种情况,也会报相同的错误,一条SQL可以在客户端工具如navicat,PLSQL等执行,但是却无法在SQL Plus中执行。出现这种情况一般是字符集的问题。
测试流程:
1)在SQL Plus中执行
SYS@proe>SELECT
a.tablespace_name "表空间名",
total / 1024 / 1024 "表空间大小单位M",
free / 1024 / 1024 "表空间剩余大小单位M",
(total - free) / 1024 / 1024 "表空间使用大小单位M",
Round(
(total - free) / total,
4
) * 100 "使用率 [[%]]"
FROM
(
SELECT
tablespace_name,
Sum(bytes) free
FROM
DBA_FREE_SPACE
GROUP BY
tablespace_name
) a,
(
SELECT
tablespace_name,
Sum(bytes) total
FROM
DBA_DATA_FILES
GROUP BY
tablespace_name
) b
WHERE
a.tablespace_name = b.tablespace_name; 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 28 29 30
a.tablespace_name "表空间名",
*
ERROR at line 2:
ORA-00972: identifier is too long
2)在navicat中执行
可以看到在navicat中可以正常执行,但是在sqlplus中报错。
解决办法:
重新定义环境变量
[oracle@server1 ~]$ export NLS_LANG='american_america.AL32UTF8'
SYS@proe>SELECT
a.tablespace_name "表空间名",
total / 1024 / 1024 "表空间大小单位M",
free / 1024 / 1024 "表空间剩余大小单位M",
(total - free) / 1024 / 1024 "表空间使用大小单位M",
Round(
(total - free) / total,
4
) * 100 "使用率 [[%]]"
FROM
(
SELECT
tablespace_name,
Sum(bytes) free
FROM
DBA_FREE_SPACE
GROUP BY
tablespace_name
) a,
(
SELECT
tablespace_name,
Sum(bytes) total
FROM
DBA_DATA_FILES
GROUP BY
tablespace_name
) b
WHERE
a.tablespace_name = b.tablespace_name; 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
表空间名 表空间大小单位M 表空间剩余大小单位M 表空间使用大小单位M 使用率 [[%]]
--------------- --------------- ------------------- ------------------- --------------
SYSAUX 610 33.0625 576.9375 94.58
UNDOTBS1 90 67.4375 22.5625 25.07
USERS 6.25 .875 5.375 86
TBS_TRAN 100 98.875 1.125 1.13
SYSTEM 750 1 749 99.87
EXAMPLE 346.25 36.0625 310.1875 89.58
TEST_1 20 19 1 5
7 rows selected.