昨天,在系统修改了一下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 ……
在Java编程中,`java.sql.SQLException: 结果集已耗尽` 是一个常见的错误提示,通常出现在处理数据库查询结果集时。这个异常表明程序试图访问已经没有数据的结果集中下一行,即所有行已经被遍历完,尝试访问超出范围...
标题中的“Caused by: java.sql.SQLException: JZ0SJ: 没有在此数据库中发现元数据存取器信息。 请按 jConnect 文档中所述安装”是一个典型的错误信息,表明在尝试使用Java数据库连接(JDBC)驱动程序访问数据库时...
在oracle里面运行一下,解决Exception java.sql.SQLException ORA-00600 内部错误代码
### 服务器出现java.sql.SQLException No suitable driver found for 的解析与解决方案 #### 问题背景 在进行Servlet开发过程中,尤其是在尝试连接数据库时,遇到了一个常见的异常:“java.sql.SQLException: No ...
在Oracle数据库操作中,我们经常会遇到与`java.sql.SQLException`相关的异常。这个异常通常是Java应用程序在尝试与Oracle数据库进行交互时出现的问题。本篇将详细探讨`java.sql.SQLException`的各种常见类型及其解决...
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 ...
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
8. **异常处理**:在处理数据库操作时,必须捕获SQLException和其他可能的异常,进行合适的错误处理和日志记录。 9. **安全性**:使用PreparedStatement防止SQL注入攻击,同时对敏感信息(如密码)进行加密存储和...
主要给大家介绍了关于MySQL存储表情时报错:java.sql.SQLException: Incorrect string value: 'xF0x9Fx92xA9x0Dx0A...'的解决方法,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
本文主要介绍了关于MySQL存储表情报错:java.sql.SQLException: Incorrect string value: ‘\xF0\x9F\x92\xA9\x0D\x0A…’的相关解决方法,分享出供大家参考学习,下面话不多说了,来一起看看详细的介绍: ...
1. **驱动未导入**:Java运行环境的类路径中没有包含MySQL JDBC驱动的`.jar`文件。 2. **版本不匹配**:你使用的JDBC驱动版本可能与你的MySQL服务器版本不兼容。 3. **加载问题**:驱动没有被正确地加载到Java虚拟机...
java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES) 提示的是用户访问被拒绝,原因是密码不正确,但是我们明明配置的是正确的密码,原因就在yml中: spring: datasource: ...
import java.sql.SQLException; ``` 3. **注册驱动**:在使用MySQL驱动前,需要通过`Class.forName()`方法注册驱动。尽管在较新的JDBC版本中这个步骤可以省略,但为了兼容性,很多示例代码仍然包含它: ```java ...
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
当你尝试连接到MySQL数据库时,可能会遇到一个特定的异常:“java.sql.SQLException: The server time zone value ‘?й???????’ is unrecognized or represents more than one time zone”。这个错误表明服务器...
总的来说,KingbaseV8 JDBC驱动为Java开发者提供了方便、高效的方式来连接和操作KingbaseV8数据库,确保了在不同Java版本下的兼容性,是开发过程中不可或缺的一部分。在实际项目中,根据具体运行环境选择合适的JDBC...
绝对好用的9i驱动包+10g驱动包 解决java.sql.SQLException: 不支持的特性 解决oracle.jdbc.driver.OracleDatabaseMetaData.supportsGetGeneratedKeys()Z异常 等等
问题是这样的…我在VS2008直接运行打开网页,可以连接... 异常详细信息: System.Data.SqlClient.SqlException: 无法打开登录所请求的数据库 “TakeClass”。登录失败。 用户 ‘2D2727E2578F446\ASPNET’ 登录失败。