相关文章推荐

今天从数据库导数据时,遇到了一个" 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
 
推荐文章