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

Обсуждение возникших проблем, предложений и ошибок UniDAC компонентов
Ответить
Akella
Сообщения: 200
Зарегистрирован: Пн 02 апр 2012 14:41

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

Сообщение Akella » Вт 08 сен 2020 09:07

Есть сложная процедура в 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?
Вложения
Screenshot_1.jpg
Screenshot_1.jpg (18.85 КБ) 6589 просмотров

ViktorV
Devart Team
Сообщения: 202
Зарегистрирован: Чт 31 июл 2014 09:52

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

Сообщение ViktorV » Чт 10 сен 2020 09:37

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

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

  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;

Ответить