Страница 1 из 1

ROW_NUMBER() и селективная процедура

Добавлено: Вт 08 сен 2020 09:07
Akella
Есть сложная процедура в Firebird 3. Там выборка из нескольких таблиц и т.д. В общем, функцию ROW_NUMBER() внутрь процедуры не вставить.

Поэтому делаю так:

Код: Выделить всё

sp.SQL.Text := 'SELECT ID, ST, RESULT, ROW_NUMBER() OVER (ORDER BY ID) AS ROW_NUMBER FROM SP_TELEGRAM_FIND_BY_PARAMS(:TELEGRAM_ID)';
SP.Params[0].AsLargeInt := user.ID;
sp.PrepareSQL(True);// isQuery
sp.Open;
Получаю 8 записей, как и положено, но....
на строке sp.FieldByName('ROW_NUMBER') ошибка: ROW_NUMBER не найдено.

Если заменить sp.Open на SP.ExecProc, то ошибок нет, но и записей тоже нет.
Этот самый запрос в IBExpert выполняется без ошибок и показывает 8 записей.
Как мне то же самое сделать в UniDac 8 с использованием TUniStoredProc?

Re: ROW_NUMBER() и селективная процедура

Добавлено: Чт 10 сен 2020 09:37
ViktorV
Для решения вашей задачи вы можете попробовать использовать следующий код:

Код: Выделить всё

  sp.SpecificOptions.Values['DescribeParams'] := 'True';
  sp.PrepareSQL(True);// isQuery
  sp.SQL.Text := 'SELECT ID, ST, RESULT, ROW_NUMBER() OVER (ORDER BY ID) AS ROW_NUMBER FROM SP_TELEGRAM_FIND_BY_PARAMS(:TELEGRAM_ID)';
  sp.Params[0].AsLargeInt := user.ID;
  sp.Open;