Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Java (http://www.forosdelweb.com/f45/)
-   -   No hay más datos para leer del socket (http://www.forosdelweb.com/f45/no-hay-mas-datos-para-leer-del-socket-693549/)

jessifb88 27/04/2009 06:20

No hay más datos para leer del socket
 
Me sale este error y no tengo ni idea de a qué se puede deber. Hago una consulta a la base de datos para obtener el nº de registros (es un count). Luego según si el count devuelve 1 registro o más de 1 hago una consulta para obtener un id de una tabla o hago otra consulta para obtener los datos de tantas filas como obtuve de número en el count de la primera select. Esta es la traza del error:
StackTrace:
java.sql.SQLException: No hay más datos para leer del socket
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBE rror.java:134)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBE rror.java:179)
at oracle.jdbc.dbaccess.DBError.check_error(DBError.j ava:1160)
at oracle.jdbc.ttc7.MAREngine.unmarshalUB1(MAREngine. java:963)
at oracle.jdbc.ttc7.MAREngine.unmarshalSB1(MAREngine. java:893)
at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:369)
at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol .java:1891)
at oracle.jdbc.ttc7.TTC7Protocol.fetch(TTC7Protocol.j ava:1198)
at oracle.jdbc.driver.OracleStatement.doExecuteQuery( OracleStatement.java:2400)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTi meout(OracleStatement.java:2672)
at oracle.jdbc.driver.OracleStatement.doScrollStmtExe cuteQuery(OracleStatement.java:6944)
at oracle.jdbc.driver.OracleStatement.executeQuery(Or acleStatement.java:578)

Os agradecería que me explicarais a qué se suele deber el error " No hay más datos para leer del socket" y si alguien puede aportar algún dato más, sin duda lo agradeceré.

GreenEyed 27/04/2009 08:29

Respuesta: No hay más datos para leer del socket
 
Suele pasar eso cuando la conexion se ha cerrado y tu sigues intentando usarla. Puede haberla cerrado otro Thread o puede haberla cerrado el servidor por algun motivo (en algunos casos por timeout) pero básicamente el driver de Oracle responde eso cuando el socket ya no responde por que la conexión se ha cerrado.

S!

jessifb88 29/04/2009 01:34

Respuesta: No hay más datos para leer del socket
 
Gracias por tu interés pero cuando la conexión a la base de datos está cerrada el error que me da es: Conexión cerrada. Así que creo que mi problema debe ser otro, porque como ya he dicho el error es No hay más datos para leer del socket. ¿Hay alguna otra posible causa de este error?

jessifb88 08/05/2009 00:13

Respuesta: No hay más datos para leer del socket
 
Descubrí que el error era al <i>consultar</i> la sentencia SQL y dejó de fallar al quitarle esto:
LEFT JOIN
(SELECT SYS_CONNECT_BY_PATH (d_contacto, ', ') AS telefonos, x_id_persona
FROM (SELECT c.x_id_persona, d_contacto, c_tipo,
ROW_NUMBER () OVER (PARTITION BY cp.x_id_persona ORDER BY c_tipo DESC)
rn,
COUNT (*) OVER (PARTITION BY c.x_id_persona) cnt
FROM sv_rh_candidato c
LEFT JOIN
(SELECT x_id_persona, d_contacto, c_tipo
FROM sv_ge_contacto_persona
WHERE c_tipo = 'TM' OR c_tipo = 'TF'
GROUP BY x_id_persona, d_contacto, c_tipo) cp
ON c.x_id_persona = cp.x_id_persona
)
WHERE LEVEL = cnt
START WITH rn = 1
CONNECT BY PRIOR rn = rn - 1 AND PRIOR x_id_persona = x_id_persona) telf
ON p.x_id_persona = telf.x_id_persona

¿Por qué puede dar problemas este left join?

GreenEyed 08/05/2009 05:16

Respuesta: No hay más datos para leer del socket
 
Lo único que se me ocurre es que el join haga que el query sea tan lento que el dirver JDBC cierre la conexion pensando que se ha colgado.

O eso un bug del driver por algun lado, por que una clausula de SQL haciendo que un socket se cierre no es nada normal.

S!


La zona horaria es GMT -6. Ahora son las 01:06.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2025, Jelsoft Enterprises Ltd.