![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Процедуры в IB (Firebid 1.0.0.2) [D6, IB6.x]
YuRock © (2004-03-26 13:06:00)Уважаемые мастера! Прошу прощенья за скорее всего простой вопрос, но все же...
Я хочу получить в результате выполнения процедуры таблицу, а у меня не получается. Если можно - пошлите на ссылку полезную :), или просто подскажите, как сделать.
Я делаю примерно так (есть ошибки, которые я и прошу Вас помочь мне исправить):
RECREATE PROCEDURE GET_LOST_CHECKNUMBERS(
TERMINAL_ID SMALLINT,
SHIFT_FROM INTEGER,
SHIFT_TO INTEGER,
) AS
BEGIN
SELECT * FROM LOST_CHECKNUMBERS
WHERE TERMINAL_ID = :TERMINAL_ID
AND SHIFT_ID >= :SHIFT_FROM
AND SHIFT_ID <= :SHIFT_TO;
END
Затем хочу вызвать примерно так (возможно, тоже не правильно):
EXECUTE PROCEDURE GET_LOST_CHECKNUMBERS 4004, 98, 98
Спасибо.
YuRock (2004-03-26 16:47:00) [1]> Digitman
Спасибо. Я уже со всем давно разобрался. Просто до утра сегодняшнего дня мне не приходилось сталкиваться с конструкцией типа SELECT..FROM ИМЯ_ПРОЦЕДУРЫ, по-этому и в теме я неверно написал вызов. Извините.
Digitman (2004-03-26 14:35:00) [2]
> YuRock
тебе сейчас следует понять главное : есть процедуры, которые ничего не возвращают (1), которые возвращают просто некие значения (2) и которые возвращают НД (при этом открывают курсор управления этим НД для использования на кл.стороне) (3)
в случае (2) SUSPEND не нужен, в случае (3) - обязателен
в случае (2) обращение к процедуре осуществляется по EXECUTE PROCEDURE, в случае (3) - по SELECT..FROM ИМЯ_ПРОЦЕДУРЫ
Digitman (2004-03-26 14:29:00) [3]
> YuRock © (26.03.04 13:49) [11]
> Мне как-раз через select и надо
чего городишь-то ? ты же сам ЯВНО указал требуемый тебе метод использования
EXECUTE PROCEDURE GET_LOST_CHECKNUMBERS 4004, 98, 98
никаким "через select" здесь не пахнет, и это означает, что НД тебе не нужен
а если бы нужен был, то вызов проц-ры выглядел бы совсем иначе
SELECT * FROM GET_LOST_CHECKNUMBERS(4004, 98, 98)
вот при таком раскладе в теле процедуры и нужны будут и INTO и SUSPEND
YuRock (2004-03-26 13:49:00) [4]> Johnmen © (26.03.04 13:43) [10]
> Карелин Артем
Мне как-раз через select и надо. Не надо спорить. Я просто раньше никогда не работал так - потому и вопрос задал некорректно.
Johnmen (2004-03-26 13:43:00) [5]>Карелин Артем ©
>Потому что
>...
Что надо автору - неясно. Но с большей вероятность я предположил, что получить НД.
Карелин Артем (2004-03-26 13:39:00) [6]Надо автору вызывать через select, тогда никаких First не надо, а suspend надо
Карелин Артем (2004-03-26 13:36:00) [7]Johnmen © (26.03.04 13:18) [7]
Потому что
Затем хочу вызвать примерно так (возможно, тоже не правильно):
EXECUTE PROCEDURE GET_LOST_CHECKNUMBERS 4004, 98, 98
Johnmen (2004-03-26 13:18:00) [8]>Карелин Артем © (26.03.04 13:14) [6]
>Для такой процедуры Suspend не нужен.
Почему же ?
Карелин Артем (2004-03-26 13:14:00) [9]После INTO перечисляй выходные параметры. Перед каждым двоеточие. Для такой процедуры Suspend не нужен. Еще желательно ограничить Select условием first(1), потому как в таком случае возвращается 1 запись максимум.
YuRock (2004-03-26 13:12:00) [10]Не успел вопрос задать - уже ответили!
Большое спасибо!
Digitman (2004-03-26 13:11:00) [11]
> хочу получить в результате выполнения процедуры таблицу,
> а у меня не получается
и не получится, потому что это невозможно
но возможно получить набор данных (НД) с открытым курсором в нем
см. [1]
YuRock (2004-03-26 13:10:00) [12]Да. Прошу не обращать внимания на запятую после 4-й строки (на самом деле ее нет).
А ошибка в конце SELECT'а - на ";" ругается.
Johnmen (2004-03-26 13:09:00) [13]FORSELECT ... INTO... DO SUSPEND;
И про выходные параметры не забыть.
Всё это есть в стандартной документации.
Карелин Артем (2004-03-26 13:09:00) [14]И вместо звезды явно перечисляй поля.