昨天,在系统修改了一下SQL,报出了这样一个异常。网上找了一下资料,大部分是说驱动的版本太旧,需要升级。
Caused by: java.sql.SQLException: OALL8 处于不一致状态
at oracle.jdbc.driver.SQLStateMapping.newSQLException(SQLStateMapping.java:70)
at oracle.jdbc.driver.DatabaseError.newSQLException(DatabaseError.java:133)
但是目前的情况是:
1、仅修改SQL语句被修改过,驱动不变。——证明非驱动问题
2、设置更有大的回滚字段,但由于没有管理员权限,此路无法验证。
3、只有在使用like情况,且最终有数据下才出现。出现异常后,会导致其他SQL也出现异常,表现为
11/05/25 09:43:47 ERROR [[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'] JDBCTransaction.rollback(168) | JDBC rollback failed
java.sql.SQLRecoverableException: 无法从套接字读取更多的数据
at oracle.jdbc.driver.SQLStateMapping.newSQLException(SQLStateMapping.java:101)
at oracle.jdbc.driver.DatabaseError.newSQLException(DatabaseError.java:133)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:199)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:263)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:271)
select * from (select EIPOD_ID, /*委托订单主键*/
EIPOD_BK_VESSEL, /*船名*/
EIPOD_BK_VOYAGE, /*航次*/
EIPOD_WB_NO, /*运单号*/
EIPOD_DISC_PORT_ID, /*卸载港*/
EIPOD_CONSIGNEE_NAME, /*收货人名称*/
CNT_NOS, /*集装箱号*/
GROSS_WEIGHT, /*毛重*/
EXECUTIVES, /*运箱人*/
ADDRESSES, /*地址*/
RELEASE_WEIGHT /*实际毛重*/
from (select EIPOD.CREATE_TIME,
EIPOD.EIPOD_ID, /*委托订单主键*/
EIPOD.EIPOD_BK_VESSEL, /*船名*/
EIPOD.EIPOD_BK_VOYAGE, /*航次*/
EIPOD.EIPOD_WB_NO, /*运单号*/
EIPOD.EIPOD_DISC_PORT_ID, /*卸载港*/
EIPOD.EIPOD_CONSIGNEE_NAME, /*收货人名称*/
GET_CNT_NO(EIPOD.EIPOD_ID, ',') CNT_NOS, /*集装箱号*/
nvl((select sum(EIPCI.EIPCI_GROSS_WEIGHT)
from EIP_CTNINFO EIPCI
where EIPCI.EIPCI_EIPOD_ID = EIPOD.EIPOD_ID),
0) GROSS_WEIGHT, /*毛重*/
GET_DELIVER_EXECUTIVES(EIPOD.EIPOD_ID, ',') EXECUTIVES, /*运箱人*/
GET_DELIVER_ADDRESSES(EIPOD.EIPOD_ID, ',') ADDRESSES, /*地址*/
nvl((select sum(EIPMP_GROSS_WEIGHT)
from EIP_MUTIL_PLACE EIPMP
where exists
(select 1
from EIP_CTNINFO EIPCI
where EIPCI.EIPCI_ID = EIPMP.EIPMP_EIPCI_ID
and EIPCI.EIPCI_EIPOD_ID = EIPOD.EIPOD_ID)),
0) RELEASE_WEIGHT /*实际毛重*/
from EIP_ORDER EIPOD
left join SCH_VOYAGE SCHVO
on EIPOD.EIPOD_SCHVO_ID = SCHVO.SCHVO_ID
left join VES_SHIP_BASE_INFO VESSI
on SCHVO.SCHVO_VESSEL_ID = VESSI.VESSI_ID
where EIPOD.EIPOD_BK_CONFIRMED_FLAG = '4' /*订舱状态为确认*/
and EIPOD.EIPOD_IS_VALID != '0' /*0-非数据逻辑删除*/
and EIPOD.EIPOD_WB_NO like 'SUN1104230007' || '%'
and (( 1=1 )) /*数据权限*/
)
where GROSS_WEIGHT > 0
order by CREATE_TIME desc /*按时间倒叙排列*/) where rownum <= 20
通过不断的测试,发现CROSS_WEIGHT这个条件起到比较大的作用。回想到回滚字段问题,猜测有可能是CROSS_WEIGHT是使用select子查询的的原因。
修改将select子查询修改为left join (子查询)的方式。测试通过。可以推论确实是由于select子查询引起的,这样的子查询可能是导致了大量的回滚段数据。
问题已经解决,接下去工作是找出两种查询的真正差别是什么,性能如何?
from EIP_ORDER EIPOD
left join SCH_VOYAGE SCHVO
on EIPOD.EIPOD_SCHVO_ID = SCHVO.SCHVO_ID
left join VES_SHIP_BASE_INFO VESSI
on SCHVO.SCHVO_VESSEL_ID = VESSI.VESSI_ID
left join (select EIPCI_EIPOD_ID,sum(EIPCI.EIPCI_GROSS_WEIGHT) EIPCI_GROSS_WEIGHT
from EIP_CTNINFO EIPCI
group by EIPCI.EIPCI_EIPOD_ID) EIP on EIP.EIPCI_EIPOD_ID = EIPOD.EIPOD_ID
分享到:
相关推荐
java.sql.SQLException: 不支持的字符集 (在类路径中添加 orai18n.jar): ZHS16GBK ……
NULL 博文链接:https://listen-raining.iteye.com/blog/1962065
在oracle里面运行一下,解决Exception java.sql.SQLException ORA-00600 内部错误代码
服务器出现java.sql.SQLException No suitable driver found for 的
NULL 博文链接:https://zhang-zling.iteye.com/blog/980488
java.sql.SQLException: null, message from server: “Host ‘223.72.41.7’ is not allowed to connect to this MySQL server” 客户端访问时报错: 解决方法: 1,登陆服务器 mysql> use mysql; //用mysql ...
本文主要介绍了关于MySQL存储表情报错:java.sql.SQLException: Incorrect string value: ‘\xF0\x9F\x92\xA9\x0D\x0A…’的相关解决方法,分享出供大家参考学习,下面话不多说了,来一起看看详细的介绍: ...
oracle ora-各种常见java.sql.SQLException归纳
主要给大家介绍了关于MySQL存储表情时报错:java.sql.SQLException: Incorrect string value: 'xF0x9Fx92xA9x0Dx0A...'的解决方法,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
Q: I am working with ... I am using updateBinaryStream method of resultset to update the BLOB field but it is failing after giving following exception java.sql.SQLException: Internal Error: Unable to
oracle 10g 数据库驱动下载:oracle jdbc dirver
mysql5.6连接驱动jaf,可处理报错java.sql.SQLException: No suitable driver
java.sql.SQLException: Operation not allowed after ResultSet closed java.sql.SQLException: QueryRunner requires a DataSource to be invoked in this way, or a Connection should be passed in
异常错误:java.sql.SQLException: The server time zone value ‘?й???’ is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTime...
该用户与可信 SQL Server 连接无关联。 说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Data.SqlClient....
问题是这样的…我在VS2008直接运行打开网页,可以连接... 异常详细信息: System.Data.SqlClient.SqlException: 无法打开登录所请求的数据库 “TakeClass”。登录失败。 用户 ‘2D2727E2578F446\ASPNET’ 登录失败。
绝对好用的9i驱动包+10g驱动包 解决java.sql.SQLException: 不支持的特性 解决oracle.jdbc.driver.OracleDatabaseMetaData.supportsGetGeneratedKeys()Z异常 等等
Caused by: java.sql.SQLException: java.lang.ClassNotFoundException: org.apache.hive.jdbc.HiveDriver at com.trs.gateway.commons.hive.HiveFeature.getConnection(HiveFeature.java:57) at ...
import java.sql.SQLException; import java.sql.Statement; import java.sql.ResultSet; /** * @author Administrator * */ public class sqlServer { String DBDriver=...