[Содержание] [Предыдущая] [Следующая] [Индекс]

Resultset

Представляет виртуальную таблицу, созданную, при выполнении сохраненной процедуры.

Объект server-side
Реализовано в Netscape Server 3.0

Создание

Методом resultSet объекта Stproc. Объект Resultset не имеет конструктора.

Описание

Для Sybase, Oracle, ODBC и DB2 сохраненной процедуры, объект сохраненной процедуры имеет один объект набора результатов для каждого выражения SELECT, выполненного сохраненной процедурой. Для Informix сохраненной процедуры, объект сохраненной процедуры всегда имеет один объект набора результатов.

Набор результатов имеет свойство для каждого столбца в выражении SELECT, используемого, чтобы генерировать набор результатов. Для Sybase, Oracle и ODBC сохраненной процедуры, Вы можете обратиться к этим свойствам по имени столбца в виртуальной таблице. Для Informix и DB2 сохраненной процедуры, столбцы не именованы. Для этих баз данных, Вы должны использовать числовой индекс, чтобы обратиться к столбцу.

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

  1. Если Вы создаете набор результатов как часть транзакции, Вы должны закончить использовать набор результатов в течение этой транзакции. Как только Вы или передаете или откатываете назад транзакцию, Вы не можете получить больше данных из набора результатов, и Вы не можете получить любые дополнительные наборы результатов. Например, следующий код запрещен:
    database.beginTransaction();
    spobj = database.storedProc("getcusts");
    resobj = spobj.resultSet();
    database.commitTransaction();
    /* Запрещено! Набор результатов больше недоступен! */
    col1 = resobj[0];

  2. Вы должны восстановить объекты набора результатов прежде, чем Вы вызываете методы returnValue или outParameters объекта сохраненной процедуры. Как только Вы вызываете любой из этих методов, Вы больше не можете получить данные из набора результатов, и Вы не можете получить любые дополнительные наборы результатов.
    spobj = database.storedProc("getcusts");
    resobj = spobj.resultSet();
    retval = spobj.returnValue();
    /* Запрещено! Набор результатов больше недоступен! */
    col1 = resobj[0];

  3. Точно так же Вы должны восстановить объекты набора результатов прежде, чем Вы вызываете связанные методы cursor или SQLTable объекта Connection. Например, следующий код запрещен:
    spobj = database.storedProc("getcusts");
    cursobj = database.cursor("SELECT * FROM ORDERS;");
    /* Запрещено! Набор результатов больше недоступен! */
    resobj = spobj.resultSet();
    col1 = resobj[0];
Когда работа с объектом Resultset закончена, используйте метод close, чтобы закрыть его и освободить память, которую он использует. Если Вы выпускаете подключение, которое имеет открытый набор результатов, двигатель времени выполнения ждет, пока набор результатов не будет закрыт перед фактическим освобождением подключения.

Если Вы явно не закрываете набор результатов методом close, двигатель времени выполнения JavaScript на сервере автоматически пробует закрыть все открытые наборы результатов, когда связанные объекты database или DbPool выходят из области видимости. Это может излишне связывать ресурсы системы. Это может также привести к непредсказуемым результатам.

Вы можете использовать свойство prototype класса Resultset, чтобы добавить свойство ко всем образцам Resultset. Если Вы делаете так, то добавление применяется ко всем объектам Resultset, выполняющимся во всех приложениях на Вашем сервере, не только в отдельном приложении, которое сделало изменение. Это позволяет Вам разворачивать возможности этого объекта для всего Вашего сервера.

Резюме Свойств

prototype
Позволяет добавление свойств к объекту Resultset.

Резюме Методов

close
Закрывает объект набора результатов.
columnName
Возвращает имя столбца в наборе результатов.
columns
Возвращает число столбцов в наборе результатов.
next
Перемещает текущую строку к следующей строке в наборе результатов.

Примеры

Допустим, что Вы имеете следующую Oracle сохраненную процедуру:

create or replace package timpack 
as type timcurtype is ref cursor return customer%rowtype;
type timrentype is ref cursor return rentals%rowtype;
end timpack;
create or replace procedure timset4(timrows1 in out timpack.timcurtype, timrows in out timpack.timrentype) 
as begin
open timrows for select * from rentals;
open timrows1 for select * from customer;
end timset4;
Выполнение этой сохраненной процедуры создает два набора результатов, к которым Вы можете обращаться. В следующем фрагменте кода набор результатов resobj1 имеет строки, возвращенные ссылкой на курсор timrows, и набор результатов resobj2 имеет строки, возвращенные ссылкой на курсор timrows1.

spobj = database.storedProc("timset4");
resobj1 = spobj.resultSet();
resobj2 = spobj.resultSet();

Свойства

prototype

Представляет прототип для этого класса. Вы можете использовать прототип, чтобы добавлять свойства или методы ко всем образцам класса. Для информации о прототипах, смотрите Function.prototype.

Свойство объекта Resultset
Реализовано в LiveWire 1.0

Методы

close

Закрывает набор результатов и освобождает распределенную память.

Метод объекта Resultset
Реализовано в Netscape Server 3.0

Синтаксис

close()

Параметры

Нет.

Возвращает

0, если запрос был успешен; иначе, ненулевой код состояния, основанный на любом сообщении об ошибках, переданном базой данных. Если метод возвращает ненулевой код состояния, используйте связанные методы majorErrorCode и majorErrorMessage, чтобы интерпретировать причину ошибки.

