今天从数据库导数据时,遇到了一个"
ORA-00972: 标识符过长
"错误,特此记录解决方案如下。
1、报错截图
2、原因分析及解决方案
由于字段别名过长导致,将字段别名缩减即可解决报错
比如我的原始SQL如下:
SELECT ORDER_NUM AS "申请单号",
EMP_NAME AS "申请人",
CREATE_TIME AS "申请日期",
EXTRACTVALUE(DOCUMENT_DATA, '/root/empCompany') AS "所属公司",
EXTRACTVALUE(DOCUMENT_DATA, '/root/empDept') AS "所属部门",
EXTRACTVALUE(DOCUMENT_DATA, '/root/IT_danger') AS "需求方案风险及技术说明"
FROM dat_document d
WHERE d.form_name ='FM_IT19_01'
AND d.ORDER_NUM = 'IT1920200828002'
AND TO_CHAR(d.create_time,'yyyy-MM-dd') BETWEEN '2020-01-01' AND '2020-10-31';
将"需求方案风险及技术说明"缩减成"需求方案风险"即可
修改后SQL如下:
SELECT ORDER_NUM AS "申请单号",
EMP_NAME AS "申请人",
CREATE_TIME AS "申请日期",
EXTRACTVALUE(DOCUMENT_DATA, '/root/empCompany') AS "所属公司",
EXTRACTVALUE(DOCUMENT_DATA, '/root/empDept') AS "所属部门",
EXTRACTVALUE(DOCUMENT_DATA, '/root/IT_danger') AS "需求方案风险"
FROM dat_document d
WHERE d.form_name ='FM_IT19_01'
AND d.ORDER_NUM = 'IT1920200828002'
AND TO_CHAR(d.create_time,'yyyy-MM-dd') BETWEEN '2020-01-01' AND '2020-10-31';
3、总结
Oracle中表名,列名,标识列字符不能超过30个字符。
其中中文不能超过10个,字符不能超过30个。
参考文章
https://www.cnblogs.com/godtrue/p/3791591.html
java.sql.SQLException: ORA-00972: 标识符过长ORA-00972: 标识符过长博客申明ORA-00972: 标识符过长代码提要ORA-00972: 标识符过长异常原因
ORA-00972: 标识符过长博客申明
每个人的代码差异不同,不代表所有问题错误都出自于此,我只分享我出现问题的场景及原因
以下sql使用的连接方式是jdbctemplate
ORA-00972: 标识符过长代码提要
PreparedStatementCallback; bad SQL gram
1.原因分析
出现该问题一般是表名称、列命名或者别名过长,超出了oracle数据库的限制。oracle数据库版本在12.1之前的,包括12.1名称限制长度为30个字符串。12.2及以后修改限制长度为128个字符串。
2.解决方法
开发过程中遇到此问题可以修改自己的sql语句,保证字段长度在限制之内。
数据导入出现此问题一般只能更换高版本的数据库,不然无法正常导入数据。
习惯了mysql,SqlServer数据库的我,因为某些不可抗力的原因需要使用oracle,从头学起,发现坑还是蛮多的。不说了
select u.* from sys_user u join sys_r_role_user ru on u.u_id = ru.o_id join sys_role r on r.role_id = ru.role_id
where r.r_name = “行政人事司_督查处处员”;
由于其中的双引号导致出现“标识符过长”错误。
将“”换成”即可!
用ORACLE数据库的时候,会出现标识符过长的异常。Unhandled exception. System.Exception: ORA-00972: 标识符过长ORA-06512: 在 line 26---> Oracle.ManagedDataAccess.Client.OracleException (0x80004005): ORA-00972: 标识符过长ORA-06512: 在 ...
ORA-00972 标识过长 今天在做项目时,突然出现不能插入的问题,报“ORA-00972 标识过长‘错误。 从网上看说是是数据库中对象名太长30CH 我自己检查了一下数据库表明,索引名,字段名名称都是很简短的。 发现一个规律,就是导入5-10数据异常,但是导入其他的数据时没有问题的。
ORA-00972 identifier is too long
1. 出现的情况其一(在pl/sql创建序列的时候出现)
当你在创建序列的时候出现这问题一般是你的序列名称过长了**(序列的名称长度为30个字符)**
解决方法:将名称控制在30个字符之内
2. 出现的情况其二(在plsql添加数据时出现)
这里你要排查两点:
第一点:看你是否设置的类型是否与你添加的类型是否一致。
第二...
--函数组合的时候要注意括号的匹配,如果括号不匹配,则会把)后面的都认定为别名,会超过长度报错
SELECT T.ID, to_char((nvl(num1, 0)+nvl(num2, 0)), 'FM999,999...
ORA-00972: identifier is too long 问题处理
关于这个错误从报错提示来看,就是标识位置字段太长了,一般出现在别名长度问题上。这种情况对字段做出些修改即可。还有另外一种情况,也会报相同的错误,一条SQL可以在客户端工具如navicat,PLSQL等执行,但是却无法在SQL Plus中执行。出现这种情况一般是字符集的问题。
测试流程:
1)在SQL Plus中执行
SYS@proe>SELECT
a.tablespace_name "表空间名",
select * from table_test t where t.id=e18bdc3d29ab49cd946b9aa4288d73d3
请把字符串用单引号 括起来
select * from table_test t where t.id='e18bdc3d29ab49cd946b9aa4288d73d3'
如果是ibatis的框架请注意$与#的区别
比如xml 里面是${id},改为#{id}
执行SQL查询报:“ORA-00972:标识符过长”错误。 执行SQL: SELECT T.F_FTBS,
T.F_TZMC "X组/XXXX/XXXX名称",
T.F_XXSJ 详细时间
FROM XXXXXXX T, XXXXXXXXX TB
WHERE T.F_XXXXXX = TB.F_XXXXXX
AND TB.F_JH...
ORA-00972: identifier is too long这个错误最普通的原因就是字段太长了。
但是还有一种其他的情况:
不知道你是否遇到过这样的情况,一个sql语句,在plsqldeveloper中可以执行,但是在sqlplus中执行就报错ORA-00972: identifier is too long
这是因为字符集的问题。
看下面的例子:
SQL> SELECT
Oracle 11G SQL 写好的脚本执行后报错:ORA 00972 标识符过长
可能的原因一:
select 语句中的字段别名太长,中文字符别名最长为10个汉字,简化别名名称,问题得到解决。
可能的原因二:
字符集导致,这种情况下,可能会发现SQL语句没有任何语法、逻辑问题,但是用PL SQL执行脚本总是提示“ORA-00972: identifier is too long”
解决...
在存储过程中使用EXECUTE IMMEDIATE或者 OPEN 游标 FOR 的方式执行sql字符串时,对于字符串的控制要妥当。
CREATE OR REPLACE PROCEDURE TEST_20200603(
NM_IN VARCHAR;
RESULT_CURSOR OUT CURSOR
.......
V_SQL VARCHAR(2000);
BECIN
V_SQL :='SELECT * FROM TAB t WHERE t.nm ='||NM_IN;
OPEN RESULT_C