如下图所示, SQL查询时报错如下
错误信息:null
Caused exception message is: ORA-01427: 单行子查询返回多个行
错误详细堆栈信息:com.kingdee.bos.SQLDataException: null
Caused exception message is: ORA-01427: 单行子查询返回多个行
at com.kingdee.bos.dao.query.server.SQLDataAccess.getRowSet(SQLDataAccess.java:112)
at rpc_generate._PROXY_com_1_kingdee_1_bos_1_dao_1_query_1_server_1_ISQLDataAccess.pi4(Unknown Source)
at rpc_generate._PROXY_com_1_kingdee_1_bos_1_dao_1_query_1_server_1_ISQLDataAccess.processInvoke(Unknown Source)
at com.kingdee.bos.rpc.impl.ObjectProxy.processInvoke(ObjectProxy.java:177)
at com.kingdee.bos.rpc.impl.RPCService.serviceInvoke(RPCService.java:800)
at com.kingdee.bos.rpc.impl.RPCService.service(RPCService.java:141)
at com.kingdee.bos.rpc.impl.ServiceDispatcher.run(ServiceDispatcher.java:153)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at com.kingdee.bos.rpc.impl.ThreadPoolExecutorReImpl.runWorker(ThreadPoolExecutorReImpl.java:1152)
at com.kingdee.bos.rpc.impl.ThreadPoolExecutorReImpl$Worker.run(ThreadPoolExecutorReImpl.java:622)
at java.lang.Thread.run(Thread.java:662)
Caused by: java.sql.SQLException: ORA-01427: 单行子查询返回多个行
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:111)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:330)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:287)
at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:744)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:215)
at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:809)
at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1038)
at oracle.jdbc.driver.T4CPreparedStatement.executeMaybeDescribe(T4CPreparedStatement.java:849)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1125)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3338)
at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3383)
at com.kingdee.bos.sql.shell.KDPreparedStatement.executeQuery(KDPreparedStatement.java:322)
at com.apusic.jdbc.adapter.PreparedStatementHandle.executeQuery(Unknown Source)
at com.kingdee.bos.dao.query.server.SQLDataAccess.excuteSQL(SQLDataAccess.java:190)
at com.kingdee.bos.dao.query.server.SQLDataAccess.getRowSet(SQLDataAccess.java:80)
... 12 more
Caused by: java.sql.SQLException
java.sql.SQLException: ORA-01427: 单行子查询返回多个行
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:111)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:330)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:287)
at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:744)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:215)
at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:809)
at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1038)
at oracle.jdbc.driver.T4CPreparedStatement.executeMaybeDescribe(T4CPreparedStatement.java:849)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1125)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3338)
at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3383)
at com.kingdee.bos.sql.shell.KDPreparedStatement.executeQuery(KDPreparedStatement.java:322)
at com.apusic.jdbc.adapter.PreparedStatementHandle.executeQuery(Unknown Source)
at com.kingdee.bos.dao.query.server.SQLDataAccess.excuteSQL(SQLDataAccess.java:190)
at com.kingdee.bos.dao.query.server.SQLDataAccess.getRowSet(SQLDataAccess.java:80)
at rpc_generate._PROXY_com_1_kingdee_1_bos_1_dao_1_query_1_server_1_ISQLDataAccess.pi4(Unknown Source)
at rpc_generate._PROXY_com_1_kingdee_1_bos_1_dao_1_query_1_server_1_ISQLDataAccess.processInvoke(Unknown Source)
at com.kingdee.bos.rpc.impl.ObjectProxy.processInvoke(ObjectProxy.java:177)
at com.kingdee.bos.rpc.impl.RPCService.serviceInvoke(RPCService.java:800)
at com.kingdee.bos.rpc.impl.RPCService.service(RPCService.java:141)
at com.kingdee.bos.rpc.impl.ServiceDispatcher.run(ServiceDispatcher.java:153)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at com.kingdee.bos.rpc.impl.ThreadPoolExecutorReImpl.runWorker(ThreadPoolExecutorReImpl.java:1152)
at com.kingdee.bos.rpc.impl.ThreadPoolExecutorReImpl$Worker.run(ThreadPoolExecutorReImpl.java:622)
at java.lang.Thread.run(Thread.java:662)
究其原因是因为我的sql语句有问题,如下所示
StringBuffer sql_fnumber = new StringBuffer();
sql_fnumber.append("select fnumber from T_GL_Voucher where fid = (");
sql_fnumber.append("select FDESTOBJECTID from T_BOT_Relation where FSRCOBJECTID = '");
sql_fnumber.append(id + "')");
IRowSet rs_fnumber = SQLExecutorFactory.getRemoteInstance(sql_fnumber.toString()).executeSQL();
将其更增加 and rownum < 2 条件可以针对性的解决目前的错误
StringBuffer sql_fnumber = new StringBuffer();
sql_fnumber.append("select fnumber from T_GL_Voucher where fid = (");
sql_fnumber.append("select FDESTOBJECTID from T_BOT_Relation where FSRCOBJECTID = '");
sql_fnumber.append(id + "' and rownum < 2)");
IRowSet rs_fnumber = SQLExecutorFactory.getRemoteInstance(sql_fnumber.toString()).executeSQL();
以上就是我关于 SQL查询报错Caused exception message is ORA-01427 单行子查询返回多个行 知识点整理与总结的全部内容,希望对你有帮助。。。。。。。
分割线
网友评论