Описание

Метод close закрывает курсор или набор результатов и освобождает используемую память. Если Вы явно не закрываете курсор или набор результатов методом close, двигатель времени выполнения JavaScript на сервере автоматически закрывает все открытые курсоры и наборы результатов, когда соответствующий объект client выходит из области видимости.

Примеры

Следующий пример создает курсор rentalSet, выполняет некоторые операции с ним, и затем закрывает его методом close.

// Создаем объект Cursor
rentalSet = database.cursor("SELECT * FROM rentals")
// Выполняем операции с курсором
cursorOperations()
// Закрываем курсор
err = rentalSet.close()

Смотрите также

Cursor

columnName

Возвращает имя столбца в наборе результатов, соответствующего определенному номеру.

Метод объекта Resultset
Реализовано в Netscape Server 3.0

Синтаксис

columnName (n)

Параметры

n
Нуль-основанное целое число, соответствующее столбцу в запросе. Первый столбец в наборе результатов - 0, второй - 1, и так далее.

Возвращает

Имя столбца. Для Informix сохраненной процедуры, этот метод для объекта Resultset всегда возвращает строку "Expression".

Если Ваше выражение SELECT использует подстановочный знак (*), чтобы выбрать все столбцы в таблице, метод columnName не гарантирует порядок, в котором будут находиться столбцы. То есть предположим, что Вы имеете выражение:

resSet = stObj.resultSet("select * from customer");
Если таблица customer имеет 3 столбца, ID, NAME, и CITY, Вы не можете сообщить раньше срока, который из этих столбцов соответствует resSet.columnName(0). (Конечно, Вам гарантируют, что последовательные вызовы columnName имеют тот же самый результат.) Если порядок имеет значение, Вы можете взамен жестко задавать имена столбцов в выражении SELECT, как в следующем выражении:

resSet = stObj.resultSet("select ID, NAME, CITY from customer");
С этим выражением, resSet.columnName(0) равно ID, resSet.columnName(1) равно NAME, и resSet.columnName(2) равно CITY.

Примеры

Следующий пример присваивает имя первого столбца курсора customerSet переменной header:

customerSet=database.cursor(SELECT * FROM customer ORDER BY name)
header = customerSet.columnName(0)

columns

Возвращает число столбцов в наборе результатов.

Метод объекта Resultset
Реализовано в Netscape Server 3.0

Синтаксис

columns()

Параметры

Нет.

Возвращает

Число именованных и неименованных столбцов.

Примеры

Смотрите Пример 2 объекта Cursor для примера использования метода columns с массивом cursorColumn.

Следующий пример возвращает число столбцов в курсоре custs:

custs.columns()

next

Перемещает текущую строку к следующей строке в наборе результатов.

Метод объекта Resultset
Реализовано в Netscape Server 3.0

Синтаксис

next()

Параметры

Нет.

Возвращает

False, если текущая строка последняя; иначе, true.

Описание

Первоначально, указатель (или текущая строка) для курсора или набора результатов установлен перед первой возвращенной строкой. Используйте метод next, чтобы перемещать указатель по записям в курсоре или наборе результатов. Этот метод перемещает указатель на следующую строку и возвращает true пока имеется другая доступная строка. Когда курсор или набор результатов достигает последней строки, метод возвращает false. Обратите внимение, что если курсор пуст, этот метод всегда возвращает false.

Примеры

Пример 1. Этот пример использует метод next, чтобы переместиться к последней строке в курсоре. Переменная x инициализирована в true. Когда указатель находится в последней строке курсора, метод next возвращает false и завершает цикл while.

customerSet = database.cursor("select * from customer", true)
x = true
while (x) {
   x = customerSet.next() }
Пример 2. В следующем примере, курсор rentalSet содержит столбцы с именами videoId, rentalDate и dueDate. Метод next вызывается в цикле while, который выполняет итерации над каждой строкой в курсоре. Когда указатель находится на последней строке в курсоре, метод next возвращает false и завершает цикл while.

Этот пример показывает три столбца курсора в таблице HTML:

<SERVER>
// Создаем объект Cursor
rentalSet = database.cursor("SELECT videoId, rentalDate, returnDate
   FROM rentals")
</SERVER>
// Создаем таблицу HTML
<TABLE BORDER>
<TR>
<TH>Идентификатор Видео</TH>
<TD>Дата Ренты</TD>
<TD>Due Date</TD>
</TR>
<SERVER>
// Выполняем итерации над каждой строкой в курсоре
while (rentalSet.next()) {
</SERVER>
// Отображаем значения курсора в таблице HTML
   <TR>
   <TH><SERVER>write(rentalSet.videoId)</SERVER></TH>
   <TD><SERVER>write(rentalSet.rentalDate)</SERVER></TD>
   <TD><SERVER>write(rentalSet.returnDate)</SERVER></TD>
   </TR>
// Завершаем цикл while
<SERVER>
}
</SERVER>
// Конец таблицы
</TABLE>


[Содержание] [Предыдущая] [Следующая] [Индекс]

Последняя Модификация: 10/31/97 16:36:13


Права © 1997 Netscape Communications Corporation



Все мессаги сюда:yanich@inbox.ru
Hosted by uCoz