Серверный JavaScript 1.4. Руководство по использованию

       

Когда Можно Использовать Результирующие Наборы


Объект resultSet не является бесконечно действующим. Вообще, когда хранимая процедура стартует, не допускается никакое взаимодействие между клиентом БД и сервером БД, пока хранимая процедура не завершит выполнение. Есть три ситуации, когда результирующий набор является недействующим:

  1. Если Вы создаёте результирующий набор как часть транзакции, Вы обязаны закончить использование результирующего набора в течение выполнения этой транзакции. Если Вы подтвердили транзакцию или выполнили её откат, Вы не сможете получать данные из результирующего набора и не сможете получить дополнительные результирующие наборы. Например, следующий код не допускается:
  2. database.beginTransaction();
    spobj = database.storedProc("getcusts");

    resobj = spobj.resultSet();
    database.commitTransaction();
    // Неверно! Результирующий набор больше не действует!

    col1 = resobj[0];

  3. Для Sybase, ODBC и DB2 Вы обязаны запросить resultSet -объекты до вызова методов returnValue или outParameters объекта хранимой процедуры. Если Вы вызвали один из этих методов, Вы не сможете больше получать данные из результирующего набора и не сможете получить дополнительные результирующие наборы. См. о работе этих методов раздел .

  4. spobj = database.storedProc("getcusts");

    resobj = spobj.resultSet();
    retval = spobj.returnValue();
    // Неверно! Результирующий набор больше не действует!

    col1 = resobj[0];

  5. Для Sybase Вы обязаны запросить resultSet -объекты до вызова методов cursor или SQLTable ассоциированного соединения. Как только Вы вызовете cursor или SQLTable, результирующий набор станет недоступен. Например, следующий код неверен:

  6. spobj = database.storedProc("getcusts");
    resobj = spobj.resultSet();

    curobj = database.cursor ("select * from orders");
    // Неверно! Результирующий набор больше не доступен!

    col1 = resobj[0];

  7. Для ODBC соблюдаются несколько иные ограничения. Вы также обязаны работать с resultSet -объектами до вызова методов cursor или SQLTable ассоциированного соединения. В ODBC, если Вы получаете курсор, выполняете доступ к результирующему набору, а затем используете курсор, Cursor -объект становится недоступным. Например, следующий код неверен:

  8. spbobj = database.storedProc("getcusts");
    resobj = spobj.resulSet();

    curobj = database.cursor ("select * from orders");
    col1 = resobj[0]; // Неверно! Курсор больше не доступен.


    curobj.next();



Содержание раздела