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.