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

       

Несколько Результирующих Наборов


Хранимая процедура Sybase, Oracle, DB2 или ODBC может создавать несколько результирующих наборов. В этом случае хранимая процедура предоставляет один resultSet -объект для каждого набора.

Предположим, Ваша хранимая процедура выполняет такие операторы SQL:

select name from customers where id = 6767
select * from orders where id = 6767

Вы можете использовать несколько resultSet -объектов, генерируемых этими операторами, таким образом:

// Этот оператор нужен для DB2, ODBC и Sybase.

poolobj.storedProcArgs("GetCustOrderInfo","IN");

spobj = connobj.storedProc("GetCustOrderInfo",6767);

if ( spobj && (connobj.majorErrorCode() == 0) ) {

resobj1 = spobj.resultSet();


   // Перед тем как продолжить, убедитесь, что результирующий набор существует.

   if ( resobj1 && (connobj.majorErrorCode() == 0) ) {

      // Первый результирующий набор возвращает только один ряд.

      // Убедитесь, что ряд содержит данные.
       rowexists = resobj1.next();
      if ( rowexists )

         write("<P>Customer " + resobj1.name +

             " has the following orders:</P>");
      resobj1.close();

      // Второй результирующий набор возвращает один ряд для каждого заказа,       // помещённого пользователем. Убедитесь, что ряды содержат данные.


      resobj2 = spobj.resultSet();
       var i = 0;       if ( resobj2 && (connobj.majorErrorCode() == 0) ) {
          write("\nOrder# Quantity Total</P>");
          while(resobj2.next()) {
             write(resobj2.orderno + " " + resobj2.quantity
                + " " + resobj2.Totalamount + "</P>");

            i++;
          }
         resobj2.close();

         write("Customer has " + i + " orders.</P>");

      }
      else write("Customer has no orders.</P>");
   }
}

spobj.close();

В качестве примера использования нескольких ref-курсоров Oracle в хранимой процедуре см. описание класса Resultset в книге

Серверный JavaScript. Справочник.



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