Объект resultSet не является бесконечно действующим. Вообще, когда хранимая процедура стартует, не допускается никакое взаимодействие между клиентом БД и сервером БД, пока хранимая процедура не завершит выполнение. Есть три ситуации, когда результирующий набор является недействующим:
resobj = spobj.resultSet();
database.commitTransaction();
// Неверно! Результирующий набор больше не действует!
col1 = resobj[0];
Для Sybase, ODBC и DB2 Вы обязаны запросить resultSet -объекты до вызова методов returnValue или outParameters объекта хранимой процедуры. Если Вы вызвали один из этих методов, Вы не сможете больше получать данные из результирующего набора и не сможете получить дополнительные результирующие наборы. См. о работе этих методов раздел .
resobj = spobj.resultSet();
retval = spobj.returnValue();
// Неверно! Результирующий набор больше не действует!
col1 = resobj[0];
Для Sybase Вы обязаны запросить resultSet -объекты до вызова методов cursor или SQLTable ассоциированного соединения. Как только Вы вызовете cursor или SQLTable, результирующий набор станет недоступен. Например, следующий код неверен:
curobj = database.cursor ("select * from orders");
// Неверно! Результирующий набор больше не доступен!
col1 = resobj[0];
Для ODBC соблюдаются несколько иные ограничения. Вы также обязаны работать с resultSet -объектами до вызова методов cursor или SQLTable ассоциированного соединения. В ODBC, если Вы получаете курсор, выполняете доступ к результирующему набору, а затем используете курсор, Cursor -объект становится недоступным. Например, следующий код неверен:
curobj = database.cursor ("select * from orders");
col1 = resobj[0]; // Неверно! Курсор больше не доступен.
curobj.next();