Получение количества записей в REsultSet

Tony_K
Дата: 23.05.2005 11:59:41
Привет всем!

Мне надо получить количество записей в РезалтСете, в доках ничего не нашел, получаю через цикл, но так и медленнее и некрасиво... есть ли какой нить метод у него для получения количества записей то?
Механизатор из Подмосковья
Дата: 23.05.2005 16:31:27
Тебе придётся твой запрос вызывать дважды (с одинаковым where-критерием). Один раз -- для count(*), второй -- с теми полями, которые ты хочешь видеть в результате.
К сожалению, в динамич. SQL нельзя применять host-переменные, т.е. нельзя сделать так:
select count(*) from MyClass into :xQty
(выдаст ошибку, что типа "INTO: встретился после окончания запроса" )

Вот как можно получить результат ф-ции count(*) в динамич. запросе
(я, правда, сделал это в виде класс-метода; но это не важно сейчас):


Class DEBUG.Stub Extends %Persistent [ ClassType = persistent, ProcedureBlock ]
{
....

ClassMethod SelTest(xClassName) As %Integer
{
s xQty=-1 // если передаваемое имя класса некорректно, в вызвавший модуль вернётся кол-во строк = -1 s xSQLExpr="Select count(*) from "_xClassName
s xResult =##class(%ResultSet).%New()
d xResult.Prepare(xSQLExpr)
d xResult.Execute()
while xResult.Next(){ // Аггрегир. функция count(*) дает РОВНО одну строку.
s xQty=xResult.Data("Aggregate_1") // столбец с таким именем виден в SQL-managere и в терминале при вводе команды d $system.OBJ.Dump(xResult) }
d xResult.Close()
q xQty
}
....
}



В терминале вводим:
w ##class(DEBUG.Stub).SelTest("SomePackage.SomeClass")

В результате должно вернуться -1 (если класса "SomePackage.SomeClass" нету) или что-то больше или равное нулю (число строк в таблице "SomePackage.SomeClass").